2013-05-29 12 views
0

我有自制包装。通过服务提供商,我将$app实例传递给实际的类。然后我使用:照亮包装中的组件

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

使用会话组件的功能。

Using $this when not in object context

所以我尝试只用

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

编辑:

显然不是每个人都明白的问题:我通过门面调用使者:

Messenger::addMessage('test'); 

,我想Laravel转换这到 $ app ['messenger'] - > addMessage('test');

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

+1

它应该,但你的问题是,你正在将你的方法定义为静态。现在,当'''$ app ['messenger'] - > addMessage('test');'''被称为来自实例的调用时,不再是静态调用。 – crynobone

+0

@crynobone谢谢,从方法声明中删除静态解决它! –

回答

0

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

  • 里面的方法已通过实例(即$this->foo()
  • 称为内部类构造函数(内__construct()
  • 里面一个Callable这个地方已经使用Runkit库

别的原因this重新定义触发致命Ë你刚刚收到的恐怖。我无法提出修正方案,因为您没有将代码放在一起 - 但是,如果您这样做,我将非常乐意为您找到解决方案。

+0

我知道,但这不是Laravel特有的东西吗?其余的代码不应该那么重要?我将编辑问题 –

+0

@AlexanderCogneau:提示:您粘贴的代码行的前五个字符是'$ this'。发布整个方法 - 我敢打赌你会遇到'static'关键字。 –

+0

我删除了静态关键字,仍然不起作用 –