2012-03-19 22 views
1

私のコードイグナイターアプリケーションのURLにジャーナルのIDをエンコードしようとしましたが、それをコントローラで取得しようとしました。私の最終目標は、私は私のjournalPage.phpでコードイニターコントローラーのインデックスメソッドにデータを送信するにはどうすればよいですか?

<?php 
if (!defined('BASEPATH')) 
    exit('No direct script access allowed'); 

class Journal extends Controller { 
    public function index($journalId) { 
     $data['journalId'] = $journalId; 
     $this->view->load('journalPage', $data); 
    } 
} 
?> 

を持って、ページhttp://mysite.com/journal/3にアクセスし、自分のjournal.phpコントローラファイルでID 3.

とジャーナルの詳細を含むページにアクセスするために取得することです私は

This event has ID <?= $journalId ?>. 

私のroutes.phpファイルにこのルールを書いています。

$route['journal/(:num)'] = 'journal/$1'; 

ここは、htmlパブリックフォルダ内の.htaccessファイルです。

<IfModule mod_rewrite.c> 
Options +FollowSymLinks 
RewriteEngine on 
RewriteBase/
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*)$ index.php?$1 [QSA,L] 
</IfModule> 

しかし、私がmysite.com/journal/3に行くと、404エラーが発生します。どうして?

+0

.htaccessファイルが設定されていますか?もしそうでなければ、インデックスページを通してサイトにアクセスする必要があります: 'mysite.com/index.php/journal/3' – rjz

+0

私は.htaccessファイルを持っています。 URLにコード化されたデータのないコントローラ(およびそのメソッドがパラメータを受け入れない)が動作しています。また、 'mysite.com/journal/3'や' mysite.com/index.php/journal/3'も動作していません。興味深いことに、 'mysite.com/journal /'に行くことができます。しかし、表示されるテキストは、実際のイベントIDのない「This event has ID。」です。 –

+0

routes.phpでルールを定義しましたか? – safarov

答えて

3
$route['journal/(:num)'] = 'journal/index/$1'; 

(:num) will become invalid if you encode 

編集: あなたのID(無意味な)をコードするCIの暗号化クラスを使用する場合 あなたは文字列がURI安全であることを確認するために、それを変更する必要があります。

+0

ありがとうございました、私は文字列 ''journal/index/$ 1''で" index "を忘れてしまいました。 –

1

これは私が上記のものに基づいて、これはちょうどCIルーティングに間違っています。

あなたの.htaccessはokです(あなたはURLからindex.phpを削除するだけです)。

他の2つのステップ(コントローラとルート設定に問題があります)。

コントローラではまず、新しいコントローラを作成するときに話を短くするためにCI_Controller を拡張する必要があり、これはあなたのjournal.phpファイルのような好きな方法を次のとおりです。

<?php 
if (!defined('BASEPATH')) 
    exit('No direct script access allowed'); 

class Journal extends CI_Controller { 
    public function __construct() { 
     parent::__construct(); // This is MUST! 
    } 
    public function index($journalId) { 
     $data['journalId'] = $journalId; 
     $this->view->load('journalPage', $data); 
    } 
} 

あなたがこれを更新した際に今、私たちは来ます経路設定へ。

あなたが書き込んだ設定ラインは、CIを混乱させる可能性があります。 CI経路の

構造は次のようであるshoud:

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

これはPARAM [ID]と方法名前インデックスに、名前付きジャーナルをコントローラにジャーナル/ [ID]からのすべてのトラフィックをリダイレクトすることになります。

ルーティングでインデックス部分を定義する必要があります。

これを試してください。すべてうまくいきます。 乾杯。

1

まず、空のコンストラクタを作成する必要はありません(これは[nothing!]でなければなりません)。 一部のライブラリ、ヘルパー、またはモデルをそのコントローラのすべての機能の始めにロードする必要がある場合は必要になります。そうでない場合は必要ありません。

その他のヒント:コントローラー機能でパラメーターを渡さないようにしてください。 CodeIgniterのURIクラスを使用してuri値を捕捉し操作することができます。

はちょうどこの操作を行います。

<?php 
if (!defined('BASEPATH')) 
    exit('No direct script access allowed'); 

class Journal extends CI_Controller 
{ 
    public function index() 
    { 
     $data['journalId'] = $this->uri->segment(2); 
     $this->view->load('journalPage', $data); 
    } 
} 

方が良いURIクラスで見てみましょう。それはかなり簡単に便利です! http://codeigniter.com/user_guide/libraries/uri.html

PS:経路上に何も修正する必要はありません。

ハグ

関連する問題