Глобальная переменная в laravel 4
Мне было интересно, как сделать глобальную переменную, чтобы сохранить несколько строк копии и вставить эти строки. Массив, возможно, и вместо них вместо них помещается одна переменная? Я хочу использовать эту переменную в других маршрутах.
$providerEmail = Auth::user()->email;
$providerName = Auth::user()->first_name;
$providerSurname = Auth::user()->last_name;
$providerMobile = Auth::user()->mobile;
Ответы
Ответ 1
Вы можете создать глобальное событие singleton
внутри 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);
});
В любом представлении используйте его как
if($myApp->isLoggedIn) {
$myApp->user->email;
$myApp->user->first_name;
// ...
}
В любом контроллере вы можете использовать
$myApp = App::make('myApp');
if($myApp->isLoggedIn) {
$myApp->user->email;
$myApp->user->first_name;
// ...
}
Отъезд События приложений.
Ответ 2
Лучший способ, который я видел, - использовать файл конфигурации.
В папке вашего приложения → 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
Ответ 3
Глобалы плохие. Независимо от того, что, не используйте глобальные переменные, не думайте об использовании глобальных переменных, всегда думайте о том, как вы не можете использовать их в своем коде и все еще иметь все, что вам нужно. Вот несколько причин, и их гораздо больше.
Вместо этого используйте Laravel power, чтобы помочь вам:
Принудительно вводить логин на своих маршрутах, создавая группы аутентифицированных маршрутов:
Route::group(array('before' => 'auth'), function()
{
Route::get('/users/posts', array('as'=>'users.posts.index', 'uses'=>'[email protected]'));
});
Теперь вы знаете, что каждый вызов ваших сообщений будет аутентифицирован, вы можете просто
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 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
.
Ответ 4
Мне нравится метод 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, сообщение в блоге
Ответ 5
Я также дал вам тот же ответ в другом вопросе, который вы задали, вы не ответили. Ссылка
Нет причин иметь отдельную переменную для каждого свойства вашей модели $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
.
Ответ 6
Вы должны создать объект для этого.
Создайте объект provider
с этими свойствами, email
, name
и т.д., и создайте его и задайте значения свойств, например:
$provider = new Provider();
$provider->email = Auth::user()->email;
И затем вы сохраняете объект в своем сеансе:
$_SESSION['provider'] = $provider;
Я не знаком с Laravel, и я не знаю, хорошо ли работать с объектом Auth
, но более простым решением было бы следующее:
$_SESSION['provider'] = Auth::user();
Также имейте в виду работу с конфиденциальной информацией на вашем сеансе:)