Laravel, правильно ли так выводить страницы?
роут:
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;
use DB;
class PageController extends Controller
{
protected $category;
protected $page;
public function __construct()
{
// Коллекция всех категорий
$this->category = Category::all();
// Коллекция всех страниц
$this->page = Page::all();
}
public function page($url) {
$page_info = DB::select("select * from pages where url ='". $url ."'");
$title = $page_info[0]->title;
$description = $page_info[0]->description;
$catalog = $this->category;
$page = $this->page;
return view('page', ['page' => $page, 'catalog' => $catalog, 'title' => $title, 'description' => $description]);
}
}
вьюшка:
@extends('layout')
@section('content')
<h1>{{$title}}</h1>
<p>{{$description}}</p>
@endsection
Подскажите плиз, такой способ рабочий, НО что-то подсказывает что так делать нельзя (не профессионально). Может подскажите как лучше?
Ответы (1 шт):
Автор решения: E_K
→ Ссылка
Используйте Eloquent или возможности Сервис контейнера, это куда проще и удобней.
Если используете Laravel 7 можно сделать так.
//Route.php Route::get('page/{page:slug}', 'PageController@show'); |------------------------------------------------------------| //PageController.php public function show(Page $page) { return view('page', compact('page')); } |------------------------------------------------------------| //page.blade.php @section('content') <h1>{{$page->title}}</h1> <p>{{$page->description}}</p> @endsection- Давайте осмысленные и запоминающиеся имена переменным и методам, у вас свойство
$pageвместо 1 страницы содержит коллекцию. - Список всех страниц и категорий можно вынести View Composers или попробовать использовать новые компоненты
p.s. Посмотрите курсы от Laracast по Larvael.