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
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.
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.