2013-05-29 13 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

我刪除了靜態關鍵字,仍然不起作用 –