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');
Принцип работы маршрута для постов:
- Создаем группу маршрутов, куда передаем пространство имен
Blog
, чтобы не приходилось в блоке группы писать полную конструкциюBlog\PostController
для контроллеров. Также передаем префиксblog
для url, чтобы можно было попасть на страницу по адресуproject.loc/blog/posts
, если не указывать тоproject.loc/posts
. - В самом же блоке формируем пока один маршрут ресурс и передаем в качестве параметров имя
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])
. В таком случае можно посмотреть аттрибуты поста. Как видно, в нем содержатся поля из базы.