[英]How to make a Controller Singleton in Laravel?
我正在制作航空公司的網絡應用程序。 現在,我的編碼保留飛行的過程中去,為此我有諸如多個視圖reserve.blade.php
, chooseFlights.blade.php
, passengersInfo.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.