簡體   English   中英

在Laravel控制器中使用函數

[英]Using functions within a Laravel controller

我有一個標准的laravel控制器功能,具有350多個邏輯行,可用於許多不同的頁面上元素。 某些邏輯可以放在其自身的函數中,但我需要將變量傳遞回laravel控制器以在視圖中使用。

laravel是否為此建議任何標准? 或者我可以在控制器內創建一個函數,然后像在php中那樣將最終變量傳遞回來?

以當前控制器為例,我想將邏輯從這里拆分成自己的函數,並將新函數中的值返回給此getIndex()函數。

class PubsController extends Controller
{
    public function getIndex()
    {
        //Date Helpers
        $dateThisMonth = Carbon::now()->startOfMonth()->toDateString();
        $dateLastMonth = Carbon::now()->subMonth()->startOfMonth()->toDateString();
        $dateNextMonth = Carbon::now()->addMonth()->startOfMonth()->toDateString();
    }
}

即使沒有關於控制器有多大的標准,也請記住,php類的大小建議不要超過200行。

我幾乎不建議在\\ App \\ Helpers下創建幫助器類。

回到您的示例,我將在\\ App \\ Helpers \\ DateHelper.php中創建一個類

<?php

namespace App\Helpers;

use Carbon\Carbon;

class DateHelper {
   public static getDateThisMonth(){
       return Carbon::now()->startOfMonth()->toDateString();
   }
   public static getDateLastMonth(){
       return Carbon::now()->subMonth()->startOfMonth()->toDateString();
   }
   public static getDateNextMonth(){
       return = Carbon::now()->addMonth()->startOfMonth()->toDateString();
   }
}

然后,您可以在控制器中調用類似以下內容的代碼:

use App\Helpers\DateHelper;
class PubsController extends Controller{

 public function getIndex()
    {
        $dateThisMonth = DateHelper::getDateThisMonth();
        $dateLastMonth = DateHelper::getDateLastMonth();
        $dateNextMonth = DateHelper::getDateNextMonth();
    }
}

在某些情況下,還建議將某些邏輯移至模型而不是控制器。

控制器是一個PHP類,因此您可以像使用其他任何類一樣在其中使用函數。 例如,如果您有一行邏輯在將總計傳遞到索引視圖之前先計算總計,則可以執行以下操作:

public function index(){ 
    $total = $this->calculateTotal($a, $b);
    return view("index")->with(["total" => $total]);
}

public function calculateTotal($a, $b){
    return $a + $b;
}

控制器內的$this可以訪問該控制器內的屬性或函數,因此您可以自由定義任何輔助函數並進行相應的訪問。

希望有幫助!

有幾種方法可以重新組織代碼。 您可以讓方法返回某些內容,然后分配所有結果,例如顯示的@ tim-lewis,但也可以使用

View::share('someName', $someValue); 

在部分方法中計算數據。

暫無
暫無

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

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