Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/275.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php laravel 4中的全局变量_Php_Variables_Laravel_Laravel 4_Global - Fatal编程技术网

Php laravel 4中的全局变量

Php laravel 4中的全局变量,php,variables,laravel,laravel-4,global,Php,Variables,Laravel,Laravel 4,Global,我想知道如何使用一个全局变量来保存几行复制和粘贴这些行。数组,然后将它们放在一个变量中?我想在其他路径中使用此变量 $providerEmail = Auth::user()->email; $providerName = Auth::user()->first_name; $providerSurname = Auth::user()->last_name; $providerMobile = Auth::user()->mobile; 您应该创建一个

我想知道如何使用一个全局变量来保存几行复制和粘贴这些行。数组,然后将它们放在一个变量中?我想在其他路径中使用此变量

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

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

创建具有这些属性的
提供者
对象、
电子邮件
名称
等,并实例化它并设置属性值,如:

$provider = new Provider();

$provider->email = Auth::user()->email;
然后在会话中保存对象:

$_SESSION['provider'] = $provider;
我不熟悉Laravel,也不知道直接使用
Auth
对象是否是一种好做法,但更简单的解决方案是:

$_SESSION['provider'] = Auth::user();
还要注意在你的会议上处理敏感信息:)

我在你问的另一个问题中也给了你同样的答案,你没有回答

没有理由为
$provider
模型的每个属性单独设置一个变量。只需将整个模型保存到如下变量中即可

if (Auth::check())
{
    $provider = Auth::user();
}
Route::get('/provider/page/example', function()
{
    $provider = Auth::user();

    return View::make('name.of.view', ['provider' => $provider]);
});
<p>Your email address is: {{$provider->email}} and your first name is {{$provider->first_name}}</p>
这通常是在这样的路线上完成的

if (Auth::check())
{
    $provider = Auth::user();
}
Route::get('/provider/page/example', function()
{
    $provider = Auth::user();

    return View::make('name.of.view', ['provider' => $provider]);
});
<p>Your email address is: {{$provider->email}} and your first name is {{$provider->first_name}}</p>
完成此操作后,您可以在视图中访问
$provider
的不同属性,如下所示

if (Auth::check())
{
    $provider = Auth::user();
}
Route::get('/provider/page/example', function()
{
    $provider = Auth::user();

    return View::make('name.of.view', ['provider' => $provider]);
});
<p>Your email address is: {{$provider->email}} and your first name is {{$provider->first_name}}</p>

完成此操作后,您可以在视图中使用
$provider
变量,如上图所示,使用
$provider->email
等操作。您还可以通过使用
$this->provider

在控制器中的其他位置使用它。您可以在
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;
    // ...
}

退房。

环球杯不好。不管怎样,不要使用全局变量,不要考虑使用全局变量,始终要考虑如何在代码中不使用它们,而仍然拥有所需的一切,还有很多

相反,请使用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}}
如果不想编写代码将用户实例发送到所有视图,请使用Laravel的View Composer的魔力,将其添加到filters.php或创建Composer.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中添加以下内容

现在,
$user
将可用于所有视图

参考资料:

我见过的最好的方法是使用配置文件

在app->config文件夹中,创建一个名为的新文件(例如
settings.php

然后,在刚刚创建的配置文件(
settings.php
)中,您可以添加:

<?php

$setting_data['foo'] = 'bar';
$setting_data['bar'] = 'foo';

return $setting_data;

目前唯一的敏感信息是用户的电子邮件地址。你应该注意你的会话信息,如果你真的需要存储它,就去做吧。我的会话存储用户
id
,当我需要它时,我会从数据库中请求它。我猜@almosnow,谢谢!我在哪里可以在{code here}行之前插入App::呢?我是说什么文件??感谢您的澄清:)找到了在哪里,它在filter.php:)再次感谢您的代码!首先,非常感谢您提供此解决方案。但是,我如何使它对所有控制器/模型等全局可用,而不必在每次需要在控制器中使用时都实例化它?@Tim,非常欢迎您,在
视图中它已经在全局可用,您可以使用
$myApp
从任何
视图访问它,因为
视图::共享('myApp',$app);
从任何
控制器
您可以使用
app('myApp')
app::make('myApp')
访问它。它仍然不适用于我。我缺少什么吗?它说“未定义变量”您必须是,它可以工作,并且在官方文档中。确保您添加了
View::share('myvar',myvalue'))在控制器中,然后在视图中确保使用
$myvar