如何在Laravel中的各个页面/控制器之间保留数据

时间:2014-08-14 05:33:39

标签: php session laravel-4

我在通过

请求登录页面时设置会话变量
with->('data', $data);

并使用

Session::reflash();
在登录视图中

将此会话变量的生命周期延长到下一个请求。

在登录页面中,我有一个指向另一个页面的链接,只有管理员用户可以看到它,所以我为该页面编写了一个需要会话变量数据的过滤器。

但是当我点击链接发出新请求时,数据变量已经消失了。所以过滤器无法获得它。

当我向其他页面发出新请求时,如何获得相同的会话变量?

1 个答案:

答案 0 :(得分:2)

我建议您使用以下内容:

Session::put("data", $data);

在此之前:

with->('data', $data);

在下一个请求中你会这样做:

Session::get("data");

当您的使用完成后,您将其删除:

Session::forgot("data");

但是如果您的数据是固定的,并且应该在多个地方重复使用,最好通过模型为它提供服务(可能通过方法返回一些值)。

class MyModel extends Eloquent
{
   function SomeData ()
   {
      return array("something" => "sometingElse");
    }
}

在您的控制器中,您可以:

MyModel::SomeData();

但是,您也可以从数据库中获取数据。但是,如果您的数据实际上不是数据库驱动的,例如它们是页面的一些标题,您也可以通过BaseController全局变量传递它:

请注意,您的控制器通常是另一个BaseController的范围:

class Pages extends BaseController
{

}

BaseController中,您可以定义一些默认值:

class BaseController extends Controller
{
   protected $myValues;

   function getDefaultValues()
   {
      $this->myValues = array("something"=>"somethingElse");
      return $this->myValues; // however this is an example, you may not need any method
      // and the property itself might be enough.
   } 
}