Содержание
скрыть
Установим дебагбар:
php composer.phar require barryvdh/laravel-debugbar
В app/Http/Controllers/Admin/PostController.php изменим:
$posts = Post::with('tags', 'category')->paginate(10);
чтобы сразу вытаскивать тэги и категории. И того мы уменьшили количество запросов в БД с 22 до 4.
Регистрация
Пути
Создадим пути в файле routes/web.php :
Route::get('/register', 'UserController@create')->name('register.create');
Route::post('/register', 'UserController@store')->name('register.store');
Контроллер
Создадим контроллер:
php artisan make:controller UserController
В нем два экшена:
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use App\Models\User;
class UserController extends Controller
{
public function create() {
return view('user.create');
}
public function store(Request $request) {
$request->validate([
'name' => 'required',
'email' => 'required|unique:users|email',
'password' => 'required|confirmed',
]);
$user = User::create([
'name' => $request->name,
'email' => $request->email,
//'password' => Hash::make($request->password),
'password' => bcrypt($request->password)
]);
session()->flash('success', 'Регистрация пройдена!');
Auth::login($user);
return redirect()->home();
}
}
Вью
Создадим файл resources/views/user/create.blade.php с содержимым:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Регистрация</title>
<!-- Google Font: Source Sans Pro -->
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Source+Sans+Pro:300,400,400i,700&display=fallback">
<link rel="stylesheet" href="{{ asset('assets/admin/admin.css') }}">
</head>
<body class="hold-transition register-page">
<div class="register-box">
<div class="card card-outline card-primary">
<div class="card-header text-center">
<h1>Регистрация</h1>
</div>
@if ($errors->any())
<div class="alert alert-danger">
<ul class="list-unstyled">
@foreach ($errors->all() as $error)
<li>{{ $error }}</li>
@endforeach
</ul>
</div>
@endif
<div class="card-body">
<p class="login-box-msg">Регистрация нового пользователя</p>
<form action="{{ route('register.store') }}" method="post">
@csrf
<div class="input-group mb-3">
<input type="text" name="name" value="{{ old('name') }}" class="form-control" placeholder="Полное имя">
<div class="input-group-append">
<div class="input-group-text">
<span class="fas fa-user"></span>
</div>
</div>
</div>
<div class="input-group mb-3">
<input type="email" name="email" value="{{ old('email') }}" class="form-control" placeholder="Email">
<div class="input-group-append">
<div class="input-group-text">
<span class="fas fa-envelope"></span>
</div>
</div>
</div>
<div class="input-group mb-3">
<input type="password" name="password" class="form-control" placeholder="Password">
<div class="input-group-append">
<div class="input-group-text">
<span class="fas fa-lock"></span>
</div>
</div>
</div>
<div class="input-group mb-3">
<input type="password" name="password_confirmation" class="form-control" placeholder="Retype password">
<div class="input-group-append">
<div class="input-group-text">
<span class="fas fa-lock"></span>
</div>
</div>
</div>
<div class="row">
<div class="col-5 offset-7">
<button type="submit" class="btn btn-primary btn-block">Регистрация</button>
</div>
<!-- /.col -->
</div>
</form>
<a href="#" class="text-center">Войти (Я уже зарегистрирован)</a>
</div>
<!-- /.form-box -->
</div><!-- /.card -->
</div>
<!-- /.register-box -->
<script src="{{ asset('assets/admin/admin.js') }}"></script>
</body>
</html>
Изменим страницу resources/views/welcome.blade.php, добавим вывод ошибок:
@if (session()->has('success'))
<div class="alert alert-success">
<ul class="list-unstyled">
{{ session('success') }}
</ul>
</div>
@endif
Миграция
Создадим миграцию для добавления поля is_admin в таблицу users
php artisan make:migration alter_table_users_add_isadmin --table=users
Создастся файл database/migrations/2021_03_04_135356_alter_table_users_add_isadmin.php. Изменим его содержимое на:
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class AlterTableUsersAddIsadmin extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::table('users', function (Blueprint $table) {
$table->tinyInteger('is_admin')->default(0);
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::table('users', function (Blueprint $table) {
$table->dropColumn('is_admin');
});
}
}
И выполним миграцию:
php artisan migrate