Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/285.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Yii2-如何在布局内获取id_Php_Yii2 - Fatal编程技术网

Php Yii2-如何在布局内获取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

我需要知道从我的布局中查看的页面的ID。实际上,它是在我的布局中呈现的

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'];