我觉得我在Laravel(4)控制器中重复自己。例如,我需要为每个视图提供一些$variables
。我从缓存或数据库中获取它们。因为定位和处理它们需要一些代码行(5到100行之间),所以我在每个控制器函数中重复它们。更新功能时尤其如此(它们会增加复杂性)。
如何在没有任何负面影响的情况下避免这种情况?
注意:$variables
主要不是全局变量。
答案 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();
}
}