Ошибки, сложный материал, вопросы >
Нашли опечатку или неточность?

Выделите текст, нажмите ctrl + enter и отправьте его нам. В течение нескольких дней мы исправим ошибку или улучшим формулировку.

Что-то не получается или материал кажется сложным?

Загляните в раздел «Обсуждение»:

  • задайте вопрос нашим менторам. Вы быстрее справитесь с трудностями и прокачаете навык постановки правильных вопросов, что пригодится и в учёбе, и в работе программистом;
  • расскажите о своих впечатлениях. Если курс слишком сложный, подробный отзыв поможет нам сделать его лучше;
  • изучите вопросы других учеников и ответы на них. Это база знаний, которой можно и нужно пользоваться.
Об обучении на Хекслете

Просмотр (CRUD)

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

<?php

# id – параметр, который зависит от конкретной статьи
# Фигурные скобки нужны для описания параметров маршрута
Route::get('/articles/{id}', 'ArticleController@show')
  ->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. Сделайте имя статьи в списке статей ссылкой на конкретную статью.

<span class="translation_missing" title="translation missing: ru.web.courses.lessons.mentors.mentor_avatars">Mentor Avatars</span>

Остались вопросы? Задайте их в разделе «Обсуждение»

Вам ответят менторы из команды Хекслета или другие студенты.

Для полного доступа к курсу нужна профессиональная подписка

Профессиональная подписка откроет полный доступ ко всем курсам, упражнениям и урокам Хекслета, даст возможность обращаться за помощью к менторам и пожизненный доступ к теории пройденных уроков. Подписку можно отменить в любой момент.

Получить доступ
115
курсов
892
упражнения
2241
час теории
3196
тестов

Зарегистрироваться

или войти в аккаунт

Курсы программирования для новичков и опытных разработчиков. Начните обучение бесплатно.

  • 115 курсов, 2000+ часов теории
  • 800 практических заданий в браузере
  • 250 000 студентов

Нажимая кнопку «Зарегистрироваться», вы даёте своё согласие на обработку персональных данных в соответствии с «Политикой конфиденциальности» и соглашаетесь с «Условиями оказания услуг». Защита от спама reCAPTCHA «Конфиденциальность» и «Условия использования».

Наши выпускники работают в компаниях:

Логотип компании Альфа Банк
Логотип компании Rambler
Логотип компании Bookmate
Логотип компании Botmother

Есть вопрос или хотите участвовать в обсуждении?

Зарегистрируйтесь или войдите в свой аккаунт

Нажимая кнопку «Зарегистрироваться», вы даёте своё согласие на обработку персональных данных в соответствии с «Политикой конфиденциальности» и соглашаетесь с «Условиями оказания услуг». Защита от спама reCAPTCHA «Конфиденциальность» и «Условия использования».