2016-07-04 1 views
0

J'ai un contrôleur de base qui obtient certaines propriétés par défaut basées sur le nom de domaine pour chaque demande. Ceux-ci comprennent app_id et language_id.laravel passant valeur du contrôleur au modèle

Quelle serait la méthode recommandée pour obtenir ces valeurs définies dans mes modèles, de sorte que, par exemple si j'essayé de créer un nouveau modèle Post il aurait le app_id et language_id fixé par les valeurs définies dans mon base_controller.

Cordialement à toute réponse.

+0

méthode utilisation __construct dans votre modèle. passer ces valeurs lorsque l'objet est initié. –

+0

Merci Ravi, j'ai essayé d'utiliser __construct sur le modèle et de tester simplement une valeur codée en dur pour l'app_id mais quand j'essaie de sauvegarder l'objet nouvellement créé, l'app_id n'est pas stocké. – jon

+0

Y a-t-il une raison particulière pour que 'app_id' et' language_id' soient injectés dans tous les modèles? Au lieu de cela, créez un modèle qui n'a que ces propriétés et mappez celles qui sont éloquentes. ou les injecter à l'objet utilisateur et le transmettre –

Répondre

0

Vous pouvez utiliser des sessions pour stocker vos identifiants app_id et language_id, et les obtenir à partir de la session lorsque vous en avez besoin.

Check How to use sessions in Laravel from here

+0

Merci à MohammedA, est-ce que ce serait une bonne pratique recommandée pour transmettre les données? – jon

+0

Dépend des données que vous stockez et de leur sensibilité, également où stockez-vous les données. c'est-à-dire que si vous stockez des sessions dans des cookies (plutôt que db ou un fichier), n'importe qui peut accéder à vos données. – theMohammedA

0

Vous pouvez utiliser la méthode __consruct comme suggéré dans le commentaire.

Voici une autre alternative: -

YourController.php

<?php 
namespace App\Http\Controllers; 

use Illuminate\Http\Request; 

use App\Http\Requests; 
use App\Http\Controllers\Controller; 

use App\YourModel; 

class YourController extends Controller 
{ 

    public function callModelStaticMethod() 
    { 
     $data = ['appId'=>4, 'languageId'=>5]; 
     YourModel::passDataToModelMethod($data);   
    } 
} 

YourModel.php

<?php 

namespace App; 

use Illuminate\Database\Eloquent\Model; 

class YourModel extends Model 
{ 

    public static function passDataToModelMethod($data) 
    { 
     var_dump($data); 
     // Write your business logic here. 
     // $newObj = new self; 
     // $newObj->app_id = $data['app_id']; 
     // $newObj->language_id = $data['languageId']; 
     // $newObj->save(); 
    } 

} 
+0

Merci @Ravi Hirani pour votre aide continue, alors quand devrais-je appeler le callModelStaticMethod() pour définir les données? – jon

+0

@jon: Vous n'avez pas besoin d'appeler cette méthode. C'était juste par exemple. Vous devriez considérer le code à l'intérieur de cette méthode. Par ce code, vous pouvez transmettre des données du contrôleur au modèle. Une question Comment avez-vous obtenu app_id et language_id dans le contrôleur? –

+0

Je mets $ data = Domain :: où ('domain', '=', $ _SERVER ['SERVER_NAME']) -> premier(); dans le constructeur du contrôleur. – jon