web-dev-qa-db-ja.com

laravel 4のグローバル変数

コピーの数行を節約するためにグローバル変数を実行して、この行を貼り付ける方法を考えていました。おそらくそれを配列して、代わりにそれらを1つの変数に入れますか?この変数を他のルートで使用したい。

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

App::beforeイベント内でグローバルsingletonを作成できます

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;
    // ...
}

チェックアウト アプリケーションイベント

52
The Alpha

私が見た中で最良の方法は、設定ファイルを使用することです。

アプリ-> 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
12
ajtrichards

グローバルは悪いです。何があっても、グローバル変数を使用しないでください。グローバル変数の使用を考えないでください。常にコードでそれらを使用できず、必要なものがすべて揃っていることを考えてください。 いくつかの理由があります 、そしてもっとたくさんあります。

代わりに、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}}
_

すべてのビューにUserインスタンスを送信するコードを記述したくない場合は、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_として自動的に挿入するためです。

私は好き View::share 方法。

app/controllers/BaseController.phpに以下を追加します

class BaseController extends Controller {
    public function __construct() {       
        $name = 'jack';    
        View::share('user', $name); // Share $user with all views
    }
}

そしていま $userはすべてのビューで使用できます。

参考資料: Laravel docsblog post

5
Justin

あなたが尋ねた別の質問でも同じ答えをしました、あなたは答えませんでした。 リンク

_$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>
_

別のオプションは、コントローラーを使用してこの変数をコントローラーで1回だけ設定し、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_を使用して、コントローラーの他の場所で使用することもできます。

1
Sajan Parikh

そのためには、オブジェクトを作成する必要があります。

これらのプロパティprovideremailなどを使用してnameオブジェクトを作成し、インスタンス化して、次のようにプロパティ値を設定します。

$provider = new Provider();

$provider->email = Auth::user()->email;

次に、オブジェクトをセッションに保存します。

$_SESSION['provider'] = $provider;

Laravelに慣れていないので、Authオブジェクトを直接操作するのが良い方法かどうかはわかりませんが、より簡単な解決策は次のとおりです。

$_SESSION['provider'] = Auth::user();

セッションで機密情報を扱うことにも注意してください:)

0
Gerep