コピーの数行を節約するためにグローバル変数を実行して、この行を貼り付ける方法を考えていました。おそらくそれを配列して、代わりにそれらを1つの変数に入れますか?この変数を他のルートで使用したい。
$providerEmail = Auth::user()->email;
$providerName = Auth::user()->first_name;
$providerSurname = Auth::user()->last_name;
$providerMobile = Auth::user()->mobile;
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;
// ...
}
チェックアウト アプリケーションイベント 。
私が見た中で最良の方法は、設定ファイルを使用することです。
アプリ-> 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}}
_
すべてのビューに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 docs 、 blog post
あなたが尋ねた別の質問でも同じ答えをしました、あなたは答えませんでした。 リンク
_$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
_を使用して、コントローラーの他の場所で使用することもできます。
そのためには、オブジェクトを作成する必要があります。
これらのプロパティprovider
、email
などを使用してname
オブジェクトを作成し、インスタンス化して、次のようにプロパティ値を設定します。
$provider = new Provider();
$provider->email = Auth::user()->email;
次に、オブジェクトをセッションに保存します。
$_SESSION['provider'] = $provider;
Laravelに慣れていないので、Auth
オブジェクトを直接操作するのが良い方法かどうかはわかりませんが、より簡単な解決策は次のとおりです。
$_SESSION['provider'] = Auth::user();
セッションで機密情報を扱うことにも注意してください:)