1

CodeIgniterフレームワークを使用しています。コントローラフォルダに次のようなファイルがあります。

 - Controllers
 --- admin.php - Admin Controller
 --- /Admin - Admin Folder
 ----- category.php - Category Controller in Admin folder.

URL:コントローラーの関数mysite.com/index.php/admin/categoryを呼び出そうとしているため、ページが見つからないと言っていますが、フォルダー内のコントローラーの関数を呼び出したいと思います。categoryadminindexcategoryAdmin

また、コントローラーのようなadminコントローラーの作成、編集などの機能にもコントローラーを使用しています。adminmysite.com/index.php/admin/create

$route設定ファイルの配列を使うべきだと思います。どのルーティングを使用する必要がありますか?

4

2 に答える 2

1

これは、CI コアのデフォルトの動作です。を参照function _validate_request($segments)してくださいsystem/core/Router.php。この関数は、コントローラへのパスを決定しようとします。さまざまな条件を 1 つずつ通過し、特定の条件が満たされると結果を返します。他の条件に加えて、次の 2 つの条件が関係しています。

  1. ファイルですか?( system/core/Router.php271行目、CI 2.1.2)

    // Does the requested controller exist in the root folder?
    if (file_exists(APPPATH.'controllers/'.$segments[0].'.php'))
    {
        return $segments;
    }
    
  2. フォルダですか?( system/core/Router.php277行目、CI 2.1.2)

    // Is the controller in a sub-folder?
    if (is_dir(APPPATH.'controllers/'.$segments[0]))
    {
        // ...
    

あなたの場合、2つの条件のうち最初の条件が満たされると、つまりadmin.phpファイルが見つかったときに関数が返されます。

次の 2 つの解決策があります。

  1. ファイルまたはフォルダーの名前を変更し、アプリケーションをそれぞれリファクタリングします。
  2. core を拡張してデフォルトの動作を変更します。基本的には、条件チェックの順序を変更することで結論付けられます。これは、MY_Routerクラスを作成することで実現できます。

    class MY_Router extends CI_Router
    {
        // ...
    }
    

    _validate_request()変更された一連の条件で元の関数を書き換えます。したがって、最初にディレクトリをチェックしてから機能をチェックします。

あまりリファクタリングを必要としない場合は、最初の解決策をお勧めします。

于 2012-09-17T19:12:39.403 に答える
0

application/config/routes.php ファイルの最後に、次のようなものを追加します。

$route['admin/create'] = 'admin/category';
于 2012-09-16T00:05:01.677 に答える