Статья охватывает первоначальную установку и настройку Laravel 5+, создание маршрутов и контроллеров, вывод статей из базы данных, открытие статей по ЧПУ и добавление данных в БД.
Требования: PHP 5.6+, MySQL, Composer и терминал.
Установка
Установка Laravel через Composer:
composer global require "laravel/installer"
Создание нового проекта:
laravel new blog
Альтернативный способ:
composer create-project --prefer-dist laravel/laravel blog
Переход в директорию проекта, генерация ключа и запуск встроенного сервера:
cd blog php artisan key:generate php artisan serve
Приложение доступно по адресу: http://localhost:8000/
Механизм авторизации
Настройте файл .env с параметрами базы данных, затем установите механизм авторизации и запустите миграции:
php artisan make:auth php artisan migrate
Установка дебагера
composer require barryvdh/laravel-debugbar
Добавьте провайдер в /config/app.php и опубликуйте конфиг:
php artisan vendor:publish --provider="Barryvdh\\Debugbar\\ServiceProvider"
Структура приложения (MVC)
Laravel следует паттерну MVC. Основные директории:
- Контроллеры:
app\http\Controllers - Модели: папка
app - Представления:
resources\views - Маршруты:
routes\web.php
Роутер
Базовый пример маршрута:
Route::get('/', function () {
return view('welcome');
});
Маршрут с параметром:
Route::get('/about', function () {
return 'Hey this about page';
});
Контроллер
Создание контроллера:
php artisan make:controller StaticController
Маршрут с вызовом контроллера:
Route::get('/about', 'StaticController@about');
Метод контроллера с возвратом представления и передачей данных:
public function about(){
$myData = "hola! i'm data in passed variable";
return view('about')->with('myData', $myData);
}
Модель
Создание модели:
php artisan make:model Post
Получение всех записей и передача в представление:
public function blog(){
$posts = Post::select(['id','title','excerpt','slug'])->get();
return view('blog')->with('posts', $posts);
}
Представление (Blade)
Базовая структура шаблона:
@extends('layouts.app')
@section('content')
Blog
@endsection
Вывод данных в цикле (с экранированием и без):
@foreach($posts as $post)
{{ $post->title }}
{!! $post->body !!}
@endforeach
Отдельные страницы (ЧПУ)
Маршрут с параметром slug:
Route::get('/blog/{url}', 'StaticController@blogPost')->name('postShow');
Метод контроллера с поиском по slug и получением последних статей:
public function blogPost($url){
$posts = Post::limit(3)
->orderBy('id', 'desc')
->get();
$post = Post::all()->where('slug', $url)->first();
return view('blogPost')->with('post', $post)
->with('posts', $posts);
}
Ссылка в представлении:
More
Создание материалов
Маршруты для добавления записей (GET для формы, POST для сохранения):
Route::get('/admin/add/blog', 'StaticController@blogAdd');
Route::post('/admin/add/blog', 'StaticController@blogStore')->name('blogStore');
HTML-форма с CSRF-токеном:
Валидация и сохранение в базу данных
Модель с указанием разрешённых полей и метод сохранения с валидацией:
class Post extends Model
{
protected $fillable = ['title', 'body', 'slug'];
}
public function blogStore(Request $request){
$this->validate($request, [
'title' => 'required|max:255',
'slug' => 'required|unique:posts',
]);
$data = $request->all();
$post = new Post;
$post->fill($data);
$post->save();
return redirect('/');
}
Вывод ошибок валидации в шаблоне:
@if(count($errors) > 0)
-
@foreach($errors->all() as $error)
- {{ $error }} @endforeach