我以前遇到過這個問題...... C5的Request對象沒有被初始化,直到各種包控制器的on_start事件被觸發之後。我相信人們提出的唯一解決方案是在你的package controller的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
文件中自行復制適當的代碼
謝謝! Request類是我需要的。 'Request :: get() - > getRequestPath()'已經返回完整的請求路徑,然後我手動解析。 – johjoh