'args'
参数由默认路由处理,并作为参数传递给您的操作方法。
试试这个:
<?=$this->html->link($question->title, array('Questions::view', 'args' => array($question->id))); ?>
要使用id
参数对其进行路由,您需要指定一个通过 查找 id 参数的路由{:id}
。查看“数据库对象路由”部分的默认 routes.php 文件。为了完整起见,我将在下面复制一些示例:
/**
* ### Database object routes
*
* The routes below are used primarily for accessing database objects, where `{:id}` corresponds to
* the primary key of the database object, and can be accessed in the controller as
* `$this->request->id`.
*
* If you're using a relational database, such as MySQL, SQLite or Postgres, where the primary key
* is an integer, uncomment the routes below to enable URLs like `/posts/edit/1138`,
* `/posts/view/1138.json`, etc.
*/
// Router::connect('/{:controller}/{:action}/{:id:\d+}.{:type}', array('id' => null));
// Router::connect('/{:controller}/{:action}/{:id:\d+}');
/**
* If you're using a document-oriented database, such as CouchDB or MongoDB, or another type of
* database which uses 24-character hexidecimal values as primary keys, uncomment the routes below.
*/
// Router::connect('/{:controller}/{:action}/{:id:[0-9a-f]{24}}.{:type}', array('id' => null));
// Router::connect('/{:controller}/{:action}/{:id:[0-9a-f]{24}}');
因此,您需要根据您的 id 采用的格式取消注释这两个部分之一。他们使用带有 id 参数的正则表达式来确保它不匹配不是 id 的 url 参数。顺便说一句,第一条路线是设置 id 的默认值,null
这对我来说并不完全有意义,因为我认为该路线永远不会与空值匹配,但无论如何,这就是你为你的设置默认值的方式参数。
请注意,如果您这样做,您的控制器操作方法需要如下所示:
public function view() {
$id = $this->request->id;
// or an alternative that does the same thing
// $id = $this->request->get("params::id");
// ... etc ...
}
获取作为参数传递给控制器操作方法的 url 片段的唯一方法是使用'args'
参数。