2017-02-17 2 views
1

Je construis une application multi langues avec Laravel, et j'ai besoin que les utilisateurs puissent se connecter et sélectionner leur langue préférée (table "langues") à partir d'un champ de sélection et stocker dans la base de données ("language_id" dans la table "users") simplement en le sélectionnant dans le champ. Je n'ai actuellement aucune idée de comment je peux y parvenir sans un formulaire et un bouton de soumission. Quelqu'un peut-il m'expliquer comment je peux faire cela correctement?Sauvegarder la valeur sélectionnée onchange Laravel

Contrôleur: Toutes les langues disponibles sont stockées dans une variable et envoyées à toutes les vues.

namespace App\Http\Controllers; 

use App\Language; 
use Illuminate\Foundation\Bus\DispatchesJobs; 
use Illuminate\Routing\Controller as BaseController; 
use Illuminate\Foundation\Validation\ValidatesRequests; 
use Illuminate\Foundation\Auth\Access\AuthorizesRequests; 
use Illuminate\Support\Facades\View; 

class Controller extends BaseController 
{ 
    use AuthorizesRequests, DispatchesJobs, ValidatesRequests; 


    public function __construct() 
    { 
     $languages = Language::all(); 

     View::share('languages', $languages); 
    } 

} 

sélectionnez Menu: une boucle foreach qui renseigne le champ de sélection avec les langues envoient via le contrôleur.

   <li> 

         <select class="form-control" id="language" name="language"> 
          @foreach ($languages as $language) 
           <option value="{{ $language->id }}">{{ $language->name }}</option> 
          @endforeach 
         </select> 
       </li> 

Base de données: table « utilisateurs » a « language_id »

+0

Donc la sélection de langue fait partie du formulaire de connexion? – Jerodev

Répondre

1

Voici l'idée brève que comment pouvez-vous faire:

En cas de changement de la boîte de sélection, le feu AJAX appelez et stockez la valeur dans la table de base de données. Faites-moi savoir si vous ne savez pas comment le coder. Peut vous donner un bref code.

2

Je suppose que l'utilisateur est connecté et que vous affichez l'une des langues comme langue par défaut. Après cela, essayer quelque chose comme:

Jquery:

$('#language').change(function(){ 
    // make an ajax call and save the selected language option 
    // in the user table under the `language_id` column 
    // and change the language of pages when selection changed 
}); 

sur chaque connexion récupérer la valeur de language_id et selon cette valeur afficher l'option de langue sélectionnée. Vous pouvez également conserver cette valeur dans session pour gérer l'état de la liste déroulante dans l'ensemble de l'application.

2

Vous devez enregistrer ces données quelque part. Dans un cookie ou une session. Si vous voulez le gérer dans Laravel, je suggère d'utiliser l'appel AJAX de sorte que vous serez en mesure de le gérer dans votre application. Eater l'enregistre dans la session ou dans un cookie.

Autre façon est de write it in cookie avec javascript que de lire ce même cookie lorsque vous chargez la page dans certains middleware et définir la langue. Dans les deux cas, vous aurez besoin d'un middleware pour définir la langue chaque fois qu'un utilisateur chargera la page.