我有一个叫做的控制器:
CarController
在其中我有一个名为:
的函数public function actionView
这意味着我可以轻松打电话:
www.mysite.com/Car/View
但我希望能够致电:
www.mysite.com/Car/View/1
其中1是数据库中汽车的ID。如果我这样称它并打印我们的$ _REQUEST对象,我看到:
Array (
[1] =>
)
使用YII的内置功能获得1的正确方法是什么。我可以通过询问数组中的密钥来破解它,但这似乎不是正确的方法吗?
答案 0 :(得分:4)
您可以采用多种方式之一,但都要求您正确设置路由。
首先,如果您正确配置路由,它们将被参数化,如果在URL中传递了id
,您可以执行很酷的操作,例如路由到特定操作:
来自config / main.php:
'<controller:\w+>/<id:\d+>'=>'<controller>/view',
这会查找仅包含ID的网址,并将其直接传递给控制器中的视图操作,因此无需键入mysite.com/car/view/1
,您只需执行mysite.com/car/1
您也可以这样设置:
'<controller:\w+>/coolAction/<myParam:\w+>'=>'<controller>/coolAction',
在你的动作功能中你可以这样做:
public function actionCoolAction($myParam){
echo $myParam;
}
您可以将$ myParam重命名为您喜欢的任何内容,但参数按顺序传递,因此如果您有多个参数:
'<controller:\w+>/coolAction/<myParam:\w+>/<secondParam:\w+>'=>'<controller>/coolAction',
传递给您的操作的第一个参数是myParam
,第二个参数是secondParam
。
如果查看Gii生成的操作,您会看到视图,更新和删除操作都使用了$id
参数,并且在路由中以这种方式配置。
因为它在网址中,所以参数也是$_GET
个变量,也可以通过这种方式检索($_GET['id']
或$_GET['myParam']
)
如果你想成为技术人员,你可以使用Yii的Yii::app()->request->id
或Yii::app()->request->myParam
来做同样的事情。
<强>注意强>
如果配置路由以接受诸如id之类的参数,并且不存在id,则会引发错误。这就是为什么使用$_GET
或Yii::app()->request->
会更好。
请查看http://www.yiiframework.com/doc/guide/1.1/en/topics.url以获取路由帮助。