Symfony, Routes, Controllers, Pages, day 3

Ngày 2, chúng ta đã biết tạo vitual domain, hoặc dùng command line để start server,

Hôm nay, ngày 3 chúng ta tiếp tục tìm hiểu  ROUTES, CONTROLLERS và PAGES trong symfony,

Nếu bạn đã biết cách thức hoạt động của routes trong những framework khác thì đối với symfony nó hay hơn nhiều làm thẳng trong controller luôn ghê chưa ^^, đó là lý do tại sao bạn nhìn trong source không thấy 1 file route.php nào cả OK recap nhiêu thôi vào luôn nào..

Route: configuration that defines the URL for a page.
Controller: a function that we write that builds the  content for that page.


Bước 1 Route & Controller

Mở file routes.yaml ra đường dẫn config/routes.yaml


Với file .yaml thì nó comment bằng dấu #, bây giờ mở comment ra và chỉnh đến controller chúng ta sẽ tạo ra, theo như mặc định thì đầu tiên thì chương trình chạy nó sẽ tìm đến controller tên DefaultController và function là index().

ở dòng path có dấu / tức là đây là trang index.

Giờ mình không sài của nó mình tự tạo ra 1 controller và chỉ định symfony chạy đến controller của mình xem sao nhé


Đây giờ thì đầu tiên nhất symfony nó sẽ tìm đến controller ArticleController và function tên là hompage()

Bước 2 ở folder src/Coltroller chúng ta tạo file ArticleController nội dung như sau


Ở những framwork khác bạn có thể thấy $this->view hoặc $this->load->view, thì ở symfony bạn sẽ thấy nó na ná như Laravel muốn in ra màn hình 1 cái gì đó thì dùng return new Response

Ngon rồi giờ thì ra browser refetch xem kết quả như nào nha


OK rồi trình duyệt nó đã hiểu khi mình run cái domain ảo của mình nó đã biết bay tới controller Article function homepage rồi in ra dòng "Test function routes" rồi.

---
Phần hấp dẫn nhất mà theo mình thấy nó tiện dụng nhất của syymfony là định nghĩa routes ngay tại controller luôn và dân chuyên người ta gọi nó là annotation routes

Đầu tiên muốn dùng được nó thì mình mở CMD cd đến folder source code và chạy lệnh
composer require annotation


Ngon rồi chạy được không lỗi lầm gì :)
Tiếp đến quay lại file routes.yaml  config/routes.yaml comment lại hết không cần nữa


Xong, quay lại controller Article chơi nào, tại đây muốn define cái routes cho từng controller thì trên function controller thêm /** và đặc @route() vào nó nhìn như vầy.

Ah quên phía trên tên class define thêm 
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;

Không dùng dòng lệnh đó thì nó không hiểu mình viết @route() là cái gì đâu


Nhớ để ý cái use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route; nó nằm trên thằng response nha để ưu tiên á :D

Giờ chung 1 controller mình tạo tiếp 1 function khác truyền thử routes mới vào xem sao nha  giống vầy


Ở đây function mới tên show() cái route mình sẽ đặc nó là /news/test-them-cai-link
OK rồi giờ ra browser xem coi nó sao nha

Ngon nó vẫn chạy được nà :)
Nếu mà nó báo lổi Object not found thì bạn kiểm tra lại composer đã start dc server chưa bằng lệnh

composer require server
php ./bin/console server:run

Giờ mình lại nãy ra 1 ý tưởng là từ routes mình muốn nhập gì cũng được thì làm sao ta,... hummmm
ah sài slug xem sao

Dân trong nghề gọi nó là Fancy Wildcard Routes

Mình sẽ viết như vầy : 



Giải thích sơ là vầy từ cái @route mình sửa thành  @Route("/news/{slug}")   nhớ {slug} ko có $ ở đây nha

Mình muốn xem nó có chạy không thì dùng sprintf in ra cái %S này là mình gõ gì trên URL thì nó in ra như vậy nếu bạn bỏ %s route vẫn chạy nhưng không in ra gì đâu đây là kết quả.

Ghê chưa ở đây mình gõ thu-lan-2 nó in ra trên màn hình "thu-lan-2" :)

Tới đây mình mình bạn đã biết làm việc với routes trực tiếp trong controller, sài slug, lưu ý gì...
Bạn cứ thử, có trục trặc gì thì comment phía dưới mình sẽ trả lời.

Comments

Bài đăn phổ biến

Tính Bình Phương 1 Số Trong Python

Deploy website lên VPS hoặc Hosting với Gitlab CI/CD

Đổi tên "READ MORE" trong bài post

MỞ CAMERA VÀ CHỤP ẢNH BẰNG PHP