1

我有一个控制器叫做:

CarController

在其中我有一个名为:

public function actionView

这意味着我可以轻松调用:

www.mysite.com/Car/View

但我希望 eb 能够调用:

www.mysite.com/Car/View/1

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

Array ( 
  [1] => 
)

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

4

1 回答 1

4

您可以通过多种方式之一进行操作,但都需要您正确设置路由。

首先,如果你正确配置你的路由,它们就会被参数化,你可以做一些很酷的事情,比如如果id在 URL 中传递了一个特定的动作,则路由到一个特定的操作:

从 config/main.php:

'<controller:\w+>/<id:\d+>'=>'<controller>/view',

这会查找仅带有 id 的 URL 并将其直接传递给控制器​​中的视图操作,因此无需键入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正在使用的参数,并且在路由中是这样配置的。

因为它在 URL 中,所以参数也是$_GET变量,也可以通过这种方式检索($_GET['id']$_GET['myParam']

如果你想要技术,你可以使用 Yii 的Yii::app()->request->idYii::app()->request->myParamwhich 会做同样的事情。

警告

如果配置路由接受 id 等参数,而 id 不存在,则会抛出错误。这就是为什么使用$_GETYii::app()->request->可以更好。

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

于 2013-04-26T03:43:54.950 回答