我有一个Slim应用程序,在主要的中间件中我向模型中添加了一些通用数据
中间件“调用”方法代码
$app->view->set("auths",["user","poweruser"]);
在控制器方法中,我想将值推送到视图模型的“auths”数组,有没有办法以比这更快的方式访问它?:
控制器方法代码
$data=$app->view->get("auths");
$data[]="newauth";
$app->view->set("auths",$data);
答案 0 :(得分:2)
不,你不能,但如果你想很好地包装这个功能,你可以定义自己的视图子类。
我刚刚查看了Slim的源代码(实际上,真的是...... Slim),并且您正在使用其包装Set对象的View对象。两者都没有提供此功能,因为内部数组没有暴露,而all()和getData()方法不会通过引用返回内部数组,因此赢了工作:
$view->all()['auths'][] = 'newauth';
您可以通过以下令人讨厌的单行直接达到您想要的效果:
$view->set('auths', array_merge($view->get('auths'), ['newauth']));
更好的方法是定义自己的自定义视图,使其成为可能!
定义自定义视图类
class CustomView extends \Slim\View
{
public function pushProperty($key, $value)
{
$array = $this->get($key);
$array[] = $value;
$this->set($key, $array);
}
}
注意:这种方法盲目地假设当前值是一个数组。您需要添加一些支票!
创建时,将其指定为Slim应用程序中的默认视图对象。
$app = new Slim\Slim(array('view' => new CustomView()));
并开始使用它:)
$app->view->set("auths",["user","poweruser"]);
$app->view->pushProperty('auths','newauth'); // this will now work. Yay :)