1

私は自分のプロジェクトにcodeigniterを使用しています。使用できるURIセグメントを取得するには

$this->uri->segment();

しかし、私の場合は少し異なります

私のURLは次のようになります

localhost/mediabox/home/box/21

しかし、このURLにアクセスすると、ポップアップフォームが表示され、ユーザーがこのページにアクセスするためのキーを提供し、ホームコントローラーのvalidate_key関数内にあるajaxメソッドを使用してキーを検証します。

URLをエコーすると、localhost / home/validate_keyが表示されます

ホームコントローラーのvaliate_keyを呼び出しているときに、URLバーに書き込まれたURLから21を取得するにはどうすればよいですか?

何か案は?

ありがとう

4

3 に答える 3

3

問題:

これはバグではなく、自然な動作です。

次の点を考慮してください。

  1. validate_keyアドレス バーに URL を入力して、サーバーに関数を要求します。current_url() 戻りますlocalhost/blabla/validate_keyAJAX は関係ありません。

  2. validate_keyAJAXでリクエスト。同じ PHP コードが実行されます。
    、ブラウザのアドレス バーが表示されている場合でもcurrent_url()に変わりますlocalhost/blabla/validate_key
    localhost/blabla/box/21

それで、これはどういう意味ですか?これは、Codeigniterbase_url()がアドレスバーを気にしないことを意味します。それが呼び出されたのがajax通常のリクエストであるかどうかにかかわらず、それが含まれている機能を気にします。
この関数が実行されている限り、URL はそれを指しています。

ソリューション:

このような場合の私のお気に入りの解決策は、単純に非表示の入力を作成することです。

単純に、ユーザーがbox関数を要求したとき。あなたは彼にポップアップフォームを見せています。hidden_inputフィールドを 追加し、名前と値 21(依存) を指定します。

例(これを特定のニーズに合わせて調整する必要があります):

box関数 によって表示されるビューのフォームにこれを追加します。

form_hidden("number", $this->uri->segment(3));;

これで、これらのデータが関数に送信されますvalidate_key。どのようにアクセスしますか?それは簡単です!

function validate_key(){

$this->input->post("number");//returns 21 or whatever in the URL.
//OR if the form sends GET request
$this->input->get("number");//return 21 or whatever in the URL.
/*
 *Or , you can do the following it's considered much safer when you're ONLY
 *expecting numbers, since this function(intval) will get the integer value of
 *the uri segment which might be a destructive string, so if it's a string
 *this function will simply return 0.
 */
$number = intval($this->input->post("number"));//returns 21 or whatever in the URL.
//Or if it it GET request:
$number = intval($this->input->get("number"));//returns 21 or whatever in the URL.
}
于 2012-08-06T15:35:13.470 に答える
0

非表示フィールドを使用し、必要なときに値を投稿することをお勧めします。

于 2012-08-21T10:39:50.240 に答える
0

.htaccess を使用しindex.phpて URL の一部を削除したようです。したがって、に移動すると、値 21 が名前付きコントローラーで名前localhost/mediabox/home/box/21付き関数に渡されます。boxhome

その値を関数内に保持したい場合はvalidate_key、呼び出すときに渡すだけです。

function box($param)
{
    //$param = 21
    $this->validate_key($param);
}    
于 2012-08-06T15:17:08.953 に答える