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 Mình cảm ơn mọi người!
Hỏi cách Rewrite url trong Laravel
Laravel có router để làm cho địa chỉ thân thiện mà bạn 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
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 đó
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');
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õ
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.
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
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>.
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.
P/s: Không biết thì sao mà trả lời.
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!