Hỏi cách Rewrite url trong Laravel

Mọi ngươi cho mình hỏi cách rewrite url trong laravel để có url thân thiện và có .html ở cuối cùng. Mình serach google mà không ra :frowning: Mình cảm ơn mọi người!

Laravel có router để làm cho địa chỉ thân thiện mà bạn :smiley: hình như bạn không hiểu về Laravel cho lắm nhĩ. Bạn có thể tham khảo tại đây https://laravel.com/docs/5.2/routing

2 Likes

mình mới tìm hiểu laravel à, nhưng router không thể làm địa chỉ thân thiện hết, ví dụ như, doamin.com/sanpham/1 thì số 1 không có ý nghĩa rõ ràng, seo không được tốt, ý mình là muốn làm sao mỗi địa chỉ đều có .html ở cuối cùng đó :frowning:

quá dễ dàng với Router, mình khuyên bạn nên học kỹ Laravel cái đã, ví dụ tớ muốn có url dạng

/sanpham/1.html
thì router chỉ việc là

Router::get('/sanpham/{id}.html', 'controller');

hoặc

/sanphan/ten-san-pham-1.html
thì

Router::get('/sanphan/{slug}-{id}.html', 'controller');
5 Likes

thank bạn, mình chưa nghĩ tới cái slug ^^, mình search google nó có package eloquent-sluggable để tạo đường dẫn thân thiện trong Laravel nên mình cũng phân vân mới hỏi cho rõ :slight_smile:

A post was split to a new topic: Thay đổi URL danh mục sản phẩm trong Laravel?

Cho mình hỏi: Router::get('/sanpham/{id}.html', 'controller');

  • Nếu mình gõ 1 link bất kì trên trình duyệt thì sẽ nhảy ra trang lỗi 404
  • Nhưng nếu mình tự ý thay đổi số {id} theo địa chỉ Route ở trên, gõ lên trình duyệt thì sẽ chạy ra 1 trang lỗi code, làm thế nào để mình có thể fix được lỗi này ạ, hoặc trỏ các lỗi code đó về trang chủ hay 01 trang bất kì do mình chỉ định.
    Cám ơn bạn!

Ở đây bạn sẽ bắt ID theo model và kèm theo ModelNotFoundException bằng cách gọi Model::findOrFail($id) hoặc có thể dùng Model Route Bind.

Lúc này bạn có thể xử lý Exception 404 mặc định của Laravel hoặc Handler nó bên trong app\Exceptions\Handler.php là xong.

1 Like

Bạn ơi, cho mình hỏi cái nữa là:

Router::get('/sanphan/{slug}-{id}.html', 'controller');

Ở bên trang front-end mình sử dung thẻ a để gọi Route như sau:
C1

<a href="{{ url('sanphan', [$fm->alias, $fm->id]) }}">

C2

<a href="sanphan/{{$fm->alias}}-{{$fm->id}}">

Mình thử với cả 2 cách trên, sử dụng dấu / ngăn cách giữa slug và id thì chạy ok, nhưng mình đổi lại thành dấu - thì không chạy đc, bên controller ko nhận được biến $id và bị lỗi ạ, mong nhận được sự giúp đỡ của bạn.

Mong nhận được sự giúp đỡ từ bạn dqh ạ! Rất cám ơn bạn :slight_smile:

Khi routes được định nghĩa có những ràng buộc nhất định, bạn cần khai báo nó kèm theo một điều kiện regx. Ví dụ ở trên:

Route::get('/products/{slug}-{id}.html', 'ProductController@show')
    ->where('slug', '[a-zA-Z0-9-_]+') // Bắt buộc phải là chuỗi a-z hoặc A-Z hoặc 0-9 hoặc - hoặc _
    ->where('id', '[0-9]+') // Bắt buộc phải là số 0-9
    ->name('products.show'); // Định danh cho route.

Lúc này ở views bạn chỉ cần gọi:

<a href="{{ route('products.name', ['example-slug', 1]) }}">This is example product</a>.
4 Likes
Router::get('/sanphan/{slug}-{id}.html', 'controller');

mình muốn bỏ sanpham đi :

Router::get('/{slug}-{id}.html', 'controller');

thì có làm dc ko

Router::get(’/{slug}-{id}.html’, ‘controller’); CHán ko ai trả lời

Mình nghĩ là không. :slight_smile:

P/s: Không biết thì sao mà trả lời. :sweat_smile:

1 Like

Mình cũng đang tính hỏi và thêm:
post/slug-{id} => /slug-{id}
product/slug-{id} =>/slug-{id}
category/slug-{id} =>/slug-{id}
Tương tự những route khác bỏ tiền tố phía trước chỉ dùng /slug-{id}
chuyên gia có thề help dùm phần này với không!
Thanks all!

Thank Bros,

Chia sẻ này chuẩn và mình có dùng thử trên https://prices.vn được nè.

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?