2010-12-23 3 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

먼저 off변수를 올바르게 설정하지 않았습니다. $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에 대한 책의 예제를 확인하고 거기 오타입니다. 위의 코드는 정확합니다.

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

을 여기에서 겪고에서 저장 방지 할)이를 BeforeSave (에서 false를 반환 : 당신이 관련 모델의 유효성을 검사하려면

다음, 나는 당신이 당신의 beforeSave() 기능에 그렇게 제안한다. 따라서 귀하의 요구 사항을 성공적으로 검증하게 될 것입니다.

+0

확인. 나는 나중에 그것을 시도 할 것이다. 내 질문에, 내가 카테고리를 추가 할 수있는 앱을 결정하면 어떻게 될까? '복수'규칙이 틀리지 않습니까? <- 물론 이것은 질문과 관련이 없습니다. –

+0

예, 그런 경우에는 잘못되었습니다. 'multiple '을 사용하는 좋은 예는 사용자가 (우정, 데이트, 관계, 네트워킹) 중에서 여러 옵션을 선택할 수있는 Facebook의 "찾고있는"필드입니다. – RabidFire

+0

나는 그것을 얻지 않는다. 게시물을 추가 할 때 카테고리를 추가하고 habtm에서 카테고리를 선택할 수있게 해주는 응용 프로그램에 대해 지금 어떻게 가야합니까? –

관련 문제