-----
Phần x13. CakePHP2
– Hàm rand(), Form, Redirect
Xem (clip số 19 – chickenrainshop):
Dùng hàm rand() trong tùy chọn order của câu truy vấn, kết
hợp với tùy chọn limit để lấy ra các mẩu tin một cách ngẫu nhiên.
[BooksController.php action view]
Thêm các dòng mã sau vào cuối tập tin:
$relatedBooks = $this->Book->find('all',
[
'fields'
=> ['title', 'image', 'sale_price', 'slug'],
'conditions'
=> [
'category_id'
=> $book['Book']['category_id'],
'Book.id
<>' => $book['Book']['id'],
'published'
=> 1
],
'limit'
=> 5,
'order'
=> 'rand()',
'contain'
=> ['Writer' => ['name', 'slug']]
]);
$this->set('relatedBooks',
$relatedBooks);
[View\Books\view.ctp] thêm các dòng mã sau:
<h3><?php echo __('Sách liên quan') ?></h3>
<?php echo $this->element('book', ['books' =>
$relatedBooks]); ?>
Xem (clip số 20a – chickenrainshop):
- Chuyển trang web sang action
khác: redirect (6":57)
- Reload trang hiện
tại: redirect(referer())(8":57)
- Ẩn label: (10":16)
Lấy form gửi comment từ View\Comments\add.ctp chuyển sang
View\Books\view.ctp.
Câu hỏi đặt ra ở đây là:
Action và controller của form được
xác định như thế nào?
Đọc thêm về FormHelper tại đây: https://book.cakephp.org/2.0/en/core-libraries/helpers/form.html
Nếu có tùy chọn url thì controller
sẽ tương ứng TênModel và action là giá trị trong tùy chọn url
Ví dụ,
Tại view Books\view.ctp, câu lệnh tạo form là:
<?php echo $this->Form->create('Comment', ['url'
=> ['action' => 'add']]); ?>
Khi đó, controller sẽ là Comments, và action là add.
Kết quả render ra là:
<form action="/comments/add"
id="CommentAddForm" method="post"
accept-charset="utf-8">
Nếu không có tùy chọn url thì
controller và action sẽ là controller và tên action tương ứng với nơi đặt đoạn
mã tạo form.
Ví dụ,
Tại view Books\view.ctp, câu lệnh tạo form là:
<?php echo $this->Form->create('Comment'); ?>
Khi đó, controller sẽ là Books,và action là view.
Kết quả render ra là:
<form action="/mot-voi-mot-la-ba" id="CommentViewForm"
method="post" accept-charset="utf-8">
(có kết quả trên là bởi lệnh này trong routes.php: Router::connect('/:book_title',
['controller' => 'books', 'action' => 'view'], ['pass' =>
['book_title']]);)
- method mặc định là post
- id mặc định sau khi render sẽ là TênModelTênActionForm
- Các input của Form được ngầm định là tên của các field Model
Đọc thêm về redirect tại đây: https://book.cakephp.org/2.0/en/controllers.html
Lệnh $this->Comment->create(): dùng để reset lại trạng
thái của model trước khi thêm vào một mẩu tin mới vào cơ sở dữ liệu.
Đọc thêm về model->create() tại đây: https://book.cakephp.org/2.0/en/models/saving-your-data.html#model-create-array-data-array
Đọc thêm về $this->Session->setFlash() tại đây: https://book.cakephp.org/2.0/en/core-libraries/helpers/session.html
Đọc thêm về $this->Flash() tại đây: https://book.cakephp.org/2.0/en/core-libraries/helpers/flash.html
-----------
Cập nhật 10/5/2017
-----------