Laravel Controller成员变量

时间:2016-10-16 17:09:12

标签: laravel laravel-4 laravel-5

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

在我发现的每个例子中,控制器都采用以下方式:

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

我要做的是调用一个服务,该服务从我的数据库加载特定数据并将其返回到视图。在上面的例子中,这应该在getView()函数中完成。如果我在postData()函数中需要相同的数据怎么办呢?那么我必须在postData函数中进行另一个数据库调用。由于在laravel中路由,因此无法在“MyController”中拥有成员变量并仅为该类加载一次数据。当我通过路由getView函数调用时,如果我调用postData,我得到MyController的另一个实例。是否有可能只为整个控制器调用一次特定的函数,并从控制器内的所有函数中访问这些值?

1 个答案:

答案 0 :(得分:1)

  

是否有可能只为特定功能调用一次   整个控制器,并从所有的访问权限   控制器内的功能?

根据我的理解,这是不可能的。实际上,控制器的任何功能都是通过路由调用的。每次创建控制器的新对象时,都会调用任何路径。但它还有其他方式。您可以使用缓存。您可以按如下方式实现它:

  • 调用您控制器的特定功能。
  • 从数据库中获取数据。
  • 将其存储在缓存中以用于其他功能。
  • 在其他功能中,检查是否可用于缓存中的数据?然后从Cache中获取else调用数据库函数来获取数据。

只需编码如下:

} ?>
<!DOCTYPE html>

语法说明:

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);
         }
      }
 }