2011-07-24 4 views
-1

Cakeのモデルの基本検索では、postConditionsメソッドを使用しています。セキュリティコンポーネントを介してCSRF保護を有効にするまではうまくいきました。この成分を有効CakePHPsでのpostConditionsの使用セキュリティコンポーネント

SQL Error: 1054: Unknown column '_Token.key' in 'where clause [...]を生成し、$this->dataから変更されているので、私はこれが起こっていることがわかります。言い換えれば.....

Array 
(
    [_Token] => Array 
     (
      [key] => 03aef38c3c2f631d6dc50baa98c7327a3fe6d0cd 
      [fields] => 71d0fa03bc4e10f6f4d0de8f91674100836ea498%3A 
     ) 

    [CrmPerson] => Array 
     (
      [firstname] => john 
      [surname] => 
      [email] => 
     ) 

) 

Array (
    [CrmPerson] => Array 
     (
      [firstname] => john 
      [surname] => 
      [email] => 
     ) 
) 

.... 、[_Token]の存在は、$this->postConditionsコールを怒らせます。コントローラで

私の全体のfind()関数は次のようになります。

function find() { 
    if(!empty($this->data)) { 
     $this->CrmPerson->recursive = 0; 
     $conditions = $this->postConditions(
      $this->data, 
      array(
       'firstname' => 'LIKE', 
       'surname' => 'LIKE', 
       'email' => 'LIKE' 
      ) 
     ); 

     $this->paginate = array(
      'order' => 'CrmPerson.created DESC', 
      'limit' => '40', 
     ); 
     $this->set('crmPeople', $this->paginate($conditions)); 
    } 
} 

私は$this->data['CrmPerson']$this->dataを変更しようとしたが、事後条件のメソッドは、配列内の1つ上のレベルの高い開始するデータを必要とします。

私はpostConditionsに与えるために完全な新しい配列を作成する必要がありますか、私は見ていないより単純なオプションがありますか?

答えて

2

申し訳ありませんが、私は遅い日曜日を持っていた...ちょうどcontroller.phpで事後条件()メソッドの@paramsを再読み込みし、私が間違って行ってきたどこで見ることができます。

この:私は正しい答えとしてそれをマークしていますので、それを尋ねたとして

 $conditions = $this->postConditions(
      $this->data, 
      array(
       'firstname' => 'LIKE', 
       'surname' => 'LIKE', 
       'email' => 'LIKE' 
     ); 

...する必要があります....

 $conditions = $this->postConditions(
      $this->data, 
      array(
       'firstname' => 'LIKE', 
       'surname' => 'LIKE', 
       'email' => 'LIKE' 
      ),'AND',true 
     ); 
1
unset($this->data['_Token']); 
+0

これは私の問い合わせに答えます。しかし、私はこのメソッドを直接この問題を解決する別の答えを掲載しました。 – Joseph

+0

あなたは答えが正しいものとしてマークする必要があります。 –

+0

さて、十分に公正! – Joseph