以正确的方式获取控制器中的ID?

时间:2013-04-26 03:14:56

标签: yii

我有一个叫做的控制器:

CarController

在其中我有一个名为:

的函数
public function actionView

这意味着我可以轻松打电话:

www.mysite.com/Car/View

但我希望能够致电:

www.mysite.com/Car/View/1

其中1是数据库中汽车的ID。如果我这样称它并打印我们的$ _REQUEST对象,我看到:

Array ( 
  [1] => 
)

使用YII的内置功能获得1的正确方法是什么。我可以通过询问数组中的密钥来破解它,但这似乎不是正确的方法吗?

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->idYii::app()->request->myParam来做同样的事情。

<强>注意

如果配置路由以接受诸如id之类的参数,并且不存在id,则会引发错误。这就是为什么使用$_GETYii::app()->request->会更好。

请查看http://www.yiiframework.com/doc/guide/1.1/en/topics.url以获取路由帮助。