5. Вывод всех статей

02 Июня 2020 22:28 (Редактировано: 03 Июня 2020 22:56)

На данный момент, у нас настроен контроллер постов PostController, который передает в представление массив объектов статей. Также у нас есть пример шаблона index.blade.php, в котором в виде таблицы будут выведены статьи.

Теперь заходим в маршрут web.php. Добавляем туда следующую конструкцию:

//Это маршрут из коробки для главной страницы
Route::get('/', function () {
    return view('welcome');
});

//Это новый маршрут для постов.
Route::group(['namespace' => 'Blog', 'prefix' => 'blog'], function() {
    Route::resource('posts', 'PostController')->names('blog.posts');
});

//Это был тестовый маршрут для RestTestController, где выводилась dd();
Route::resource('rest', 'RestTestController')->names('restTest');

Принцип работы маршрута для постов:

  1. Создаем группу маршрутов, куда передаем пространство имен Blog, чтобы не приходилось в блоке группы писать полную конструкцию Blog\PostController для контроллеров. Также передаем префикс blog для url, чтобы можно было попасть на страницу по адресу project.loc/blog/posts, если не указывать то project.loc/posts
  2. В самом же блоке формируем пока один маршрут ресурс и передаем в качестве параметров имя posts для url и отвечающий за это контроллер PostController (без указания пространства имен, как писалось в первом пункте), а именоваться эти ресрусы (посты) будут blog.posts.

Открываем страницу project.loc/blog/posts и должны увидеть следующее:

В дебагбаре можно увидеть все параметры, которые используются при формировании страницы: uri, namespace, file и прочие.

Напоминаю, что можно проверять маршруты, в которых указана полезная по ним инфа:

php artisan route:list

Структура ресурсов

Пробуем смотреть структуру ресурсов из базы с помощью функции dd();. Пишем в PostController.php такую конструкцию dd($items);. Таким образом, основной код будет выглядеть так:

<?php

namespace App\Http\Controllers\Blog;

use App\Models\BlogPost;
use Illuminate\Http\Request;

class PostController extends BaseController
{
    /**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function index()
    {
        $items = BlogPost::all(); //Так делать не нужно!!! Так как это создаст много объектов что агрузит систему.
        //Чисто для тестов можно

        dd($items);

        return view('blog.posts.index', compact('items'));
    }
...

На выходе получим коллекцию(немаловажный инструмент в работе с laravel, о нем позже) объектов постов. Развернув каждый из них можно посмотреть их структуру.

Пробуем вывести первый пост с помощью такой вот конструкции dd($items->first()); или вот так dd($items[0]).  В таком случае можно посмотреть аттрибуты поста. Как видно, в нем содержатся поля из базы.