0

私の現在の Contrete5 プロジェクトには、1 つの URL パラメーターを取る単一のページがあります。したがって、URL は次のようになります。

domain.com/[singlepagename]/[id]

コントローラーには対応するビュー関数があります。

function view($id) { ... }

on_start() 関数で id にアクセスする必要があります。エラーをfunction on_start($id) { ... }スローし$this->get()、空の配列を返します。

でURL部分を取得する方法はありon_start()ますか?

4

1 に答える 1

1

私は以前にこれに遭遇しました... 問題は、さまざまなパッケージコントローラーの on_start イベントが発生するまで、C5 の Request オブジェクトが初期化されないことです。人々が思いついた唯一の解決策は、コントローラーの 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 に答える