0

http://www.example.com/aboutのような URL を持つサイトのデフォルトのページ コントローラーを作成しようとしています。したがって、「about」コントローラがない場合は、データベースでその URL 文字列を含むページを探します。

「ページ」コントローラに 404_override を設定し、_remap() 関数を使用して、ホームページ (ページ コントローラの index() メソッド) をロードするか、ページをロードするかを決定しています。

ただし、現時点では、パス (存在しない http://www.example.com/product/widget) 内のメソッドで別のコントローラー (この場合は製品) を使用すると、ページコントローラーの index() メソッドを提供しました。

問題は、要求されたページが _remap() のホームページであるかどうかを確認する方法にあると考えたため、リマップの先頭にエコーを追加して、問題があるかどうかを確認しました。_remap() が呼び出されていないようです。代わりに、404_override を処理しようとすると、CI は index メソッドを表示するだけです。

これをより効果的に達成する方法はありますか?

    public function _remap($method)
{
    echo 'Method '.$method;
    if($this->uri->segment(1) == null)
    {
        // $this->index();
    } else {
        $this->view();
    };
}
4

1 に答える 1

0

このブログ投稿で実行可能な解決策を見つけたようです: http://pinoytech.org/blog/post/codeigniter-route-everything-except-these-controllers

ルート定義で正規表現を使用すると、他のすべてのコントローラー (製品、注文など) を無視しながら、他のすべてをページ コントローラーに送信できます。

$route['^(?!product|order|misc_controller)\S*'] = "page/$1";

まだテストしていませんが、私が知る限り、問題なく動作するはずです。

于 2012-05-27T00:53:58.783 に答える