Содержание
скрыть
Установим дебагбар:
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