2015-05-09 26 views
6

Tôi không thể tìm ra cách chỉnh sửa quy tắc xác thực khi đang bay, ví dụ như trong bộ điều khiển của tôi.CakePHP 3.x: cách chỉnh sửa quy tắc xác thực khi đang bay

Trường hợp của tôi: bảng "người dùng" có trường "email", giá trị của nó phải là "duy nhất" khi tạo và cập nhật. Hiện tại, tôi đã tạo đúng quy tắc xác thực.

Nhưng bây giờ tôi phải tạo một hành động cho phép người dùng khôi phục mật khẩu của họ. Vì vậy, có một hình thức mà người dùng nhập địa chỉ email của họ và biểu mẫu này phải được xác thực. Sau đó, tác vụ sẽ kiểm tra nếu có địa chỉ email đó và gửi email để đặt lại mật khẩu.

Vì vậy: Tôi phải xác thực biểu mẫu bằng các quy tắc xác thực, nhưng trong trường hợp cụ thể này, tôi không cần email là "duy nhất".

Làm cách nào để thay đổi quy tắc xác thực chỉ cho một hành động?

Cảm ơn.


EDIT

Có lẽ điều này?

class UsersTable extends Table { 
    public function validationDefault(\Cake\Validation\Validator $validator) {  
     //Some rules... 

     $validator->add('email', [ 
      'unique' => [ 
       'message' => 'This value is already used', 
       'provider' => 'table', 
       'rule'  => 'validateUnique' 
      ] 
     ]); 

     //Some rules... 

     return $validator; 
    } 

    public function validationOnlyCheck(\Cake\Validation\Validator $validator) { 
     $validator->remove('email', 'unique'); 

     return $validator; 
    } 
} 

Trong hành động của tôi:

$user = $this->Users->newEntity($this->request->data(), [ 
    'validate' => 'OnlyCheck' 
]); 
+1

Đối với tôi rằng âm thanh như thể bạn nên sử dụng một validator riêng biệt, vì đây là chỉ về một lĩnh vực duy nhất mà thậm chí không được chữa để được cứu? – ndm

+0

Cảm ơn @ndm, có lẽ tôi có thể làm điều này: đối với trường hợp cụ thể này, tôi sử dụng trình xác thực mới mở rộng phiên bản gốc ('UserOnlyCheckValidator mở rộng UserValidator'). Trong trình duyệt tính hợp lệ mới, tôi chỉ [xóa] (http://api.cakephp.org/3.0/class-Cake.Validation.Validator.html#_remove) quy tắc đó. Bạn nghĩ gì về? –

+0

@ndm, xem chỉnh sửa cuối cùng của tôi –

Trả lời

7

gì bạn có trong câu hỏi của bạn sau khi sửa của bạn là cách dự định trong đó CakePHP 3 cho phép bạn sử dụng/quy tắc xác nhận động khác nhau cho mỗi trường hợp sử dụng.

use Cake\Validation\Validator; 
class UsersTable extends Table { 
    public function validationDefault(Validator $validator) {  
     //Some rules... 

     $validator->add('email', [ 
      'unique' => [ 
       'message' => 'This value is already used', 
       'provider' => 'table', 
       'rule'  => 'validateUnique' 
      ] 
     ]); 

     //Some rules... 

     return $validator; 
    } 

    public function validationOnlyCheck(Validator $validator) { 
     $validator = $this->validationDefault($validator); 
     $validator->remove('email', 'unique'); 
     return $validator; 
    } 
} 

Và sau đó:

$user = $this->Users->newEntity($this->request->data(), [ 
    'validate' => 'OnlyCheck' 
]); 
+0

tuyệt vời! làm việc như quyến rũ !! –

Các vấn đề liên quan