0

在我当前的 Contrete5 项目中,我只有一个页面,它带有一个 url 参数。所以网址看起来像这样:

domain.com/[singlepagename]/[id]

并且控制器有相应的视图功能:

function view($id) { ... }

现在我需要访问 on_start() 函数中的 id。但function on_start($id) { ... }抛出错误并$this->get()返回一个空数组。

知道如何获取 url 部分on_start()吗?

4

1 回答 1

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文件中复制相应的代码

于 2012-09-11T20:24:59.827 回答