如何避免在Laravel(4)控制器中重复自己?

时间:2017-01-12 19:46:54

标签: laravel laravel-4

我觉得我在Laravel(4)控制器中重复自己。例如,我需要为每个视图提供一些$variables。我从缓存或数据库中获取它们。因为定位和处理它们需要一些代码行(5到100行之间),所以我在每个控制器函数中重复它们。更新功能时尤其如此(它们会增加复杂性)。

如何在没有任何负面影响的情况下避免这种情况?

注意:$variables主要不是全局变量。

3 个答案:

答案 0 :(得分:1)

有很多方法可以解决这个问题,但听起来这些变量比您的控制器更具针对您的View。

您可以使用boot的{​​{1}}方法在视图中轻松分享变量。

AppServiceProvider

答案 1 :(得分:1)

  • 您可以创建一个静态助手类(所有静态函数) 例如

    #!/bin/bash
    DIR="thumbs"
    if [ "$(ls -A $DIR)" ]; then
        p=$(find pictures/|grep "jpg"|cut -d"/" -f2)
        for i in $p
        do
            m=$(ls -l pictures/$i | cut -d" " -f7)
            n=$(ls -l thumbs/$i | cut -d" " -f7)
            if [ "${m//':'}" -gt "${n//':'}" ] ;then
                rm thumbs/$i
                convert -thumbnail 100 pictures/$i thumbs/$i
            fi
        done
    else
        find pictures/ |cut -d"/" -f2 | grep "jpg"| \
             awk '{system("convert-thumbnail 100 pictures/" $0 " thumbs/" $0)}'
    fi
    
  • 您可以在每个其他控制器中创建自己的基本控制器 例如

    class VarHelper {
        public static function getVars() {
            return [];
        }
    }
    
  • 在控制器内创建函数并在其他函数中调用它

  • 使用Trait

  • 可能还有更多解决方案

答案 2 :(得分:0)

使用方法创建trait以设置所有必要的变量。

use View;

trait SharedControllerVariables {

    public function loadUsersSubscription() {
        View::make('user_subscription_variable_1', [...data...]);
        View::make('user_subscription_variable_2', [...data...]);
    }
}

然后在你的控制器构造函数中调用它:

class MyController extends Controller {

    use SharedControllerVariables;

    public function __construct() {
        $this->loadUsersSubscription();
    }
}