簡體   English   中英

如何在Laravel中創建Controller Singleton?

[英]How to make a Controller Singleton in Laravel?

我正在制作航空公司的網絡應用程序。 現在,我的編碼保留飛行的過程中去,為此我有諸如多個視圖reserve.blade.phpchooseFlights.blade.phppassengersInfo.blade.php ,等等。所有這些觀點使用相同的ReserveController類。 路由在web.php文件中指定,如下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使用ReserveController的同一實例,這樣我就可以在屬性中存儲所需的數據,並在所有這些視圖中共享與當前儲備過程相對應的相同數據。

可能嗎?

每當訪問涉及它的請求時,我都想使用ReserveController的同一實例,這樣我就可以在屬性中存儲所需的數據,並在所有這些視圖中共享與當前儲備過程相對應的相同數據。

可能嗎?

是的,您可以在應用程序的服務容器中注冊一個單例實例

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

然后將共享狀態存儲在該類中。 並將其注入您的控制器中。

class ReserveController extends Controller 
{
     private $singleton;

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

     ...
}

警告!! 不建議這樣做。 請記住,如果2個不同的用戶將調用相同的控制器方法,那么他們還將共享單例實例。 共享狀態是邪惡的!

在此處閱讀有關共享狀態的更多信息。 http://henrikeichenhardt.blogspot.com/2013/06/why-shared-mutable-state-is-root-of-all.html

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM