Routing và xử lý dữ liệu bằng Form
Một ứng dụng web hiện đại không thể thiếu các form nhập liệu và các đường dẫn động để điều hướng và xử lý logic. Symfony – nền tảng EC-CUBE sử dụng – cung cấp một hệ thống Routing mạnh mẽ, cùng với Form Builder để tạo và validate form dễ dàng. Trong bài học này, bạn sẽ học cách tạo route, tạo form, nhận request, validate dữ liệu và xử lý trong controller.

Routing và xử lý dữ liệu bằng Form
1. Cấu hình routing trong EC-CUBE (YAML & Annotations)
EC-CUBE sử dụng cả 2 cách định nghĩa route:
-
YAML file (chính trong
app/config/routing.yml
) - Annotations ngay trong Controller (phổ biến hơn với plugin hoặc custom module)
Ví dụ route bằng Annotation:
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use Symfony\Component\HttpFoundation\Request;
/**
* @Route("/contact", name="contact_form")
*/
public function contact(Request $request)
{
// xử lý tại đây
}
EC-CUBE cũng có thể đọc route từ plugin qua Plugin/YourPlugin/Controller
.
2. Tạo form bằng Symfony Form Builder
Symfony hỗ trợ tạo form bằng FormType – giúp cấu hình form rõ ràng và tách biệt.
Tạo class ContactType.php
:
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\Form\Extension\Core\Type\TextareaType;
class ContactType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('name', TextType::class)
->add('email', TextType::class)
->add('message', TextareaType::class);
}
}
Đặt class này ở thư mục: src/Eccube/Form/Type/Custom/ContactType.php
hoặc theo plugin.
3. Nhận và validate dữ liệu
Trong controller, gọi form và xử lý dữ liệu như sau:
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Form\Extension\Core\Type\SubmitType;
public function contact(Request $request)
{
$form = $this->createForm(ContactType::class);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$data = $form->getData();
// xử lý dữ liệu: lưu DB, gửi mail, v.v.
$this->addFlash('success', 'Gửi liên hệ thành công!');
}
return [
'form' => $form->createView()
];
}
EC-CUBE sẽ tự động render form nếu bạn truyền form
vào view .twig
.
4. Xử lý logic trong controller & trả kết quả ra giao diện
- Logic như: kiểm tra dữ liệu, lưu entity, gửi email… đều thực hiện trong controller sau khi form hợp lệ.
- Thông báo thành công/thất bại có thể dùng
addFlash()
:
$this->addFlash('error', 'Có lỗi xảy ra');
- Kết quả sẽ được hiển thị trong giao diện bằng cách thêm:
{{ form_start(form) }}
{{ form_widget(form) }}
{{ form_end(form) }}
Form đã tích hợp sẵn với CSRF protection, validation, và binding dữ liệu.
Kết luận
- Symfony Routing giúp điều hướng các request một cách linh hoạt.
- Form Builder là công cụ mạnh để xây dựng form có validate đầy đủ và an toàn.
- Hiểu được cách xử lý dữ liệu form là nền tảng để xây dựng chức năng tương tác như liên hệ, đăng ký, đăng nhập, đặt hàng, v.v.
- Với EC-CUBE, bạn có thể mở rộng thêm bằng các Plugin hoặc override Controller để chèn form vào bất kỳ nơi nào.

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.
Xem thêm

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