2012-01-22 13 views
1

私は本当に私のアプリのルートをやっていて、CIに根ざしているのは非常に混乱しています。 だから私は各国の人々のページをいくつか持っています。国のホームページのドロップリスト 私はPOSTメソッドを使ってデータを渡すことができますが、メインコントローラがdbにアクセスしてそれらを生成するので、問題はURLで直接アクセスできません すべての私のページが、このURLcodeigniterでのルーティング:

www.site.com/country 

国のcontroler

しかし、私である必要がありこのように見えるようにする:

www.site.com/name-of-country/name-of-person 

どのようにそれを行うには?

答えて

1

...これを処理する

最良の方法は、次の操作を行うためにあなたのルーティングを設定することです(あなたがコントロールしたい場合ユーザーが使用することができますことを国:

foreach(array('country1', 'country2') as $country) { // array with allowed countries 
    $routes[$country.'/(:any)'] = "country/view/{$country}/$1"; 
    $routes[$country] = "country/view/{$country}"; 
} 

ので、もしこれはは、許可の国のあなたの配列をとり、その後、各国のルーティングルールを作成しないものを:

は、あなたのルートファイルでこれを置きますユーザーはhttp://example.com/japan/narutoに行きますURL http://example.com/country/view/japan/narutoへ。これは、「japan」があなたの「許可された国」の配列にあると仮定しています。お使いのコントローラcountry.php

もう一つは、単純にルートURL http://example.com/japanhttp://example.com/country/view/japan

へ:

class Country extends CI_Controller { 
    function view($country, $username = false) { // $username=false allows you to show just a 'country' page if you want to 
    if ($username) { 
     $this->load->view('users_view', array('country' => $country, 'username' => $username)); 
    } else { 
    $this->load->view('countries_view', array('country' => $country)) 
    } 
    } 
} 

だけ表示されている国のためにページを作成することが有効になっている私がここで行っていますあなたのビューフォルダからcountries_view.phpをロードするか、users_view.phpページをロードするユーザのページを表示することができます。

+0

私はすべての世界のすべての国を持っている場合この作品ですか? 1つの国をアクティブにするたびにデータベースに郡名が格納されています。 –

+0

はい、配列に入れて、その配列のforeach()を実行する必要があります。 –

+0

あなたはあなたのルートファイルの国の配列を手持ちで管理していますが、データベースには同じ情報が入っていますので、あなたのアクセスコントロールができますか?今では、DRY(Do not Repeat Yourself)原則に違反していないだけでなく、CodeIgniterが構築されているMVCアーキテクチャの原動力ですが、自分でもっと多くの作業をしました。 – njbair

3

CIのコントローラは、通常の機能と同様に引数を取ることができます。それらの引数はURLセグメントとして渡されます。あなたが入力したいのであれば:、POSTDATAからリダイレクトこれを試してみ

function Country($name_of_country, $name_of_person) { ... } 

:詳細については

function Country($name_of_country, $name_of_person) { 
    if ($this->input->post('country') { 
    redirect('/country/' . $this->input->post('country')); 
    } 
} 

を、official documentation on routingを確認

www.site.com/name-of-country/name-of-person 

をちょうどこのようなあなたの関数を書きます。

+0

ありがとうthats素晴らしいが、どのように私はこのURLを生成するだろうユーザーのホームページをスローして行く人のページに行く、どのようにURLを表示するには? –

+0

フォームを使用してこれを行う場合は、必要に応じてポストデータとリダイレクトを検索する条件を国のコントローラに追加できます。 – njbair

+0

はい、それはリダイレクトで行うことができます、私はちょうどそれを把握し、助けてくれてありがとう:) –

2

また、これをいくつかの正規表現を使ってroutes.phpファイルに設定することもできます。アプリケーションの設定方法と経路の制御方法によって異なります。例えば、あなたがこれをした場合:

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

あなたはおそらくあなたが望む以上に一致するでしょう。あなたはURLの構造を少し変更することができ、代わりにそのような一般的なもので、より具体的な正規表現を使用するか、または...ことができます:

$route['country/(:any)/(:any)'] = 'country/index/$1/$2'; 

その後、あなたはそれが属するroutesファイルにそのロジックを設定することができます。ルートファイルがある場合は、コントローラ経由でルーティングする代わりに使用する必要があります。これらの答えは、十分な情報を与えていない、と受け入れられた答えはちょうどひどいです

関連する問題