[英]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.