控制器成员变量



在laravel中是否有可能保持控制器对象的状态?

在我找到的每个例子中,控制器看起来都是这样的:

 class MyController extends Controller {
      public function getView(){ //return the view }
      public function postData() { //save the data }
 }

我要做的是调用一个服务,它从我的数据库中加载特定的数据并将其返回给视图。在上面的例子中,这应该在getView()函数中完成。如果我需要相同的数据在我的postData()函数..然后我必须在postData函数中进行另一个数据库调用。由于laravel中的路由,不可能在'MyController'中有一个成员变量,并且只为类加载一次数据。当我通过路由调用getView函数时,我会得到MyController的另一个实例,而不是调用postData。是否有可能调用一个特定的函数只有一次为整个控制器,并获得访问这个值从控制器内的所有函数?

是否有可能只调用一次特定函数整个控制器并从所有的控制器内的功能?

根据我的理解,这是不可能的。实际上控制器的任何函数都是通过路由调用的。当你的any路由被调用时每次控制器的新对象被创建。但它有另一种方式。您可以使用缓存。你可以这样实现它:
  • 调用控制器的特定功能。
  • 从数据库获取数据。
  • 存储在Cache中供其他功能使用
  • 在其他功能检查数据是否在缓存中可用?然后从缓存中获取数据,否则调用数据库函数获取数据。

简单编码如下:

Use Cache;
 class MyController extends Controller {
      public function getView(){ 
        $data = call_to_database_and_returned_data();
        Cache::put('data',$data,120);
        return the view 
      }
      public function postData() { 
         $data = null;
         if(Cache::has('data')) {
            $data = Cache::get('data');
         } else {
            $data = call_to_database_and_returned_data();
            Cache::put('data',$data,120);
         }
      }
 }

语法描述:

Cache::put('name_to_save_data',$your_variable_to_save,for_number_minutes);

最新更新