Вывести страницы из базы данных
Сначала надо настроить подключение к базе данных в файле .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».
Поддержать автора
Все статьи создаются и поддерживаются одним человеком,
если вам нравится контент, вы можете поддержать автора сайта