Lithium 锂链路路由

Lithium 锂链路路由,lithium,Lithium,我正在尝试创建我的第一个锂电池应用程序,但我遇到了一个非常奇怪的错误 我的索引视图中有一行 我可以想象它会链接到记录视图,并使用'questions/view.$question->id',但是,使用数组url我会得到一个致命的错误 致命错误:在第306行的/Applications/MAMP/htdocs/learning lithium/libraries/lithium/net/http/Router.php中出现未捕获的异常“limition\net\http\RoutingExcep

我正在尝试创建我的第一个锂电池应用程序,但我遇到了一个非常奇怪的错误

我的索引视图中有一行

我可以想象它会链接到记录视图,并使用
'questions/view.$question->id'
,但是,使用数组url我会得到一个致命的错误

致命错误:在第306行的/Applications/MAMP/htdocs/learning lithium/libraries/lithium/net/http/Router.php中出现未捕获的异常“limition\net\http\RoutingException”,并显示消息“找不到URL的参数匹配”(“controller'=>“questions”,“action'=>“view”,“id'=>“1”)


在我看来,路由器似乎正在尝试匹配帮助程序中的url,但由于某些原因,它无法匹配,因此引发了异常。有人知道这是为什么吗?我从CakePHP的角度攻击锂,所以这对我来说似乎很奇怪。

您没有在路线中使用命名参数,所以只需在视图中输出以下内容:

<?php echo $this->html->link($question->title, array('controller'=>'questions', 'action'=>'view', $question->id));?>

您没有在路由中使用命名参数,因此只需在视图中输出以下内容:

<?php echo $this->html->link($question->title, array('controller'=>'questions', 'action'=>'view', $question->id));?>

'args'
参数由默认路由处理,并作为参数传递给操作方法

试试这个:

<?=$this->html->link($question->title, array('Questions::view', 'args' => array($question->id))); ?>
因此,您需要根据ID采用的格式取消对这两个部分之一的注释。他们使用带有id参数的正则表达式来确保它与非id的url参数不匹配。顺便说一句,第一个路由将id的默认值设置为
null
,这对我来说没有意义,因为我认为路由永远不会与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'
参数

默认路由处理
'args'
参数,并将其作为参数传递给操作方法

试试这个:

<?=$this->html->link($question->title, array('Questions::view', 'args' => array($question->id))); ?>
因此,您需要根据ID采用的格式取消对这两个部分之一的注释。他们使用带有id参数的正则表达式来确保它与非id的url参数不匹配。顺便说一句,第一个路由将id的默认值设置为
null
,这对我来说没有意义,因为我认为路由永远不会与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'
参数

非常感谢,这正是我想要的。这是否意味着如果您在args中传递
id
,您需要一个带有
/{:id}
的路由?@davideyell是的,这些路由位于
app/config/routes
中,供您取消注释(取决于您使用的是关系数据库还是面向文档的数据库)。但是我建议你选择
{:args}
如果它适合你的需要。@davideyell是的,没错。我更新了答案,包括了Oerd提到的信息。@rmarscher感谢更新的答案。我甚至都没看过路由文件!我想我应该读RTFC(翻页代码)!非常感谢,这正是我想要的。这是否意味着如果您在args中传递
id
,您需要一个带有
/{:id}
的路由?@davideyell是的,这些路由位于
app/config/routes
中,供您取消注释(取决于您使用的是关系数据库还是面向文档的数据库)。但是我建议你选择
{:args}
如果它适合你的需要。@davideyell是的,没错。我更新了答案,包括了Oerd提到的信息。@rmarscher感谢更新的答案。我甚至都没看过路由文件!我想我应该读RTFC(翻页代码)!