nCo*_*ore 19 php variables global laravel laravel-4
我想知道如何做一个全局变量来节省几行副本和粘贴这一行.它可能是数组并将它们放在一个变量中?我想在其他路线中使用此变量.
$providerEmail = Auth::user()->email;
$providerName = Auth::user()->first_name;
$providerSurname = Auth::user()->last_name;
$providerMobile = Auth::user()->mobile;
Run Code Online (Sandbox Code Playgroud)
The*_*pha 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);
});
Run Code Online (Sandbox Code Playgroud)
在任何视图中,使用它就像
if($myApp->isLoggedIn) {
$myApp->user->email;
$myApp->user->first_name;
// ...
}
Run Code Online (Sandbox Code Playgroud)
在任何控制器中,您都可以使用
$myApp = App::make('myApp');
if($myApp->isLoggedIn) {
$myApp->user->email;
$myApp->user->first_name;
// ...
}
Run Code Online (Sandbox Code Playgroud)
查看应用程序事件.
ajt*_*rds 12
我见过的最好方法是使用配置文件.
在你的app - > config文件夹中,你创建了一个名为(例如settings.php)的新文件
app
config
settings.php
Run Code Online (Sandbox Code Playgroud)
然后在你刚刚创建的配置文件(settings.php)中添加:
<?php
$setting_data['foo'] = 'bar';
$setting_data['bar'] = 'foo';
return $setting_data;
Run Code Online (Sandbox Code Playgroud)
然后,您可以使用以下代码从代码中检索配置文件:
echo Config::get('settings.foo'); // Will echo bar
echo Config::get('settings.bar'); // Will echo foo
Run Code Online (Sandbox Code Playgroud)
全球都很糟糕.无论如何,不要使用全局变量,不考虑使用全局变量,总是考虑如何在代码中使用它们,并且仍然拥有所需的全部内容.这是一些原因,还有更多.
相反,使用Laravel power帮助您:
在您的路由上强制登录,创建经过身份验证的路由组:
Route::group(array('before' => 'auth'), function()
{
Route::get('/users/posts', array('as'=>'users.posts.index', 'uses'=>'PostsController@usersPostsIndex'));
});
Run Code Online (Sandbox Code Playgroud)
现在你知道你的帖子的每个电话都会被验证,你可以
class PostsController extends Controller {
public function usersPostsIndex()
{
return View::('users.posts.index')->
with('user', Auth::user());
}
}
Run Code Online (Sandbox Code Playgroud)
在你看来,你只需要
{{$user->email}}
{{$user->first_name . ' ' . $user->last_name}}
{{$user->email}}
{{$user->mobile}}
Run Code Online (Sandbox Code Playgroud)
如果您不想编写代码来向所有视图发送User实例,请使用Laravel的View Composers魔术,将其添加到filters.php或创建composers.php文件:
View::composer(array('users.posts.index','users.posts.edit'), function($view)
{
$view->with('user', Auth::user());
});
Run Code Online (Sandbox Code Playgroud)
现在就是您现在可以使用的视图:
class PostsController extends Controller {
public function usersPostsIndex()
{
return View::('users.posts.index');
}
public function usersPostsEdit()
{
return View::('users.edit.index');
}
}
Run Code Online (Sandbox Code Playgroud)
因为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
}
}
Run Code Online (Sandbox Code Playgroud)
现在$user将提供您的所有观点.
参考文献: Laravel docs,博客文章
小智 0
您应该创建一个对象来执行此操作。
使用这些属性创建一个provider对象,email并name实例化它并设置属性值,例如:
$provider = new Provider();
$provider->email = Auth::user()->email;
Run Code Online (Sandbox Code Playgroud)
然后将对象保存在会话中:
$_SESSION['provider'] = $provider;
Run Code Online (Sandbox Code Playgroud)
我不熟悉 Laravel,我不知道直接使用对象是否是一个好的做法Auth,但一个更简单的解决方案是:
$_SESSION['provider'] = Auth::user();
Run Code Online (Sandbox Code Playgroud)
另请注意在会话中处理敏感信息:)