4

CodeIgniterでHMVCパターンを使用しています。modules :: run()関数を介して2つのモジュールをロードするコントローラーがあり、パラメーターが各モジュールに渡されます。

どちらかのモジュールが渡されたパラメーターと一致しない場合は、show_404()を呼び出します。動作しますが、既存のテンプレート内にエラーページの完全なHTMLが読み込まれるため、HTMLが壊れて、ひどく見えます。エラーページにリダイレクトして、2番目のモジュールを実行しないようにしたいと思います。URLを変更せずにそれを行う方法はありますか?

URLを変更せずにモジュールからshow_404()にリダイレクトすることは可能ですか?

これは、何が起こっているのかを単純化した例です。

www.example.com/users/profile/usernamehere

URLは、ユーザーコントローラーで次の関数を呼び出します。

function profile($username)
{
    echo modules::run('user/details', $username);
    echo modules::run('user/friends', $username);
}

これらのモジュールを実行し、ユーザーが存在するかどうかを確認します。

function details($username)
{
    $details = lookup_user($username);
    if($details == 'User Not Found')
        show_404(); // This seems to display within the template when what I want is for it to redirect
    else
        $this->load->view('details', $details);
}

function friends($username)
{
    $details = lookup_user($username);
    if($friends == 'User Not Found')
        show_404(); // Redundant, I know, just added for this example
    else
        $this->load->view('friends', $friends);
}

私はそれを達成するためのより良い方法があると思いますが、私はそれを見ていません。何か案は?

4

3 に答える 3

14

サブモジュールでエラーが発生した場合は例外をスローし、コントローラーでこれをキャッチすることができますshow_404()

コントローラ:

function profile($username)
{
    try{
       $out  = modules::run('user/details', $username);
       $out .= modules::run('user/friends', $username);
       echo $out;
    }
    catch(Exception $e){
       show_404();
    }
}

サブモジュール:

function details($username)
{
    $details = lookup_user($username);
    if($details == 'User Not Found')
        throw new Exception();
    else
        // Added third parameter as true to be able to return the data, instead of outputting it directly.
        return $this->load->view('details', $details,true);
}

function friends($username)
{
    $details = lookup_user($username);
    if($friends == 'User Not Found')
        throw new Exception();
    else
        return $this->load->view('friends', $friends,true);
}
于 2012-07-11T00:28:56.257 に答える
0

この関数を使用して、404notfoundページをリダイレクトできます。

    if ( ! file_exists('application/search/'.$page.'.php')) {
        show_404(); // redirect to 404 page
    }
于 2020-09-04T07:01:06.977 に答える
-4

その非常に単純な、私は問題を解決しました

コントローラー名の最初の文字は大文字でなければなりません。例:

とのコントローラー

ページはページである必要があります

また、モデルクラスでも同じpages.phpではなくPages.phpという同じ名前のコトローラーファイルを保存します

楽しい

于 2015-09-22T19:19:44.313 に答える