Slim框架合并数组以查看数据

时间:2015-01-15 09:10:40

标签: php slim

我有一个Slim应用程序,在主要的中间件中我向模型中添加了一些通用数据

中间件“调用”方法代码

$app->view->set("auths",["user","poweruser"]);

在控制器方法中,我想将值推送到视图模型的“auths”数组,有没有办法以比这更快的方式访问它?:

控制器方法代码

$data=$app->view->get("auths");
$data[]="newauth";
$app->view->set("auths",$data);

1 个答案:

答案 0 :(得分:2)

简而言之

不,你不能,但如果你想很好地包装这个功能,你可以定义自己的视图子类。

Native Slim

我刚刚查看了Slim的源代码(实际上,真的是...... Slim),并且您正在使用其包装Set对象的View对象。两者都没有提供此功能,因为内部数组没有暴露,而all()和getData()方法不会通过引用返回内部数组,因此赢了工作:

$view->all()['auths'][] = 'newauth';

您可以通过以下令人讨厌的单行直接达到您想要的效果:

$view->set('auths', array_merge($view->get('auths'), ['newauth']));

滚动您自己的View子类

更好的方法是定义自己的自定义视图,使其成为可能!

  1. 定义自定义视图类

    class CustomView extends \Slim\View
    {
        public function pushProperty($key, $value)
        {
            $array = $this->get($key);
            $array[] = $value;
            $this->set($key, $array);
        }
    }
    

    注意:这种方法盲目地假设当前值是一个数组。您需要添加一些支票!

  2. 创建时,将其指定为Slim应用程序中的默认视图对象。

    $app = new Slim\Slim(array('view' => new CustomView()));
    
  3. 并开始使用它:)

    $app->view->set("auths",["user","poweruser"]);
    $app->view->pushProperty('auths','newauth'); // this will now work. Yay :)