В этой части мы добавим в модуль профиля функцию редактирования имени и электронной почты пользователя Auth.
Оглавление
Создать маршруты
Откройте свой терминал и введите следующие команды для создания маршрутов profile.php.
# enter to folder project cd laravel-scaffold # create routes file mkdir routes/profile cd routes/profile touch profile.php
В файл profile.php напишите следующий код
<?php Route::middleware('auth')->group(function () { Route::group(['namespace' => 'Profile'], function() { // view Route::view('/profile', 'profile.profile'); // api Route::group(['prefix' => 'api/profile'], function() { Route::get('/getAuthUser', 'ProfileController@getAuthUser'); Route::put('/updateAuthUser', 'ProfileController@updateAuthUser'); }); }); });
В файл routes / web.php напишите следующую строку кода для вызова profile.php routes
... Route::get('/dashboard', 'HomeController@index')->name('home'); require __DIR__ . '/profile/profile.php';
Создать контроллер
В терминале введите следующую команду для создания контроллера ProfileController.php.
php artisan make:controller Profile/ProfileController
В файл ProfileController.php напишите следующий код
<?php namespace App\Http\Controllers\Profile; use Illuminate\Http\Request; use App\Http\Controllers\Controller; use Illuminate\Support\Facades\Auth; use App\User; class ProfileController extends Controller { public function getAuthUser () { return Auth::user(); } public function updateAuthUser (Request $request) { $this->validate($request, [ 'name' => 'required|string', 'email' => 'required|email|unique:users,email,'.Auth::id() ]); $user = User::find(Auth::id()); $user->name = $request->name; $user->email = $request->email; $user->save(); return $user; } }
Создать представление
В терминале введите следующую команду для создания представления profile.blade.php.
# create view mkdir resources/views/profile cd resources/views/profile touch profile.blade.php
В файл profile.blade.php напишите следующий код
@extends('layouts.app') @section('header') @include('layouts.header') @endsection @section('sidebar') @include('layouts.sidebar') @endsection @section('content') <div class="py-4"> <div class="row justify-content-center"> <div class="col-md-12"> <profile></profile> </div> </div> </div> @endsection
Создать компонент Vuejs
В вашем терминале введите следующую команду для создания компонента Profile.vue.
# create component mkdir resources/js/components/profile cd resources/js/components/profile touch Profile.vue
В файл Profile.vue напишите следующий код
<template> <div class="card"> <div class="card-header"> <i class="fas fa-pencil-alt"></i> Edit Profile </div> <div class="card-body"> <form class="form-horizontal"> <div class="form-group row"> <label class="col-md-3">Full Name</label> <div class="col-md-9"> <input class="form-control" :class="{'is-invalid': errors.name}" type="text" v-model="user.name"> <span class="help-block">Enter your name, so people you know can recognize you.</span> <div class="invalid-feedback" v-if="errors.name">{{errors.name[0]}}</div> </div> </div> <div class="form-group row"> <label class="col-md-3">Email</label> <div class="col-md-9"> <input class="form-control" :class="{'is-invalid': errors.email}" type="email" v-model="user.email"> <span class="help-block">This email will be displayed on your public profile.</span> <div class="invalid-feedback" v-if="errors.email">{{errors.email[0]}}</div> </div> </div> </form> </div> <div class="card-footer"> <div class="form-group row"> <div class="col-md-9 offset-md-3"> <button class="btn btn-primary" type="button" :disabled="submiting" @click="updateAuthUser" > <i class="fas fa-spinner fa-spin" v-if="submiting"></i> Save </button> </div> </div> </div> </div> </template> <script> export default { data () { return { user: {}, errors: {}, submiting: false } }, mounted() { this.getAuthUser() }, methods: { getAuthUser () { axios.get(`/api/profile/getAuthUser`) .then(response => { this.user = response.data }) }, updateAuthUser () { this.submiting = true axios.put(`/api/profile/updateAuthUser`, this.user) .then(response => { this.errors = {} this.submiting = false this.$toasted.global.error('Profile updated!'); }) .catch(error => { this.errors = error.response.data.errors this.submiting = false }) } } } </script>
В файл resources / js / app.js напишите следующую строку кода для вызова компонента Profile.vue.
... window.Vue = require('vue'); Vue.component('profile', require('./components/profile/Profile.vue')); const app = new Vue({ el: '#app' });
Для отправки уведомлений мы используем плагин Vue Toasted Vuejs.
Установить с помощью npm
# install via npm npm install vue-toasted --save
Зарегистрируйте глобальный плагин в файле resources / js / app.js
... window.Vue = require('vue'); import Toasted from 'vue-toasted'; Vue.use(Toasted) Vue.toasted.register('error', message => message, { position : 'bottom-center', duration : 1000 }) Vue.component('profile', require('./components/profile/Profile.vue')); ...
Наконец, компилируем активы (Laravel Mix) со следующими командами:
npm run dev // or npm run watch
Теперь у нас есть следующий экран при вводе маршрута http: // localhost: 3000 / profile в браузере.
Спасибо за прочтение. Если тебе это нравится ... Дай мне аплодисменты и следуй за мной !!
Что дальше
Часть 1. Аутентификация
Часть 2. Добавить основной шаблон пользовательского интерфейса
Часть 3. Профиль
- 3.1 Редактировать профиль
- 3.2 Сменить пароль
- 3.3 Создать и загрузить аватар
If ($ аплодисменты ≥ 1000) {
Часть 4. Пользователи → Скоро в продаже
Часть 5. Роли → Скоро в продаже
}