我有一个 Slim 应用程序,在主中间件中,我向模型添加了一些通用数据
中间件"调用"方法代码
$app->view->set("auths",["user","poweruser"]);
在控制器方法中,我想将一个值推送到视图模型的"auths"数组,有没有比这更快的方法访问它?
控制器方法代码
$data=$app->view->get("auths");
$data[]="newauth";
$app->view->set("auths",$data);
简而言之
不,你不能,但如果你想很好地包装这个功能,你可以定义你自己的视图子类。
原生苗条
我刚刚查看了Slim的源代码(真的,真的,..Slim),并且您正在使用其 View 对象来包装 Set 对象。两者都不提供此功能,因为内部数组没有公开,并且 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 :)