Flash Message và View Helpers

Tạo bởi Hoàng Vũ, chỉnh sửa cuối lúc 17 tháng 6, 2025

Trong các ứng dụng web, việc hiển thị thông báo sau hành động như "Lưu thành công", "Đăng nhập thất bại" rất phổ biến. Phalcon cung cấp dịch vụ Flash để xử lý việc này. Ngoài ra, việc tạo ra các thẻ HTML trong view như input, form, button,... cũng được đơn giản hóa nhờ HTML helper (tag service). Bài học này sẽ giúp bạn sử dụng thành thạo hai công cụ đó trong thực tế.

1. Flash Messages trong Phalcon

Cấu hình dịch vụ flash trong services.php:

$di->setShared('flash', function () {
    return new \Phalcon\Flash\Direct([
        'error'   => 'alert alert-danger',
        'success' => 'alert alert-success',
        'notice'  => 'alert alert-info',
        'warning' => 'alert alert-warning',
    ]);
});

Cách sử dụng flash trong controller:

$this->flash->success("Tạo bài viết thành công!");
$this->flash->error("Có lỗi xảy ra!");

2. Hiển thị flash trong view

Trong layout chính (layouts/main.phtml), chèn đoạn:

<?= $this->flash->output() ?>

Kết quả: các thông báo được hiển thị tương ứng với kiểu và style đã cấu hình (có thể dùng Bootstrap hoặc CSS riêng).

3. HTML Helper (tag service)

Phalcon cung cấp nhiều helper để sinh HTML nhanh chóng.

Một số ví dụ phổ biến:

Thao tác Cách sử dụng
Tạo form <?= $this->tag->form("user/login") ?>
Input text <?= $this->tag->textField("username") ?>
Mật khẩu <?= $this->tag->passwordField("password") ?>
Submit button <?= $this->tag->submitButton("Đăng nhập") ?>
Link tới trang khác <?= $this->tag->linkTo("post/create", "Tạo bài viết") ?>

Gợi ý: Dùng kết hợp flash + tag để tạo form có thông báo.

Ví dụ cụ thể

1. Controller – LoginController.php

use Phalcon\Mvc\Controller;

class LoginController extends Controller
{
    public function indexAction()
    {
        // Hiển thị form
    }

    public function submitAction()
    {
        $username = $this->request->getPost("username");
        $password = $this->request->getPost("password");

        if ($username === "admin" && $password === "123456") {
            $this->flash->success("Đăng nhập thành công!");
            return $this->response->redirect("login/index");
        } else {
            $this->flash->error("Sai tài khoản hoặc mật khẩu.");
            return $this->response->redirect("login/index");
        }
    }
}

2. View – app/views/login/index.phtml

<h2>Đăng nhập</h2>

<?= $this->tag->form("login/submit") ?>
    <label>Tên đăng nhập:</label>
    <?= $this->tag->textField("username") ?><br><br>

    <label>Mật khẩu:</label>
    <?= $this->tag->passwordField("password") ?><br><br>

    <?= $this->tag->submitButton("Đăng nhập") ?>
<?= $this->tag->endForm() ?>

3. Layout – layouts/main.phtml (thêm flash)

<body>
    <?= $this->flash->output() ?>
    <?= $this->getContent() ?>
</body>

4. Kết quả khi nhập sai:

[Sai tài khoản hoặc mật khẩu.] (hiện trong khung đỏ hoặc theo class alert)

Kết luận

Flash messages giúp người dùng nhận được phản hồi rõ ràng sau các thao tác, còn View Helper (tag) giúp tạo HTML gọn gàng, chuẩn hóa. Đây là hai công cụ đơn giản nhưng rất hữu ích khi xây dựng form và giao diện có tính tương tác trong ứng dụng Phalcon.

Bài tập thực hành

Yêu cầu:

  • Tạo một form đăng ký hoặc đăng nhập
  • Xử lý dữ liệu POST trong controller
  • Hiển thị thông báo thành công hoặc lỗi bằng flash message

Gợi ý nâng cao:

  • Thêm kiểm tra dữ liệu nhập vào
  • Áp dụng Bootstrap để làm đẹp các thông báo flash (alert-success, alert-danger,...)
Website Logo

Với hơn 10 năm kinh nghiệm lập trình web và từng làm việc với nhiều framework, ngôn ngữ như PHP, JavaScript, React, jQuery, CSS, HTML, CakePHP, Laravel..., tôi hy vọng những kiến thức được chia sẻ tại đây sẽ hữu ích và thiết thực cho các bạn.

Bình luận

Website Logo

Chào, tôi là Vũ. Đây là blog hướng dẫn lập trình của tôi.

Liên hệ công việc qua email dưới đây.

lhvuctu@gmail.com

Chúng Tôi Trên

Bạn đang muốn học về lập trình website?

Bạn cần nâng cao kiến thức chuyên nghiệp hơn để nâng cao cơ hội nghề nghiệp? Liên hệ