2015-01-08 2 views
5

Я определил маршрут в Laravel 4, который выглядит так:показать имя вместо ID в URL с помощью Laravel маршрутизации

Route::get('/books/{id}', '[email protected]'); 

в URL Это показывает/книги/1, например, теперь я спрашивая, есть ли способ, чтобы показать название книги, но вместо этого, чтобы сохранить и идентификатор в качестве параметра в маршруте для целей SEO

заранее спасибо

ответ

0

Вы можете добавить столько параметров в URL, как вы как, например:

Route::get('/books/{id}/{name}', '[email protected]'); 

Теперь, когда вы хотите создать URL этой страницы вы можете сделать следующее:

URL::action('[email protected]', ['id' => 1, 'name' => 'My awesome book']); 

Update:

Если вы уверены, что никогда не будет две книги с то же название, вы можете просто использовать имя книги в URL-адресе. Вам просто нужно сделать это:

Route::get('/books/{name}', '[email protected]'); 

В вашей showBook функции вам нужно, чтобы получить книгу из базы данных, используя name вместо id. Я настоятельно рекомендую использовать как идентификатор, так и имя, потому что иначе вы можете попасть в неприятности, потому что я не думаю, что имя книги всегда будет уникальным.

+0

Я думаю, вы поняли, что я хочу сделать именно .. В url bar, я не хочу иметь URL-адрес, который выглядит/книги/1 скорее/book/name-of-book. Отвечает ли ваш ответ на эту работу? – arakibi

+0

Я отредактировал свой ответ для вас :) – Jerodev

+0

Я действительно предпочитаю не делать этого таким образом, я хотел бы придерживаться идентификатора в качестве параметра, чтобы найти книгу из базы данных. но покажите его имя в строке url – arakibi

0

Вы также могли бы сделать что-то вроде этого:

Route::get('books/{name}', function($name){ 
    $url = explode("-", $name); 
    $id = $url[0]; 
    return "Book #$id"; 
}); 

Таким образом, вы можете получить книгу по идентификатору, если вы передаете URL как: http://website.url/books/1-book-name

Смежные вопросы