4

Cake 2.3.0 を使用しています。を使用してフォームを送信するPOSTと、選択したフォーム フィールドが引き継がれますが、 を使用してフォームを送信するとGET、すべてのフォーム フィールドがデフォルト値に戻ります。

GET提出物をそのように機能させる方法はありPOSTますか?

ここに私のコントローラーがあります:

class ListingsController extends AppController {
    public function results() {
        $conditions = array(
            'Listing.Beds >=' => $this->request->query['beds'], 
            'Listing.ListingStatus >=' => $this->request->query['status'], 
        );

        $this->paginate = array(
            'conditions' => $conditions,
        );    

        $this->set('listings', $this->paginate());
    }
}

これが私の見解です。

echo $this->Form->create(null, array(
    'controller' => 'listings', 
    'action' => 'results',
    'type' => 'get'
));

echo $this->Form->input('name');

$beds = array('1' => '1+', '2' => '2+', '3' => '3+', '4' => '4+', '5' => '5+');
echo $this->Form->input('beds', array('options' => $beds));

$status = array('Active' => 'Active', 'Pending' => 'Pending', 'ActivePending' => 'Active and Pending');
echo $this->Form->input('status', array('options' => $status));

echo $this->Form->end('Update'); 

したがって、基本的に変更'type' => 'get'する'type' => 'post'と問題なく動作します。しかし、私はこれを介して行うことができる必要がありますGET

ありがとう

4

6 に答える 6

1

私の解決策:

$this->params->data = array('Tablefilter' => $this->params->query);

ここで、「Tablefilter」はフォーム定義 (通常はモデル名) によって異なります。

$this->Form->create('Tablefilter', array('type' => 'get'))
于 2013-08-09T14:38:50.070 に答える
1

これをコントローラーに追加してみてください:

$this->request->data = $this->params['url'];
于 2013-04-01T21:17:18.377 に答える
0

私がやったことは、$this->request->query配列をループして、それらの値を matching に渡すこと$this->request->dataでした。

だから私はこれを追加しました:

foreach($this->request->query as $k => $v){
    $this->request->data['Listing'][$k] = $this->request->query[$k];
}

最終的に私にこれを与えました:

class ListingsController extends AppController {
    public function results() {

        foreach($this->request->query as $k => $v){
            $this->request->data['Listing'][$k] = $this->request->query[$k];
        }

        $conditions = array(
            'Listing.Beds >=' => $this->request->query['beds'], 
            'Listing.ListingStatus >=' => $this->request->query['status'], 
        );

        $this->paginate = array(
            'conditions' => $conditions,
        );    

        $this->set('listings', $this->paginate());
    }
}

これが最適な方法であるか、推奨される方法であるかどうかはわかりませんが、これを答えとして受け入れるつもりはありません。しかし、それは今のところ私にとってはうまくいきます。

于 2013-04-02T13:45:27.190 に答える
0

PRGを使用します。このプラグインをチェックアウトします。

于 2013-04-01T21:47:21.217 に答える
0

これは私のために働く:

$this->request->data['Cluster'] = $this->params->query ; //コントローラー側

フォーム定義:

$this->Form->create('Cluster',array('type'=>'get'));

于 2016-09-09T07:05:39.603 に答える