Если видео недоступно для просмотра, попробуйте выключить блокировщик рекламы.

После того как список готов, можно переходить к просмотру каждого элемента. Как обычно начинаем с роутинга:

<?php

# id – параметр, который зависит от конкретной статьи
# Фигурные скобки нужны для описания параметров маршрута
Route::get('/articles/{id}', '[email protected]')
  ->name('articles.show');

В этом месте у маршрута появляется динамическая часть, идентификатор статьи. Подобный маршрут обрабатывает все страницы, имеющие вид /articles/<идентификатор статьи>, пара примеров:

/articles/1
/articles/100
/articles/what-is-js

Этот идентификатор используется в обработчике, для выборки из базы нужной статьи.

<?php

namespace App\Http\Controllers;

use App\Article;

class ArticleController extends Controller
{
    // ... другие обработчики

    public function show($id)
    {
        $article = Article::findOrFail($id);
        return view('article.show', compact('article'));
    }
}

Параметр id определенный в маршруте, приходит в обработчик как аргумент. Имя этого аргумента может быть любым, для Laravel имеет значение только порядок. Если параметров в маршруте больше одного, то они передадутся в обработчик в том же порядке, в котором они определены в маршруте:

<?php

Route::get('/articles/{commentId}/comments/{id}', function ($commentId, $id) {
    // ...
});

Затем, происходит выборка статьи из базы данных. Для нее используется метод findOrFail, а не find. Почему? Дело в том, что, в большинстве случаев, просмотр конкретной сущности должен вернуть ошибку 404 если самой сущности не существует. Метод find никак не помогает обработать эту ситуацию, он возвращает null. Дальше программисту придется делать проверку на существование и самому формировать правильный HTTP ответ. Но, так как, задача очень частая, то разработчики Laravel решили ее внутри фреймворка. С одной стороны они добавили метод findOrFail, который выбрасывает исключение в случае отсутствия записи. С другой, добавили специальную обработку данных исключений на уровне обработки запросов.

И последний шаг, передача статьи в шаблон. Здесь ничего нового.

Шаблон:

@extends('layouts.app')

@section('content')
    <h1>{{$article->name}}</h1>
    <div>{{$article->body}}</div>
@endsection

Самостоятельная работа

  1. Выполните все шаги из теории.
  2. Убедитесь что при запросе страницы /articles/<идентификатор> у вас выводится конкретная статья.
  3. Сделайте имя статьи в списке статей ссылкой на конкретную статью.
Мы учим программированию с нуля до стажировки и работы. Попробуйте наш бесплатный курс «Введение в программирование» или полные программы обучения по Node, PHP, Python и Java.

Хекслет

Подробнее о том, почему наше обучение работает →