将对象保存在类变量中并在另一个函数中使用它 - php,laravel

时间:2017-01-15 14:27:25

标签: php laravel

所以这是代码

use App\Video;

class HomeController extends Controller
{
protected $video;

public function index()
{
// $video_to_watch is fetched from db and I want to save it and use it in  
// another function in this controller

$this -> video = $video_to_watch;

return view('home', compact('video_to_watch'));
}

public function feedback(Request $request)
{
 dd($this -> video);
}
}

反馈由于某种原因返回null。

当我把

dd($this -> video);

在index()中它可以正常工作,而不是null。

我已尝试过这里建议的内容:Laravel doesn't remember class variables

但它没有帮助。

我确定这是一个我忽视的愚蠢行为。但似乎无法弄明白什么,任何帮助都非常赞赏。

2 个答案:

答案 0 :(得分:2)

您无法在两个不同的请求之间保留$video值。您必须在每个请求中获取视频数据。

use App\Video;

class HomeController extends Controller
{    
    public function index() {
        $myVideo = $this->getMyVideo();    
        return view('home', $myVideo);
    }

    public function feedback(Request $request) {
       dd($this->getMyVideo);
    }

    private function getMyVideo() {
        // fetch $video_to_watch from db         
        return $video_to_watch ;
    }

}

答案 1 :(得分:0)

首先,不要在Controller中获取数据。它只是模型和视图之间的“粘合剂”。重复。 无法在控制器内取物

使用域服务和依赖注入来获取业务数据,如果要共享此数据,请创建共享服务(单个实例)。

-

将数据对象放入控制器属性类会在方法调用之间产生临时依赖关系。躲开它。改为使用服务。