2010-12-02 4 views
0
에서 런타임에 유효성 검사 규칙을 설정

내 문제는 지금 모델 검증의 집합을 가지고 있다는 것입니다과 같이 규칙 :CakePHP를

var $validate = array(
    'title' => array(
     'rule' => 'notEmpty' 
    ), 
    'uri' => array(
     'slugged' => array(
      'rule' => '/^[a-z0-9-_]+$/i', 
      'message' => 'This field should only contain characters, numbers, dashes and underscores' 
     ), 
     'uniqueUrl' => array(
      'rule' => array('uniqueUrl'), 
      'message' => 'A page has already acquired this url' 
     ) 
    ), 
    'meta_keywords' => array(
     'rule' => 'notEmpty' 
    ), 
    'meta_description' => array(
     'rule' => 'notEmpty' 
    ), 
    'layout' => array(
     'rule' => 'notEmpty' 
    ) 
); 

문제는 hasOne의 관계가 다른 모델의 컨트롤러는 데이터를 삽입한다는 것입니다 그것으로. 나는 그 페이지에서 제목, URI 및 레이아웃을 요구하지 않습니다. 어떻게해야합니까?

나는 포스트 모델을 가지고 거기에서 페이지 값을 설정했습니다.

Array 
(
    [Post] => Array 
     (
      [title] => data[Post][title] 
      [body] => 

Post Body 

     ) 

    [Category] => Array 
     (
      [Category] => Array 
       (
        [0] => 1 
        [1] => 2 
        [2] => 3 
        [3] => 4 
       ) 

     ) 

    [Page] => Array 
     (
      [meta_keywords] => data[Page][meta_keywords] 
      [meta_description] => data[Page][meta_description] 
     ) 

) 

내가 페이지 모델에 대한 정보를 설정하려면 컨트롤러에서이 작업을 수행

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

이 이렇게 될집니다 :

Array 
(
    [Post] => Array 
     (
      [title] => data[Post][title] 
      [body] => 

Post Body 

     ) 

    [Category] => Array 
     (
      [Category] => Array 
       (
        [0] => 1 
        [1] => 2 
        [2] => 3 
        [3] => 4 
       ) 

     ) 

    [Page] => Array 
     (
      [meta_keywords] => data[Page][meta_keywords] 
      [meta_description] => data[Page][meta_description] 
      [title] => data[Post][title] 
     ) 

) 

내 문제는 내가 필요하지 않은 것입니다 저장시 Page 필드. Post belongsTo Page.

포스트를 포스트로 저장하는 경우 포스트 컨트롤러에서 메소드의 기본보기를 사용하면 [Page][layout]이 필요하지 않습니다. 페이지는 정적 페이지를 사용하며 페이지를 만들 때 필요하며 게시물을 만들 때 필요하지 않습니다.

+1

유효성 검사 규칙은 데이터베이스에 들어오는 것을 "보호해야"하므로 이상하게 들립니다. 빈 제목이 허용되면 규칙은 'notEmpty'가 아니어야합니다. 명확히하십시오. 필드 중 하나만 업데이트하고 프로세스에서'title' 등을 만질 필요가 없다는 것을 의미합니까? – deceze

+0

사실, 나는 다른 모델로부터 정보를 얻어야한다. Post [ 'title'] 등에서 Page [ 'title]을 얻고 싶을 것이다. 나는 컨트롤러에 저장하고 saveAll 바로 전에 값을 설정해야한다. 방법? –

+0

이미 그랬지만 다른 방법이 있다면 생각하고있었습니다. –

답변

0

유효성 검사를하기 전에 데이터를 사전 처리하므로 유효성 검사를 일부 제어 할 수 있습니다. 특정 필드를 인위적으로 채워야하는지 여부를 (코드로) 판단하는 것처럼 보이기 때문에 유효성 검사의 해당 부분을 중복 렌더링해야하므로이를 제거해야합니다. PHP에서 여러 개의 유효성 검사가 있다면 혼란 스러울 것입니다.

이 작업을 수행하거나 더 명확하게 수행하는 방법은 무엇입니까? 글쎄 beforeValidate이 작업을 수행하는 데 '올바른'장소 일 수 있지만 응용 프로그램의 논리에 가장 잘 맞는 곳이면 어디든 할 수 있습니다. 기능은 우아함 앞에 와야합니다.

관련 문제