2015-05-08 17 views
9

Tôi đang ở bên trong "PostsTable.php" Tôi đang cố gắng lấy dữ liệu biểu mẫu để xử lý tệp hình ảnh.

Trong CakePHP 2, tôi đã sử dụng để làm:

public function beforeSave($options = array()) 
{ 
if(!empty($this->data['Post']['picture']['name'])... 

Ai đó có thể giải thích điều này trong Cake 3:

beforeSave 
Cake\ORM\Table::beforeSave(Event $event, Entity $entity, ArrayObject $options) 

?

THÊM

tôi cố gắng đoạn mã này để xem nếu tôi có thể tiết kiệm lĩnh vực này trên cơ sở dữ liệu cũng giống như một bài kiểm tra nhưng có vẻ như beforeSave đang được bỏ qua:

public function beforeSave($options) 
{ 
if(!empty($entity->pic1['name'])) 
{ 
$entity->pic1 = 'jus a test'; 
} 

Cảm ơn

Trả lời

-5

Hãy để tôi read the manual cho bạn:

Sự kiện Model.beforeSave được kích hoạt trước khi mỗi thực thể được lưu. Dừng sự kiện này sẽ hủy thao tác lưu. Khi sự kiện dừng lại, kết quả của sự kiện sẽ được trả lại.

Ngoài ra:

Model.beforeSave: Sẽ được kích hoạt ngay trước khi danh sách các trường để được tiếp tục tồn được tính toán. Nó nhận cả thực thể và các tùy chọn làm đối số. Mảng tùy chọn được truyền như một ArrayObject, vì vậy mọi thay đổi trong nó sẽ được phản ánh trong mọi trình nghe và được ghi nhớ ở cuối sự kiện để nó có thể được sử dụng cho phần còn lại của thao tác lưu. Trả về false trong bất kỳ người nghe nào sẽ hủy bỏ quá trình lưu. Nếu sự kiện bị ngừng sử dụng API sự kiện, thuộc tính kết quả của đối tượng sự kiện sẽ được trả lại. Điều này có thể hữu ích khi có chiến lược tiết kiệm của riêng bạn được thực hiện bên trong một người nghe.

Để làm bất cứ điều gì bạn đã làm trước trong Cake2 bạn chỉ có thể sửa đổi $entity vì đơn vị đã thay thế Model::$data tài sản.

if(!empty($entity->picture['name']) 

Nếu bạn không biết sự kiện hoạt động như thế nào read about them. Ngoài ra the migration guide là phải đọc. Nó liệt kê mọi thứ đã thay đổi.

+0

Tôi đã thay đổi nó nhưng dường như beforeSave bị bỏ qua. Tôi đã thử điều này tôi đã thêm vào câu hỏi chỉ là một bài kiểm tra nhưng tên không được đặt. –

+0

@burzump vừa xảy ra ở đây là: Tôi đã có những gì tôi đã cố gắng để làm nhưng tôi đã sử dụng beforeMarshal thay vì beforeSave. Có vấn đề gì không? Tôi chỉ muốn lưu đường dẫn trong cơ sở dữ liệu và tệp trong một thư mục. Nhưng beforeSave dường như bị bỏ qua ... –

+0

Đọc hướng dẫn;) 'Bạn có thể sử dụng sự kiện Model.beforeMarshal để sửa đổi dữ liệu yêu cầu trước khi nó được chuyển thành thực thể.' Tôi không biết tại sao nó không hoạt động cho bạn. – burzum

7

Bắt đầu với định nghĩa hàm.

Cake\ORM\Table::beforeSave(Event $event, EntityInterface $entity, ArrayObject $options) 

Kể từ CakePHP đang kêu gọi các chức năng tự động, đây là cách nó đã được gọi là, vì vậy xây dựng chức năng của bạn giống hệt với định nghĩa hàm:

// In PostsTable.php 
public function beforeSave($event, $entity, $options) { 

} 

Nếu bạn không chắc chắn những gì dữ liệu đang được gửi, sử dụng chức năng debug() CakePHP của:

debug($event); debug($entity); debug($options); 

khi bạn tìm thấy dữ liệu của bạn trong $entity sử dụng nó để làm những gì bạn muốn làm để dữ liệu của bạn:

if(!empty($entity->picture['name'])... 
Các vấn đề liên quan