用于查看数据的超薄框架合并数组


Slim framework merge array to view data

我有一个 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']));

滚动自己的视图子类

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

  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 :)