Не передает url в laravel
Подскажите пожалуйста, в базе есть таблица pages, есть модель Page. В этой таблице есть поле url, этот url я передаю из роута в контроллер, с контроллера во view. Но почему то ошибка 404, если передавать id то все ок. Вот роут:
Route::get('/page/{url}', 'PageController@page')->where('url', '[a-z]');
Контроллер:
<?php
namespace App\Http\Controllers;
use App\Category;
use App\Page;
use Illuminate\Http\Request;
class PageController extends Controller
{
protected $catalog;
protected $page;
public function __construct()
{
// Коллекция всех категорий
$this->category = Category::all();
// Коллекция всех страниц
$this->page = Page::all();
}
public function page($url) {
$page_show = $this->page->find($url);
$catalog = $this->category;
$page = $this->page;
$title = $page_show->title;
echo $title;
return view('page', ['catalog' => $catalog, 'page_show' => $page_show, 'page' => $page, 'title' => $title]);
}
}
Укажите на ошибку, заранее спасибо!
Ответы (1 шт):
Автор решения: Alexandr Revnuk
→ Ссылка
Чтобы получать модель по url - нужно сначала в ней прописать метод:
public function getRouteKeyName()
{
return 'url';
}
Теперь везде можно будет только достать по url. По id - не сработает. Тут осторожно!
Дальше в роуте - [a-z]+ - таким образом url будет только буквенной.
Route::get('/page/{url}', 'PageController@page')->where('url', '[a-z]+');
А теперь контроллер:
<?php
namespace App\Http\Controllers;
use App\Category;
use App\Page;
use Illuminate\Http\Request;
class PageController extends Controller
{
protected $catalog;
protected $page;
public function __construct()
{
// Коллекция всех категорий
$this->category = Category::all();
// Коллекция всех страниц
$this->page = Page::all();
}
public function page(Page $singlePage) {
$page_show = $singlePage;
$catalog = $this->category;
$page = $this->page;
$title = $page_show->title;
echo $title;
return view('page', ['catalog' => $catalog, 'page_show' => $page_show, 'page' => $page, 'title' => $title]);
}
}