0

我有一个自制的包。通过服务提供者,我将$app实例传递给实际的类。然后我使用:

$this->app['session']->get('key', 'value');

使用 Session 组件的功能。但是,当我运行它时,我收到以下错误:

不在对象上下文中时使用 $this

所以我尝试使用

Session::get( ... )

但后来它说它没有找到课程。

我该如何解决这个问题?

这是我的完整课程:

namespace AlexCogn\Messenger;

use Illuminate\Foundation\Application as Application;

    class Messenger
    {
    protected $app;

    public function __construct(Application $app)
    {
        $this->app = $app;
    }

    public static function messages()
    {
         $messages = $this->app['session']->get('messages', array());

         $this->app['session']->forget('messages');

         return $messages;
    }

    public function addMessage($message)
    {
         $messages = $this->app['session']->get('messages', array());
         array_push($messages, $message);

         $this->app['session']->put('messages', $messages);
    }
}

编辑:

显然不是每个人都理解这个问题:我通过 Facade 调用 Messenger:

Messenger::addMessage('test');

我认为 Laravel 将其转换为 $app['messenger']->addMessage('test');

那么这不应该通过实例调用吗?

4

1 回答 1

0

您正在尝试$this从类中的静态方法调用。这行不通。根据 PHP 定义(也因为否则它会很愚蠢),$this仅在以下范围内可用:

  • 在通过实例调用的方法内部(即$this->foo()
  • 在类构造函数内部(内部__construct()
  • Callable使用 Runkit 库重新定义的地方

任何其他原因都会this触发您刚刚收到的致命错误。我无法建议修复,因为您没有提交代码 - 但是,如果您这样做了,我将非常乐意为您找到解决方案。

于 2013-05-29T21:03:46.477 回答