検索フォームがあり、GET メソッドを使用して送信しています。フォームの送信後、送信された値をフォームに事前入力する必要があります。POST の場合、cake はこれを自動的に処理しますが、GET では機能しません。Cakephp のフォーム ヘルパーを使用して、フォームとフォーム コントロールを作成しました。各フィールドを手動で設定する代わりに、フィールドを事前に入力する簡単な方法はありますか? 私はcakephp2.xを使用しています
3 に答える
この質問が少し前に出されたことは知っていますが、最近同じ問題が発生しました。
GET を使用すると、プロパティCakeRequest
は埋められません。CakeRequest::data
フォーム ヘルパーは通常、このプロパティを使用して入力の値を入力します。そのため、最初にこのプロパティをコントローラーのどこかにある GET データで埋める必要があります。例えば:
$this->request->data = $this->request->query;
次の問題は、GET を使用すると、フォームに設定したモデルがフォーム ヘルパーによって無視されることです。残念ながら、この動作は文書化されていませんが、次のことについて言及しています。
false
で渡すこともできます$model
。これにより、フォーム データが配列:$this->request->data
(サブ配列: ではなく) に配置されます$this->request->data['Model']
。これは、データベース内の何も表さない短い形式の場合に便利です。
false
そのため、検索フォームを作成するときにモデルを設定する必要があります。例えば:
echo $this->Form->create(false, array('type' => 'get'));
CakePHP 3 の場合、次のようにフォームを簡単に作成できます。
echo $this->Form->create($user);
コントローラーのアクションでは、$user を Entity として設定するだけです
$user = $this->Users->get($id);
これを行う$this->request->data
には、コントローラーにプロパティを設定します。
たとえば、これをフォームとして持っているとしましょう:
<?= $this->Form->create('Search'); ?>
<?= $this->Form->input('query'); ?>
<?= $this->Form->end(); ?>
次に、コントローラーアクションで次を使用します。
$this->request->data('Search.query', 'search data');