Вот мой пример кода.
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", B@here);
Route::get("/two", B@there);
Пожалуйста, это просто показать образец. Это не правильный код.
Когда вызывается первый маршрут, все в порядке, и соответствующая страница загружается. Теперь при нажатии кнопки, которая теперь запрашивает вторую страницу, выдается ошибка …
// Вызов функции-члена bar () для необъекта
Это очевидная причина этого, и я пытался выяснить, предлагает ли Laravel способ сохранения объектов между вызовами страниц и может ли кто-нибудь помочь.
Спасибо
Нет хорошего способа хранить объекты между загрузками страниц, и на самом деле вы никогда бы этого не захотели. Возможным решением было бы добавить вашу зависимость в конструктор класса, чтобы он был доступен в вашем классе следующим образом:
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
}
}
Каждый запрос — это новое приложение, работающее с новыми переменными в памяти, поэтому нет постоянства, вы должны создать свой постоянный код, если он вам нужен
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();
}
}
}