2010-12-23 6 views
0

私は現在、次のモデルがあります:私は、ビューでこのフォームを持っている関連するモデルが検証されていない

class Category extends AppModel { 
    var $name = 'Category'; 
    /*var $validate = array(
     'name' => 'multiple' 
    ); 
     no idea how to use this 
     */ 
    var $hasAndBelongsToMany = array(
     'Post' => array(
      'className' => 'Post' 
     ) 
    ); 

class Post extends AppModel { 
    var $name = 'Post'; 
    var $hasAndBelongsToMany = array(
     'Category' => array(
      'className' => 'Category' 
     ) 
    ); 
    var $belongsTo = array(
     'Page' => array(
      'className' => 'Page' 
     ) 
    ); 

class Page extends AppModel { 
    var $name = 'Page'; 
    var $order = array('Page.modified' => 'desc'); 

    var $hasOne = array(
     'Post' => array(
      'className' => 'Post' 
     )); 

を:

<div id="content-wrap"> 
    <div id="main"> 
      <h2>Add Post</h2> 
      <?php echo $this->Session->flash();?> 
      <div> 
      <?php 
      echo $this->Form->create('Post'); 
      echo $this->Form->input('Post.title'); 
      echo $this->Form->input('Category.Category', array('multiple' => 'checkbox')); 
      echo $this->Form->input('Post.body', array('rows' => '3')); 

      echo $this->Form->input('Page.meta_keywords'); 
      echo $this->Form->input('Page.meta_description'); 

      echo $this->Form->end('Save Post'); 
      ?> 
      </div> 
    <!-- main ends --> 
    </div> 

マイコントローラー:

function admin_add() { 
    // pr(Debugger::trace()); 
    $this->set('categories', $this->Post->Category->find('list')); 

    if (! empty($this->data)) { 

     $this->data['Page']['title'] = $this->data['Post']['title']; 
     $this->data['Page']['layout'] = 'index'; 

     if ($this->Post->saveAll($this->data)) { 
      $this->Session->setFlash('Your post has been saved', 'flash_good'); 
      $this->redirect($this->here); 
     } 
    } 
} 

私が抱えている問題は、カテゴリを選択せず​​に投稿を保存できることです。

私は、カテゴリーのモデルにルールとして以下を追加しようとしました:

var $validate = array(
    'rule' => array('multiple', array('in' => array(1, 2, 3, 4))), 
     'required' => TRUE, 
     'message' => 'Please select one, two or three options' 
); 

ポストとページモデルを検証します。 カテゴリの検証を有効にするにはどうすればよいですか?

答えて

1

最初に、$validate変数を正しく設定していません。 $validate配列のキーはフィールド名である必要があります。次に、multipleルールを使用して、フィールドの値が一連の値の範囲内にあるかどうかをチェックします。

var $validate = array(
    'color' => array(
     'multiple' => array(
      'rule' => array('multiple', array('in' => array('Red', 'Blue', 'Green'))), 
      'required' => false, 
      'message' => 'Please select one, two or three options' 
     ), 
    ), 
); 

私はmultipleのために本の中の例をチェックし、それはそこにタイプミスです。上記のコードは正しいです。あなたは、関連するモデルを検証したい場合は

次に、私はあなたのbeforeSave()機能であることを行うお勧め:)、ここで

function beforeSave(){ 
    if (isset($this->data['Category']['Category']) && empty($this->data['Category']['Category'])) { 
     return false; 
    } 
    return true; 
} 

beforeSave(からfalseを返す通過してから保存しなくなります。したがって、あなたはあなたの要件を首尾よく検証するでしょう。

+0

私は後でそれを試みます。私の質問は、アプリケーションをカテゴリを追加できるようにするとどうなりますか? 「複数の」ルールが間違っているのではないでしょうか? < - これはもちろん質問には関係しません。 –

+0

はい、そのような場合には間違いでしょう。あなたが 'マルチプル 'を使う良い例は、ユーザーが(友情、デート、関係、ネットワーキング)の間で複数のオプションを選択できる、Facebookの"探している "フィールドです。 – RabidFire

+0

私はそれを取得しません。カテゴリを追加して、投稿を追加するときに私がそれを選択できるようにするために、今、アプリケーションについてどうやって行くのですか? –

関連する問題