Je me demandais comment faire une variable globale pour me sauver quelques lignes de copier et coller ces lignes. Arrangez-vous probablement et mettez-les dans une variable à la place? Je veux utiliser cette variable dans d'autres itinéraires.
$providerEmail = Auth::user()->email;
$providerName = Auth::user()->first_name;
$providerSurname = Auth::user()->last_name;
$providerMobile = Auth::user()->mobile;
Vous pouvez créer un événement singleton
global dans App::before
App::before(function($request)
{
// Singleton (global) object
App::singleton('myApp', function(){
$app = new stdClass;
if (Auth::check()) {
// Put your User object in $app->user
$app->user = Auth::User();
$app->isLoggedIn = TRUE;
}
else {
$app->isLoggedIn = FALSE;
}
return $app;
});
$app = App::make('myApp');
View::share('myApp', $app);
});
Dans n'importe quelle vue, utilisez-le comme
if($myApp->isLoggedIn) {
$myApp->user->email;
$myApp->user->first_name;
// ...
}
Dans n'importe quel contrôleur, vous pouvez utiliser
$myApp = App::make('myApp');
if($myApp->isLoggedIn) {
$myApp->user->email;
$myApp->user->first_name;
// ...
}
Départ Événements d'application .
Le meilleur moyen que j'ai vu est d'utiliser un fichier de configuration.
Dans votre application -> dossier de configuration, vous créez un nouveau fichier appelé (par exemple settings.php
)
app
config
settings.php
Ensuite, dans votre fichier de configuration que vous venez de créer (settings.php
), vous pouvez ajouter:
<?php
$setting_data['foo'] = 'bar';
$setting_data['bar'] = 'foo';
return $setting_data;
Vous pouvez ensuite récupérer le fichier de configuration à partir de votre code en utilisant:
echo Config::get('settings.foo'); // Will echo bar
echo Config::get('settings.bar'); // Will echo foo
Les globales sont mauvaises. Quoi qu'il en soit, n'utilisez pas de variables globales, ne pensez pas à utiliser des variables globales, réfléchissez toujours à la façon dont vous pouvez ne pas les utiliser dans votre code et dont vous avez toujours tout ce dont vous avez besoin. Voici quelques raisons , et il y en a beaucoup plus.
Utilisez plutôt Laravel pour vous aider à:
Forcer la connexion sur vos itinéraires en créant des groupes d’itinéraires authentifiés:
Route::group(array('before' => 'auth'), function()
{
Route::get('/users/posts', array('as'=>'users.posts.index', 'uses'=>'PostsController@usersPostsIndex'));
});
Maintenant, vous savez que chaque appel de vos publications sera authentifié, vous pouvez simplement
class PostsController extends Controller {
public function usersPostsIndex()
{
return View::('users.posts.index')->
with('user', Auth::user());
}
}
À votre avis, il vous suffira de
{{$user->email}}
{{$user->first_name . ' ' . $user->last_name}}
{{$user->email}}
{{$user->mobile}}
Si vous ne voulez pas écrire de code pour envoyer une instance utilisateur à toutes vos vues, utilisez la magie de View Composers de Laravel, ajoutez-la à votre filters.php ou créez un fichier composers.php:
View::composer(array('users.posts.index','users.posts.edit'), function($view)
{
$view->with('user', Auth::user());
});
Et voici comment vos points de vue peuvent être utilisés maintenant:
class PostsController extends Controller {
public function usersPostsIndex()
{
return View::('users.posts.index');
}
public function usersPostsEdit()
{
return View::('users.edit.index');
}
}
Parce que Laravel injectera automatiquement Auth::user()
dans ces vues en tant que $user
.
J'aime la méthode View::share
.
Ajoutez les éléments suivants dans app/controllers/BaseController.php
class BaseController extends Controller {
public function __construct() {
$name = 'jack';
View::share('user', $name); // Share $user with all views
}
}
et maintenant $user
sera disponible pour toutes vos vues.
Références: Laravel docs , article de blog
Je vous ai également donné la même réponse dans une autre question que vous avez posée, vous n'avez pas répondu. Lien
Il n'y a aucune raison d'avoir une variable distincte pour chaque propriété de votre modèle $provider
. Enregistrez simplement le modèle entier dans une variable comme celle-ci.
if (Auth::check())
{
$provider = Auth::user();
}
Cela se ferait généralement dans un itinéraire comme celui-ci.
Route::get('/provider/page/example', function()
{
$provider = Auth::user();
return View::make('name.of.view', ['provider' => $provider]);
});
Après avoir fait cela, vous pouvez accéder aux différentes propriétés du $provider
dans vos vues comme ceci.
<p>Your email address is: {{$provider->email}} and your first name is {{$provider->first_name}}</p>
Une autre option consiste à utiliser un contrôleur et à définir cette variable une seule fois dans le contrôleur, ce qui la rend accessible depuis toutes les vues à l'aide de View::share()
.
class ProviderController extends BaseController {
protected $provider;
public function __construct()
{
$this->provider = Auth::user();
View::share('provider', $this->provider);
}
public function getIndex()
{
return View::make('some.view.name');
}
}
Après cela, vous pouvez utiliser la variable $provider
dans vos vues, comme indiqué ci-dessus, en utilisant des éléments tels que $provider->email
. Vous pouvez également l'utiliser ailleurs dans le contrôleur en utilisant $this->provider
.
Vous devriez créer un objet pour le faire.
Créez un objet provider
avec ces propriétés, email
, name
, etc., puis instanciez-le et définissez les valeurs des propriétés, comme suit:
$provider = new Provider();
$provider->email = Auth::user()->email;
Et puis vous enregistrez l'objet dans votre session:
$_SESSION['provider'] = $provider;
Je ne connais pas Laravel et je ne sais pas s'il est judicieux de travailler directement avec l'objet Auth
, mais une solution plus simple consisterait à:
$_SESSION['provider'] = Auth::user();
Veillez également à utiliser des informations sensibles sur votre session :)