我正在设置路由到控制器,我不断获得404,或者“开始使用silverstripe框架”页面。
在routes.yaml中,我有:
---
Name: nzoaroutes
After: framework/routes#coreroutes
---
Director:
rules:
'view-meetings/$Action/$type': 'ViewMeeting_Controller'
我的控制器看起来像这样:
class ViewMeeting_Controller extends Controller {
public static $allowed_actions = array('HospitalMeetings');
public static $url_handlers = array(
'view-meetings/$Action/$ID' => 'HospitalMeetings'
);
public function init() {
parent::init();
if(!Member::currentUser()) {
return $this->httpError(403);
}
}
/* View a list of Hospital meetings of a specified type for this user */
public function HospitalMeetings(SS_HTTPRequest $request) {
print_r($arguments, 1);
}
}
我创建了一个简单输出$ Content的模板(ViewMeeting.ss),但是当我刷新网站缓存并访问/ view-meetings / HospitalMeetings / 6?flush = 1
我得到了默认的“Silverstripe框架开始”页面
我知道routes.yaml中的路由工作正常,因为如果我在那里更改路由并访问旧URL我得到404,但请求似乎没有触发我的$ Action ...
答案 0 :(得分:2)
您的YAML和控制器中有2个不同的规则($ type vs $ ID)。另外,我认为你不需要在YAML和Controller中定义路由。
试试这个,YAML告诉SS将以“view-meetings”开头的所有内容发送到您的Controller,然后$url_handlers
告诉Controller如何处理请求,具体取决于“view-meetings”之后的所有内容网址。
routes.yaml
---
Name: nzoaroutes
After: framework/routes#coreroutes
---
Director:
rules:
'view-meetings': 'ViewMeeting_Controller'
ViewMeeting_Controller.php
class ViewMeeting_Controller extends Controller {
private static $allowed_actions = array('HospitalMeetings');
public static $url_handlers = array(
'$Action/$type' => 'HospitalMeetings'
);
public function init() {
parent::init();
if(!Member::currentUser()) {
return $this->httpError(403);
}
}
public function HospitalMeetings(SS_HTTPRequest $request) {
}
}
答案 1 :(得分:2)
关于路由的Silverstripe文档在这一点上一点也不清楚,但要正确解释$Action
,你应该在routes.yml
文件中使用双斜杠:
view-meetings//$Action/$type
根据the documentation,这设定了一个叫做“换档点”的东西。究竟是什么意思没有在文档中或在与规则匹配的URL source code中得到很好的描述。
答案 2 :(得分:0)
我在这里做一些猜测,但是如果放弃
会怎么样public static $url_handlers = array(
'view-meetings/$Action/$ID' => 'HospitalMeetings'
);
部分并将Action方法更改为:
// View a list of Hospital meetings of a specified type for this
public function HospitalMeetings(SS_HTTPRequest $request) {
// Should print 8 if url is /view-meetings/HospitalMeetings/6
print_r($request->param('type');
}