laravel 4中的全局变量

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

您可以singletonApp::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)

查看应用程序事件.

  • 这家伙得到了它 (3认同)
  • 发现在哪里,它在filter.php :)再次感谢这个代码! (2认同)

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)


Ant*_*iro 7

全球都很糟糕.无论如何,不​​要使用全局变量,不考虑使用全局变量,总是考虑如何在代码中使用它们,并且仍然拥有所需的全部内容.这是一些原因,还有更多.

相反,使用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.


Jus*_*tin 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
    }
}
Run Code Online (Sandbox Code Playgroud)

现在$user将提供您的所有观点.

参考文献: Laravel docs,博客文章


小智 0

您应该创建一个对象来执行此操作。

使用这些属性创建一个provider对象,emailname实例化它并设置属性值,例如:

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

另请注意在会话中处理敏感信息:)