2013-02-03 31 views
6

Có cách nào để yêu cầu một mảng các phần tử trong phương thức rules() của mô hình Yii không? Ví dụ:Quy tắc xác thực Yii cho một mảng

public function rules() 
{ 
    return array(
      array('question[0],question[1],...,question[k]','require'), 
    ); 
} 

Tôi đã chạy vào tình huống mà tôi cần phải xác nhận một vài mảng của các yếu tố đến từ một hình thức và tôi dường như không thể tìm thấy một cách tốt để đi về nó khác so với thực hiện ở trên. Tôi có cùng một vấn đề khi chỉ định attributeLables(). Nếu bất cứ ai có một số lời khuyên hoặc một cách tốt hơn để làm điều này tôi thực sự sẽ đánh giá cao nó.

+0

dlnGd0nG, liên kết không đề cập đến cách xác thực mảng phần tử. – dataplayer

+0

Tôi nghĩ bạn muốn thêm đầu vào dạng bảng. "Câu hỏi [x]" là gì? Chúng thuộc tính lớp? và bởi mô hình Yii bạn đang đề cập đến cái gì? 'CActiveRecord',' CfromModel' hoặc 'CModel'? – dInGd0nG

+0

dlnGd0nG, 'câu hỏi [x]' là giá trị tên của các biểu mẫu tôi đang gửi. Mô hình Yii mà tôi đề cập cụ thể là CFormModels. – dataplayer

Trả lời

13

Bạn có thể sử dụng CTypeValidator aliased bởi type

public function rules() 
{ 
    return array(
      array('question','type','type'=>'array','allowEmpty'=>false), 
    ); 
} 
+0

Đó hoàn toàn là những gì tôi đang tìm kiếm. Tôi chỉ aliased 'loại', như bạn đã đề cập: 'mảng ('câu hỏi', 'CTypeValidator', 'loại' => 'mảng', 'allowEmpty' => false),' và nó làm việc hoàn hảo. Cảm ơn! – dataplayer

2

Với array('question','type','type'=>'array','allowEmpty'=>false), bạn chỉ có thể xác minh rằng bạn nhận được chính xác những mảng, nhưng bạn không biết những gì bên trong mảng này. Để xác thực các phần tử mảng, bạn nên làm như sau:

<?php 

class TestForm extends CFormModel 
{ 
    public $ids; 

    public function rules() 
    { 
     return [ 
      ['ids', 'arrayOfInt', 'allowEmpty' => false], 
     ]; 
    } 

    public function arrayOfInt($attributeName, $params) 
    { 
     $allowEmpty = false; 
     if (isset($params['allowEmpty']) and is_bool($params['allowEmpty'])) { 
      $allowEmpty = $params['allowEmpty']; 
     } 
     if (!is_array($this->$attributeName)) { 
      $this->addError($attributeName, "$attributeName must be array."); 
     } 
     if (empty($this->$attributeName) and !$allowEmpty) { 
      $this->addError($attributeName, "$attributeName cannot be empty array."); 
     } 
     foreach ($this->$attributeName as $key => $value) { 
      if (!is_int($value)) { 
       $this->addError($attributeName, "$attributeName contains invalid value: $value."); 
      } 
     } 
    } 
} 
Các vấn đề liên quan