Как сделать контроллер Singleton в Laravel? - PullRequest
0 голосов
/ 07 января 2019

Я делаю веб-приложение для авиакомпаний. Прямо сейчас я кодирую процесс резервирования рейса, для этого у меня есть несколько представлений, таких как reserve.blade.php, chooseFlights.blade.php, passengersInfo.blade.php и т. Д. Все эти представления используют один и тот же класс ReserveController. Маршруты указаны в файле web.php следующим образом:

Route::get('/reserve', 'ReserveController@searchFlights');
Route::get('/reserve/choose_flights', 'ReserveController@chooseFlights');
Route::post('/reserve/storeFlightsIds', 'ReserveController@storeFlightsIds');
Route::get('/reserve/passengers_info', 'ReserveController@retrievePassengersInfo');

Где эти методы возвращают соответствующие представления с необходимыми данными для отображения.

Рабочий процесс резервирования - /reserve (возвращает представление reserve.blade.php), которое представление отправляет запрос на получение -> /reserve/choose_flights (возвращает представление chooseFlights.blade.php), которое представление отправляет запрос на публикацию -> /reserve/storeFlightsIds (возвращает представление passengersInfo.blade.php).

В reserve.blade.php информация, такая как происхождение и судьба желаемого рейса, даты и количество пассажиров, отправляется диспетчеру. Проблема состоит в том, что количество пассажиров требуется на шаге дальше в passengersInfo.blade.php, чтобы представление узнало, сколько форм должно отображаться для получения информации обо всех пассажирах.

Я хотел бы использовать один и тот же экземпляр ReserveController всякий раз, когда к запросу, к которому он относится, обращаются, чтобы я мог хранить необходимые данные в свойствах и обмениваться теми же данными, соответствующими текущему процессу резервирования, во всех этих представлениях.

Возможно ли это?

1 Ответ

0 голосов
/ 12 апреля 2019

Я хотел бы использовать один и тот же экземпляр ReserveController при каждом обращении к соответствующему запросу, чтобы я мог хранить необходимые свойства в свойствах и обмениваться данными, соответствующими текущему процессу резервирования, во всех этих представлениях.

Возможно ли это?

Да, возможно, вы регистрируете одноэлементный экземпляр в контейнере службы вашего приложения

$this->app->singleton('MySingleton', function ($app) {
     return new SomeSharedClass(...);
});

и затем вы сохраняете общее состояние внутри этого класса. И введите его в свой контроллер.

class ReserveController extends Controller 
{
     private $singleton;

     function __construct(MySingleton $singleton) {
         $this->singleton = $singleton;
     }

     ...
}

Внимание !! Это не рекомендуется. Помните, что если два разных пользователя будут вызывать один и тот же метод контроллера, они также будут использовать экземпляры singleton. общее состояние - зло!

Подробнее об общих состояниях читайте здесь. http://henrikeichenhardt.blogspot.com/2013/06/why-shared-mutable-state-is-root-of-all.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...