Laravel: как я могу передать переменную из контроллера в другую?

Я довольно новичок в программировании (еще студент) и действительно новый в Laravel. Я должен создать экстрасеть для пожарных, так что, в основном, записи, которые мне нужны из моей БД, это их личные данные, их повестка дня и тому подобное. Возможно, я смотрю на это неправильно, но я бы хотел построить свой проект следующим образом:

BaseController
__Constructor содержит логику для получения данных, которые мне понадобятся при каждом просмотре. Фактически я возвращаю все свои переменные с помощью кода ‘View :: share’

View::share('milite', $milite);
View::share('agenda', $agenda);
View::share('log_accessi', $log_accessi);
View::share('data_import', $data_import);

Хотя я хотел бы использовать другой класс, AgendaController (который расширил бы BaseController), чтобы получить данные из программы пожарных. Для этого мне нужно передать переменную $ milite из BaseController в AgendaController.

Я действительно не знаю, как это сделать! Может кто-нибудь, пожалуйста, объясните мне?
Я надеюсь, вы понимаете мою проблему, так как английский не мой родной язык. Спасибо вам большое!

Сара

0

Решение

Существует много способов обмена переменными между контроллерами:

  1. Если вы делите переменные между представлениями так же, как делали это, просто используйте переменную $ milite в других контроллерах. Это должно быть просто отлично.
  2. Вы можете определить статическую переменную в вашем базовом классе, чтобы она могла использоваться среди всех классов, которые расширяют базовый класс.
  3. В конструкторе AgendaController просто передайте firefighters’agenda в качестве параметра для создания контроллера.
  4. Просто вызовите метод firefighters’agenda в AgendaController с помощью App :: make (‘firefighters’agenda’) -> with (ваш параметр). Таким образом, вы можете передавать значения и вызывать методы других контроллеров.
0

Другие решения

Это не правильный способ сделать это. Во-первых, наличие всех видов логики в конструкторе BaseController замедлит работу вашего приложения, так как все запросы должны будут проходить через эти логические операторы независимо от того, нужны они им или нет. На самом деле контроллеры вообще не должны взаимодействовать друг с другом, поскольку они должны обрабатывать входящие HTTP-запросы и предоставлять ответы.

Чтобы дать вам ответ, поскольку, так или иначе, вы расширяете BaseController, по крайней мере, переместите свою логику из конструктора BaseController и переместите ее в открытый метод в BaseController.

class BaseController extends Controller
{public function fillView()
{
$data = array('someData' =>  'data');
return $data;
}

И тогда в вашем AgendaController вы можете получить доступ к общедоступному методу с помощью наследования:

   <?phpclass AgendaController extends BaseController
{

public function showAgenda(){
$dataFromBaseController = $this->fillView();
...
}

}

Опять же, это не то, как вы должны это делать. Что вы обычно делаете, это перемещаете вещи, связанные с логикой, в методы другого класса (скажем, в службу или, может быть, в хранилище, если вы обращаетесь к БД), а затем с помощью контейнера внедрения зависимостей laravel получаете доступ к этим методам в вашем контроллере. ,

0

По вопросам рекламы [email protected]