Подтвердить что ты не робот

Глобальная переменная в laravel 4

Мне было интересно, как сделать глобальную переменную, чтобы сохранить несколько строк копии и вставить эти строки. Массив, возможно, и вместо них вместо них помещается одна переменная? Я хочу использовать эту переменную в других маршрутах.

  $providerEmail = Auth::user()->email;
  $providerName = Auth::user()->first_name;
  $providerSurname = Auth::user()->last_name;
  $providerMobile = Auth::user()->mobile;
4b9b3361

Ответ 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();

Также имейте в виду работу с конфиденциальной информацией на вашем сеансе:)