Ngu ngơ học làm web (x13) - CakePHP2 - Hàm rand(), Form, Redirect

Tiếp theo của: Ngu ngơ học làm web (x12) - CakePHP2 – Sử dụng containable behavior
-----

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ề $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
-----------
Xem thêm:
Tổng hợp các bài viết về Ngu ngơ học làm web