未定义 属性: App\Http\Controllers\MyController::$cookieJar

Undefined property: App\Http\Controllers\MyController::$cookieJar

所以我的控制器看起来如下:

use Illuminate\Http\Request;
use Illuminate\Cookie\CookieJar;
use Cookie;

class MyController extends Controller {

    public function __construct(CookieJar $cookieJar)
    {
        $this->id = $this->getID();
        $this->cookieJar = $cookieJar;
    }

    private function getID()
    {
        if (!isset($_COOKIE["ID"])){
            $id = 20;
            $this->cookieJar->queue('ID', $id, 60);
        }

        return $id;
    }

但我一直收到错误消息

Undefined property: App\Http\Controllers\MyController::$cookieJar

在 getID 函数中。

我做错了什么?非常感谢任何可能的帮助!

基本上您的代码中的问题不是 cookieJar class。以下是控制器的正确代码:

use Illuminate\Http\Request;
use Illuminate\Cookie\CookieJar;
use Cookie;

class MyController extends Controller {

    protected $id;
    protected $cookieJar;

    public function __construct(CookieJar $cookieJar)
    {
        $this->cookieJar = $cookieJar;
        $this->id = $this->getID();
    }

    private function getID()
    {
        if (!isset($_COOKIE["ID"])){
            $id = 20;
            $this->cookieJar->queue('ID', $id, 60);
        }

        return $id;
    }

当我们在控制器的所有函数中使用任何 属性 来携带一些值时,我们必须定义这些属性。请检查我的代码。 还有一件事,构造方法中属性的顺序也不正确。因为您使用的函数 getID() 正在使用 $cookieJar 属性。所以你必须先定义 属性 然后在构造函数方法中使用第二个 属性 $id.

我想这对你有帮助。

在你的控制器中,你调用了getID方法,在getID方法中,你使用了你的cookiejar,但是cookiejar还没有被初始化。

如果切换方法调用,它应该可以工作

 public function __construct(CookieJar $cookieJar)
 {
    $this->cookieJar = $cookieJar;
    $this->id = $this->getID();
 }