2014-09-27 39 views
1

這裏是我的示例代碼。Laravel頁面之間的對象持久性

class A { 
    public function foo(){ 

} 

public function bar(){ 
} 
} 



class B { 

    $one; 
    function here(){ 
    $this->one = new A(); 
    $this->one->foo(); 
    return View::make("route1"); //This is ok, no problems 
    } 

    function there(){ 
    $this->one->bar(); //ERROR: Call to a member function bar() on a non-object 
    } 
} 

我的路線

Route::get("/one", [email protected]); 
Route::get("/two", [email protected]); 

請這些只是顯示一個樣本。它不是適當的代碼。

當第一個路由被調用一切正常,並且相應的頁面被加載。現在,點擊一個按鈕現在請求第二頁即引發錯誤...

//調用一個成員函數bar()一個非對象

其最明顯的原因,這和我一直在試圖看看Laravel是否提供了一種在頁面調用之間保持對象的方式,以及是否有人可以請求幫助。

感謝

回答

4

有存儲頁面加載對象之間沒有很好的辦法,真的,你絕不會想這樣做呢。一種可能的解決辦法是添加在類的構造函數的依賴關係,因此它可以在你的類是這樣的:

class A { 
    public function foo(){} 
    public function bar(){} 
} 

class B { 
    protected $one; 

    public function __construct(A $one) 
    { 
     $this->one = $one; 
    } 

    public function here() 
    { 
     $this->one->foo(); // Available 
    } 

    public function there() 
    { 
     $this->one->bar(); // Available 
    } 
} 
+0

是啊,這發生在我身上,但遺憾的是即時通訊不太肯定還是因爲所有的調用都是通過路由 – Cozzbie 2014-09-27 15:42:09

+1

@Cozzbie [Laravel IoC的Laravel將如何做一個對象instanciation容器](http://laravel.com/docs/4.2/ioc)將處理​​注入依賴項,而無需執行任何操作。 – 2014-09-27 15:50:07

+0

謝謝。有用。 – Cozzbie 2014-09-27 16:11:31

4

每個請求是在內存中的新變量運行新的應用程序,所以沒有堅持,你有創建你的持久代碼,如果你需要他們

class B { 

    $one; 

    function here() 
    { 
    $this->one = new A(); 

    $this->one->foo(); 

    Session::put('one', $this->one); // persist it using Session 

    return View::make("route1"); //This is ok, no problems 
    } 

    function there() 
    { 
    if (Session::has('one')) 
    { 
     $one = Session::get('one'); /// get your data back from session 

     $one->bar(); 
    } 
    } 
} 
+0

已經通過會話嘗試過持久性,但那也沒用。它一直拋出我展示的類實例錯誤消息。謝謝 – Cozzbie 2014-09-27 15:43:21