Мне было интересно, как сделать глобальную переменную, чтобы сохранить несколько строк копии и вставить эти строки. Массив, возможно, и вместо них вместо них помещается одна переменная? Я хочу использовать эту переменную в других маршрутах.
$providerEmail = Auth::user()->email; $providerName = Auth::user()->first_name; $providerSurname = Auth::user()->last_name; $providerMobile = Auth::user()->mobile;
Вы можете создать глобальный singleton
в App::before
event
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); });
В любом случае используйте его как
if($myApp->isLoggedIn) { $myApp->user->email; $myApp->user->first_name; // ... }
поif($myApp->isLoggedIn) { $myApp->user->email; $myApp->user->first_name; // ... }
В любом контроллере вы можете использовать
$myApp = App::make('myApp'); if($myApp->isLoggedIn) { $myApp->user->email; $myApp->user->first_name; // ... }
по$myApp = App::make('myApp'); if($myApp->isLoggedIn) { $myApp->user->email; $myApp->user->first_name; // ... }
Проверьте события приложений .
Лучший способ, который я видел, – использовать файл конфигурации.
В папке app -> config вы создаете новый файл (например, settings.php
)
app config settings.php
Затем в созданном вами файле конфигурации ( settings.php
) вы можете добавить:
<?php $setting_data['foo'] = 'bar'; $setting_data['bar'] = 'foo'; return $setting_data;
Затем вы можете извлечь файл конфигурации из своего кода, используя:
echo Config::get('settings.foo'); // Will echo bar echo Config::get('settings.bar'); // Will echo foo
Глобалы плохие. Независимо от того, что, не используйте глобальные переменные, не думайте об использовании глобальных переменных, всегда думайте о том, как вы не можете использовать их в своем коде и все еще иметь все, что вам нужно. Вот несколько причин , и их гораздо больше.
Вместо этого используйте Laravel power, чтобы помочь вам:
Принудительно вводить логин на своих маршрутах, создавая группы аутентифицированных маршрутов:
Route::group(array('before' => 'auth'), function() { Route::get('/users/posts', array('as'=>'users.posts.index', 'uses'=>'PostsController@usersPostsIndex')); });
Теперь вы знаете, что каждый вызов ваших сообщений будет аутентифицирован, вы можете просто
class PostsController extends Controller { public function usersPostsIndex() { return View::('users.posts.index')-> with('user', Auth::user()); } }
По вашему мнению, вам просто нужно будет
{{$user->email}} {{$user->first_name . ' ' . $user->last_name}} {{$user->email}} {{$user->mobile}}
Если вы не хотите писать код для отправки экземпляра пользователя во все ваши представления, используйте магию Laravel's View Composers, добавив это в свой файл filters.php или создав файл composers.php:
View::composer(array('users.posts.index','users.posts.edit'), function($view) { $view->with('user', Auth::user()); });
И вот теперь ваши взгляды можно использовать сейчас:
class PostsController extends Controller { public function usersPostsIndex() { return View::('users.posts.index'); } public function usersPostsEdit() { return View::('users.edit.index'); } }
Поскольку Laravel автоматически вводит Auth::user()
в этих представлениях как $user
.
Мне нравится метод View::share
.
Добавьте в приложение / контроллеры следующее: BaseController.php
class BaseController extends Controller { public function __construct() { $name = 'jack'; View::share('user', $name); // Share $user with all views } }
и теперь $user
будет доступен для всех ваших просмотров.
Ссылки: Laravel docs , сообщение в блоге
Я также дал вам тот же ответ в другом вопросе, который вы задали, вы не ответили. Ссылка
Нет причин иметь отдельную переменную для каждого свойства вашей модели $provider
. Просто сохраните всю модель с такой переменной.
if (Auth::check()) { $provider = Auth::user(); }
Это обычно делается на таком пути.
Route::get('/provider/page/example', function() { $provider = Auth::user(); return View::make('name.of.view', ['provider' => $provider]); });
После этого вы можете получить доступ к различным свойствам в $provider
в ваших представлениях, подобных этому.
<p>Your email address is: {{$provider->email}} and your first name is {{$provider->first_name}}</p>
Другим вариантом является использование контроллера и установка этой переменной только один раз в контроллере, что делает его доступным из всех представлений, используя 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'); } }
Сделав это, вы можете использовать переменную $provider
в своих представлениях, как показано выше, используя такие вещи, как $provider->email
. Вы также можете использовать его в другом месте контроллера, используя $this->provider
.
Вы должны создать объект для этого.
Создайте объект- provider
с этими свойствами, email
, name
и т. Д. И создайте его и задайте значения свойств, например:
$provider = new Provider(); $provider->email = Auth::user()->email;
И затем вы сохраняете объект в своей сессии:
$_SESSION['provider'] = $provider;
Я не знаком с Laravel, и я не знаю, хорошо ли работать непосредственно с объектом Auth
но более простым решением было бы:
$_SESSION['provider'] = Auth::user();
Также имейте в виду работу с конфиденциальной информацией на вашем сеансе 🙂