Bạn có thể thực hiện xác thực dữ liệu biểu mẫu trong CakePHP mà không phải tạo tệp model.php. Có rất nhiều lần tôi cần phải làm điều này, và lưu trữ các tập tin model.php mà không làm gì nhiều hơn sau đó xác nhận là một cách sử dụng kém của mô hình thiết kế mô hình.
Một vấn đề khác với CakePHP là đôi khi quy tắc xác thực phổ biến trên nhiều mô hình. Sẽ tốt hơn nếu di chuyển xác thực ra khỏi mô hình, nhiều trong cách hành vi là thư mục con của riêng họ. Bằng cách đó, chúng tôi có thể tái sử dụng chúng hoặc sử dụng chúng mà không cần mô hình.
Một vấn đề khác khi xác nhận là nó phụ thuộc vào bí danh mẫu. Nếu bạn có một mô hình được gọi là "Email" không có bảng để thực hiện xác thực, thì biểu mẫu đã đăng cũng phải sử dụng "Email". Nếu biểu mẫu sử dụng bí danh khác với bộ điều khiển thì bạn phải đặt hành động. Nhiều bước bổ sung chỉ để thực hiện xác thực. Bạn không thể sử dụng lại mô hình đó nếu biểu mẫu của bạn sử dụng một mô hình khác.
Vì vậy, đây là cách tiếp cận thay thế của tôi.
Trong hành động của bộ điều khiển nhận dữ liệu biểu mẫu đã đăng. Bạn có thể tạo mô hình CakePHP mặc định, thêm một số quy tắc xác thực và sau đó sử dụng mô hình đó để xác thực.
Hành động ví dụ có thể trông như thế này;
function edit()
{
$model = ClassRegistry::init(array('class'=>'Email','table'=>false,'type'=>'Model'));
if(!empty($this->data))
{
$model->validate = array(
'subject'=>array(
'rule'=>'notEmpty',
'required'=>true
),
'message'=>array(
'rule'=>'notEmpty',
'required'=>true
)
);
if($model->save($this->data))
{
// validation was successful, but no data was actually saved
}
}
}
Chìa khóa ở đây là tạo mô hình tự động bằng CakePHP.
$model = ClassRegistry::init(array('class'=>'Email','table'=>false,'type'=>'Model'));
Các nỗ lực trên để tìm mô hình bằng Email trong thư mục mô hình ứng dụng. Khi không tìm thấy CakePHP sẽ tự động tạo một mô hình bộ nhớ cho lớp đó. Vì chúng ta đặt giá trị của 'table' thành false, nên điều này sẽ cho CakePHP biết rằng mô hình này không sử dụng một bảng.
Điều này hoạt động miễn là thực sự không có tệp email.php trong thư mục mô hình ứng dụng. Một khi mô hình này được tạo ra trong bộ nhớ. Nó có thể truy cập từ sự trợ giúp của Form. Điều đó có nghĩa là lỗi xác thực sẽ được chuyển chính xác đến chế độ xem.
Đây là tệp xem mẫu.
<?php echo $this->Form->create('Email',array('action'=>array('controller'=>'mycontroller','action'=>'edit'))); ?>
<?php echo $this->Form->input('subject'); ?>
<?php echo $this->Form->input('message',array('type'=>'textarea')); ?>
<?php echo $this->Form->submit(); ?>
Chế độ xem giờ đây sẽ hiển thị lỗi xác thực từ mô hình Email bằng Trình trợ giúp biểu mẫu. Điều này là do lớp đăng ký CakePHP đã lưu một bản sao của mô hình tự động EMail trong bộ nhớ mà trình trợ giúp biểu mẫu sẽ truy cập.
Nếu bạn muốn sử dụng quy tắc xác thực tùy chỉnh, thì bạn sẽ phải đặt các phương thức gọi lại trong tệp app_model.php.
Những phương pháp thử nghiệm trong CakePHP 1.3
Tại sao if (Validation :: email ($ someThingThatMightBeAnEmailAddress)) không làm việc trên kết thúc của tôi? – PinoyStackOverflower
@PinoyStackOverflower Nếu không hoạt động, bạn có nghĩa là "Xác thực Lớp" không tìm thấy "thì bạn có thể cần phải thêm Ứng dụng :: sử dụng ('Xác thực', 'Tiện ích') để bao gồm lớp Xác thực. –