Вывести страницы из базы данных

Сначала надо настроить подключение к базе данных в файле .env.

Затем запустить команду ниже, которая создаст файл app/Models/News.php, через которую можно будет делать запросы в базу данных.

php artisan make:model News -m

Параметр -m означает, что надо создать миграцию (SQL-код) для создания таблицы news. Запустить выполнение SQL-кода можно через следующую команду:

php artisan migrate

В результате в базе данных будет создана таблица «news».

До версии Laravel 8, файлы модели находились в папке app/. 

Вывод страниц

Надо запустить команду ниже, которая создаст файл app/Http/Controllers/NewsController.php.

php artisan make:controller NewsController --model=News

Параметр --model подключает файл модели, через которую происходит запросы в базу данных.

В созданном файле в двух методах надо добавить код выборки страниц.

# app/Http/Controllers/NewsController.php

class NewsController extends Controller
{

  // страница «news/»
  public function index(): View
  {
    return view('news.index', ['news' => News::all()]);
  }

  // страница «news/show/2»
  public function show($id): View
  {
    return view('news.show', ['news' => News::findOrFail($id)]);
  }
}

В файле routes/web.php надо указать страницы, на которых будет выполняться код выше.

# routes/web.php (Laravel 8 и выше)
use App\Http\Controllers\NewsController;

Route::get('news/',     [NewsController::class, 'index']);
Route::get('news/{id}', [NewsController::class, 'show']);

# routes/web.php (Laravel 7)
Route::get('news/',     'NewsController@index');
Route::get('news/{id}', 'NewsController@show');

Для страницы «news/{id}» можно указать, что в параметре «id» могут быть только числа:

# routes/web.php

// 1-ый вариант
Route::get('news/{id}', [NewsController::class, 'show'])->whereNumber('id');

// 2-ой вариант (рег. выражения)
Route::get('news/{id}', [NewsController::class, 'show'])->where('id', '\d+');

В методе where() указано регулярное выражение \d, которая означает, что в поле «id» можно использовать только числа.

Если надо указать, что страница доступна через GET и POST запрос, то можно использовать Route::match().

// Открывать сраницу через GET и POST запрос
Route::match(['get', 'post'], 'news/edit/{id}', [NewsController::class, 'edit']);

В файле resources/views/news/index.blade.php указан код вывода статей.

@foreach ($news as $new)
    <a href="/news/show/{{ $new->id }}">{{ $new->title }}</a>
@endforeach

В файле resources/views/news/show.blade.php указан код вывода страницы.

<h1>{{ $news->title }}</h1>

{!! $news->content !!}

Переменные внутри фигурных скобок {{ }} выводятся через функцию htmlspecialchars(), т.е. HTML будет экранироваться. Чтобы выполнять HTML, переменные выводятся между {!! !!}.

Если на странице надо просто вывести фигурные скобки, например, {{ $var }}, то используется код @{{ $var }}.

Laravel работает через шаблонизатор Blade, поэтому файлы шаблонов заканчиваются на «blade.php».