照亮包装中的组件

时间:2013-05-29 21:00:15

标签: php laravel laravel-4

我有一个自制的包裹。通过服务提供者,我将$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将此转换为     $应用[ '信使'] - >方法addMessage( '试验');

所以不应该通过实例调用它吗?

1 个答案:

答案 0 :(得分:0)

您正尝试从班级中的静态方法调用$this。这不行。通过PHP定义(也因为它是愚蠢的),$this仅在以下范围内可用:

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

其他任何原因导致this触发您刚刚收到的致命错误。我不能建议修复,因为你没有把你的代码 - 但是,如果你这样做,我将非常乐意为你找到一个解决方案。