使用Laravel控制器中的功能

时间:2016-09-22 13:26:24

标签: php laravel laravel-5

我有一个标准的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();
    }
}

3 个答案:

答案 0 :(得分:1)

控制器是一个PHP类,因此您可以像使用其他类一样使用其中的函数。例如,如果您有一行逻辑在将其传递到索引视图之前计算总计,则可以执行以下操作:

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

public function calculateTotal($a, $b){
    return $a + $b;
}
控制器中的

$this可以访问该控制器中的属性或函数,因此您可以自由定义任何帮助函数并相应地访问它们。

希望有所帮助!

答案 1 :(得分:1)

即使没有关于控制器有多大的标准,请记住,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();
    }
}

在某些情况下,还建议将某些逻辑移动到您的模型而不是控制器。

答案 2 :(得分:0)

有几种方法可以重新组织代码。您可以让方法返回一些内容然后分配所有结果,如@ tim-lewis所示,但您也可以使用

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

在计算数据的部分方法中。