2017-08-08 16 views
0

私はCodeigniter 2から3に移行しました。コントローラのファイルはデフォルトのコントローラディレクトリと、コンテンツとインデックスと呼ばれるサブディレクトリの中にあります。Codeigniter routing with:

$controller_dir = opendir(APPPATH."controllers"); 
while (($file = readdir($controller_dir)) !== false) { 
    if (substr($file, -4) == ".php") { 
     $route[substr($file, 0, -4)."(.*)"] = substr($file, 0, -4)."$1"; 
    } else if (substr($file, -5) == ".php/") { 
     $route[substr($file, 0, -5)."(.*)"] = substr($file, 0, -5)."$1"; 
    } 
} 

$route['reviews'] = 'content/reviews/index/profile/$1'; 
$route['money/(:any)'] = 'indexes/money/index/$1'; 
$route['faq/do-i-need-to-signup'] = 'faq/question_answer'; 
$route['(:any)'] = 'index/profile/$1'; 

index/profile/$1は、データベース内のユーザー名をチェックするためのロジックを持っています。現在routes.phpファイルには、次のようになります。私はそれをwww.example.com/robertとして使用しています。ここで、robertは動的名です(照会名とみなしてください)。それはCI 2で働いていましたが、CI 3では同じコードで404エラーが発生しました。

私はここで何が欠けていますか?質問が明確でない場合は、私に尋ねてください。

+3

あなたは、「インデックス」という名前のコントローラを持っていることになっていません。 https://codeigniter.com/userguide3/general/reserved_names.html#controller-names – Narf

+0

'.php /'で終わるファイルは何ですか? – Tpojka

答えて

1

今、あなたはそれがクエリの部分でより多くのパラメータを服用されることをルートに指定する必要があります。これを試してみてください:

$route['reviews/(:any)'] = 'content/reviews/index/profile/$1'; 

これは404エラーを解決する必要があります。 http://localhost/reviews/robert

さらに多くのパラメータを渡したい場合は、経路に指定し、それに$numberを指定します。

例えば:

$route['reviews/(:any)/(:any)'] = 'content/reviews/index/profile/$1/$2'; 
+0

答えをありがとう。私はすでに今のところこのように解決しています。しかし、URLに 'reviews'という単語がない場合、その可能性があるかどうかを知りたいです。 –

+0

あなたは '$ルートなどの任意のキーの単語を書くことができます[ 'anyword /:/(任意の)(:任意の)'] =「コンテンツ/レビュー/インデックス/プロフィール/ $ 1/$ 2'' が、その本当に' anywordを使用することをお勧めします'そうでなければ、他のコントローラを探してこの関数をマップしようとしません。 –