10

codeigniterで宣言されたすべてのルートを取得するにはどうすればよいですか?例のように。print_r($ route)

これが問題であるため、顧客が自分のユーザー名を「facebook」として登録した場合、プロファイルではなくaccount / facebook_loginにルーティングされます。ルートの順序を変更すると、すべてのリンクが顧客/プロファイルにルーティングされます。いやいや!

したがって、基本的に、宣言して別の配列またはdbテーブルに配置するすべてのルートを一覧表示する代わりに、ルート配列にループして、すでに宣言されている単語があるかどうかを確認して、登録を停止できるようにします。その単語をユーザー名として。

これは私のサンプルルートです:

// Account routes
$route['login'] = 'account/login';
$route['logout'] = 'account/logout';
$route['register'] = 'account/register';
$route['facebook'] = 'account/facebook_login';
$route['twitter'] = 'account/twitter_login';
$route['settings'] = 'account/settings';

$route['validate/(:any)'] = 'validate/$1';

// Dynamic routes
$route['(:any)'] = 'customer/profile/$1';
4

2 に答える 2

24

コントローラからこれを行うことができます

print_r($this->router->routes);

これには、routes.phpで定義されているすべてのルートが表示されます。

于 2012-11-15T03:39:47.897 に答える
2

まず、「私は学校ではない」ので、英語でごめんなさい。私はあなたが指摘しようとしていることをあまり理解していませんでした。たぶんあなたはこのhttp://www.hirepinoy.com/born2codeで同様のことをしたいと思うでしょう。$route['(:any)'] = 'customer/profile/$1';しかし、CodeIgniterでの私の経験では、ルートで宣言するのは悪い考えです。

あなたができる最善のオプションは、HOOKを使用してユーザー名がユーザーのテーブルに存在するかどうかを確認するクラスを作成することだと思います。http://codeigniter.com/user_guide/general/hooks.htmlを参照してください。したがって、ユーザー名(一意のフィールド)が返された場合は、次の$_SERVER['REQUEST_URI']ように変更できます

$_SERVER['REQUEST_URI'] = '/customer/profile/'.$username;

したがって、基本的には、codeigniterコアプロセスのコア処理の前にSERVERREQUESTを変更します。

さて、問題はおそらく、ユーザーがコントローラーと同じユーザー名を登録したときに、それがにルーティングするように変更されたため、確実に処理されないことcostumer/profile/blahblahです。あなたがする必要があるのは、ユーザー名がデータベースまたはあなたのコントローラー名にすでに存在する天気をチェックするためのカスタム検証を作成することです。

あなたは好きにすることができます

if (file_exists(APPPATH."controllers/{$value}.php")) {
    $this->CI->form_validation->set_message('is_unique', 'Username is already taken');  
    return FALSE;
}
于 2012-11-15T03:53:40.943 に答える