在我目前的Contrete5项目中,我有一个页面,它需要一个url参数。所以网址看起来像这样:
domain.com/[singlepagename]/[id]
并且控制器具有相应的视图功能:
function view($id) { ... }
现在我需要访问on_start()函数中的id。但function on_start($id) { ... }
抛出错误,$this->get()
返回一个空数组。
任何想法如何在on_start()
中获取网址部分?
答案 0 :(得分:1)
之前我遇到过这个问题...问题是C5的Request对象在各种包控制器的on_start事件被触发之后才被初始化。我相信人们提出的唯一解决方案是在包控制器的on_start函数中自己手动初始化Request类。如果查看dispatcher.php文件,您将在第129行(在Concrete5.6.0.1中)看到以下代码块:
// figure out where we need to go
$req = Request::get();
if ($req->getRequestCollectionPath() != '') {
if (ENABLE_LEGACY_CONTROLLER_URLS) {
$c = Page::getByPath($req->getRequestCollectionPath(), 'ACTIVE');
} else {
$c = $req->getRequestedPage();
}
} else {
$c = Page::getByID($req->getRequestCollectionID(), 'ACTIVE');
}
$req = Request::get();
$req->setCurrentPage($c);
if ($c->isError()) {
// if we've gotten an error getting information about this particular collection
// than we load up the Content class, and get prepared to fire away
switch($c->getError()) {
case COLLECTION_NOT_FOUND:
$v = View::getInstance();
$v->render('/page_not_found');
break;
}
}
...所以我认为你可以将所有内容复制到你的包控制器的on_start函数中,然后你有$req
对象来获取你的路径信息和变量。
注意:我从Concrete5.6.0.1复制了该代码。如果您使用的是系统的其他版本,则不应仅仅采用我上面粘贴的内容,而应自行从/concrete/dispatcher.php
文件中复制相应的代码