我想知道如何做一个全局变量来保存几行复制并粘贴这一行。它可能是数组并将它们放在一个变量中?我想在其他路线中使用这个变量。
$providerEmail = Auth::user()->email;
$providerName = Auth::user()->first_name;
$providerSurname = Auth::user()->last_name;
$providerMobile = Auth::user()->mobile;
答案 0 :(得分:52)
您可以在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;
// ...
}
答案 1 :(得分:12)
我见过的最好方法是使用配置文件。
在您的应用中 - >配置文件夹,您创建一个名为(例如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
答案 2 :(得分:7)
全球比赛很糟糕。无论如何,不要使用全局变量,不考虑使用全局变量,总是考虑如何在代码中使用它们,并且仍然拥有所需的全部内容。 Here are some reasons,还有更多。
相反,使用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
。
答案 3 :(得分:5)
我喜欢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
答案 4 :(得分:1)
我在你提出的另一个问题上也给了你相同的答案,你没有回答。 Link
没有理由为$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
在控制器的其他位置使用它。
答案 5 :(得分:0)
你应该创建一个对象来做到这一点。
使用这些属性provider
,email
等创建一个name
对象并实例化它并设置属性值,如:
$provider = new Provider();
$provider->email = Auth::user()->email;
然后将对象保存在会话中:
$_SESSION['provider'] = $provider;
我不熟悉Laravel,我不知道直接使用Auth
对象是否是一个好习惯,但更简单的解决方案是:
$_SESSION['provider'] = Auth::user();
还要注意在会话中处理敏感信息:)