簡體   English   中英

Laravel:如何將變量從控制器傳遞給另一個?

[英]Laravel:how can I pass a variable from a controller to another?

我是編程方面的新手(還是一名學生),而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。

我真的不知道該怎么做! 有人可以解釋一下嗎? 我希望您能理解我的問題,因為英語不是我的母語。 非常感謝!

薩拉

跨控制器共享變量的方法有很多:

  1. 如果像您一樣在視圖之間共享變量,只需在其他控制器中使用變量$ milite即可。 應該沒問題。
  2. 您可以在基類中定義一個靜態變量,以便可以在擴展基類的所有類中使用該變量。
  3. 在AgendaController的構造函數中,只需將消防員的議程作為參數來構造控制器。
  4. 只需通過App :: make('firefighters'agenda')-> with(您的參數)在AgendaController中調用firefighters'genda的方法。 這樣,您可以傳遞其他控制器的value和call方法。

這不是執行此操作的正確方法。 首先,在BaseController的構造函數中使用各種邏輯將最終使您的應用程序變慢,因為無論它們是否需要,所有請求都必須通過這些邏輯語句。 實際上,控制器應該根本不進行交互,因為它們應該做的是處理傳入的HTTP請求並提供響應。

不過,為了給您一個答案,因為無論如何您都在擴展BaseController,所以至少要將邏輯移出BaseController構造函數並將其移至BaseController中的公共方法

class BaseController extends Controller 
{


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

然后在您的AgendaController中,您可以通過繼承來訪問public方法:

   <?php


   class AgendaController extends BaseController
   {

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

   }

再次,這不是您應該怎么做。 通常要做的是將與邏輯相關的東西移動到另一個類中的方法(例如,如果要訪問數據庫,則可以是服務,或者可以是存儲庫),然后使用laravel的依賴項注入容器來訪問控制器中的這些方法。 。

暫無
暫無

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

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