Php Yii2-如何在布局内获取id
我需要知道从我的布局中查看的页面的ID。实际上,它是在我的布局中呈现的Php Yii2-如何在布局内获取id,php,yii2,Php,Yii2,我需要知道从我的布局中查看的页面的ID。实际上,它是在我的布局中呈现的 site.com/controller/view/id 或 site.com/controller/id context->action->id,但返回的是view。我不明白Yii为什么不可能这么做。如果它不存在,他们应该添加它:) 我真的不想砍掉这个url,这是一个chincy黑客,chincy黑客通常会因为这样或那样的原因在以后崩溃。你只需从$\u get['id']或使用\Yii::$app->request->ge
site.com/controller/view/id
或
site.com/controller/id context->action->id
,但返回的是view
。我不明白Yii为什么不可能这么做。如果它不存在,他们应该添加它:)
我真的不想砍掉这个url,这是一个chincy黑客,chincy黑客通常会因为这样或那样的原因在以后崩溃。你只需从
$\u get['id']
或使用\Yii::$app->request->get('id')代码>
如果你有一些依赖于控制器和项目ID的逻辑,考虑把它放进窗口小部件,这会使你的布局更易读
编辑:
id只是一个参数名,要在布局中获得它,您可以使用上面提到的两种方法,或者如果您想使用context
,您可以像这样获得它$this->context->actionParams['id']
,您可以扩展yii\web\View.php
并将$id
添加为公共属性。[或者只需在yii\web\View.php中添加public$id;
]
然后在视图文件中,添加
$this->id='watever';
并在布局中与
<?php echo $this->id; ?>
内容是在布局之前生成的。在调用$this->render('view',['model'=>$myModelVar,'someotherparam'=>$somevar'])之前,在控制器内部进行任何一种方式;
您可以设置\Yii::$app->params数组。这在布局中是可访问的
e、 g.在控制器中
public function actionView($id) {
\Yii::$app->view->params['layoutvars'] = ['id' => $id];
return $this->render('view', ['model' => $model]);
}
在布局文件中
$id = \Yii::$app->view->params['layoutvars']['id'];
我知道如何从控制器处理它。我需要从我的布局文件访问它。你可以使用$this->context->action->id
从任何地方获取操作,你应该能够对id执行相同的操作。它是路由的一部分,就像控制器和操作一样。实际上id
不是路由的一部分,它是一个参数。参见:Yo你完全正确。我已经使用漂亮的URL有一段时间了,没有注意id参数。我很清楚Yii::$app->request->get('id');
,尽管这似乎是我在这里的最佳选择。我尝试了actionParams,它只有在id存在时才有效,否则它会抛出错误。所以我求助于get()函数,因为它内置了isset检查,可以处理它是否为空。我一直认为id被当作控制器和操作来处理,而实际上它不是。谢谢。
$id = \Yii::$app->view->params['layoutvars']['id'];