Всем привет, кто читает мою статью. Продолжаем выполнение тестового задания. Выполним пункт 2. //- Расширить модель User, чтобы она имела поля, соответствующие форме ((https://github.com/worldofswift/test-laravel-php/blob/master/index.html index.html)).// Создаем миграцию, в которой вносим изменения в таблицу «users» необходимые для расширения модели User: >php artisan make:migration ChangeUserTable --table=users В созданной миграции в методе up() опишем создаваемые поля: %%(php) class ChangeUserTable extends Migration { public function up() { Schema::table('users', function (Blueprint $table) { $table->string('nickname')->unique(); $table->string('surname')->nullable(); $table->string('avatar')->nullable(); $table->string('phone')->nullable(); $table->string('sex', 10)->default('male'); $table->boolean('show_phone')->default(false); }); } ... } %% Применяем нашу миграцию. Для работы с изображением будем использовать пакет Intervention Image. Intervention Image представляет собой библиотеку обработки изображений. Для установки в консоль выполним команду: >composer require intervention/image После чего открываем файл config/app.php и в providers добавляем: %%(php) 'providers' => [ ... Intervention\Image\ImageServiceProvider::class, ], %% В alias добавляем: %%(php) 'aliases' => [ ... 'Image' => Intervention\Image\Facades\Image::class, ], %% Все теперь класс изображения будет автоматически загружен из Laravel. //- Доработать приложение, чтобы данные с этой формы создавали объект User в базе данных на сервере. После сохранения данных на сервере происходит редирект на точно такую-же страницу, где данные уже введены и их нельзя изменить.// Определим routes, которые понадобятся для выполнения 2 этапа тестового задания: %%(php) Route::group(['middleware' => ['web']], function () { ... Route::group(['middleware' => ['auth']], function () { ... //----User profile---- Route::get('/profile', ['uses'=>'UserController@profile', 'as'=>'users.profile']); Route::get('/profile/edit', ['uses'=>'UserController@edit', 'as'=>'users.edit']); Route::post('/profile/edit', ['uses'=>'UserController@update', 'as'=>'users.update']); Route::get('/profile/password', ['uses'=>'UserController@editPassword', 'as'=>'users.edit_password']); Route::post('/profile/password', ['uses'=>'UserController@updatePassword', 'as'=>'users.update_password']); //-------------------- }); }); %% Далее создадим контроллер для работы с профилем пользователя: >php artisan make:controller UserController Контроллер должен выполнять только свои прямые обязанности, поэтому вынесем всю бизнес логику в отдельные сервис классы. Опишем методы: //1) route('users.profile') - будет отображаться вся информация о пользователе, где данные уже введены и их нельзя изменить. ((https://lh3.googleusercontent.com/p1Hb3oLYWRFySsH_g--yz75OSgb9wC-QrFoCLlMjNNmggS-b2tv6Ll6GW2n17hjLPu3HhVFrN3ZIN0GuEoh4U8mca6MBkRkn_9Dux7MJExH-iKTVcT6LSDsWQxOz7nfiJR3WuHxHNU0XOhk0_k5uS_tYK10dgwdF0aU6FFXli55hKE3wqryIsN8DmN493R4fFrJ6sbMJN1Ij_YFGeYOoK3FjsV4NfWSXlLGNHxSxXW-9qzDA9IoOy67fsQF_h8Ipa1p9uphnGvOB5_fmkOtP0sLSM_VKye2aW3OGmO6wCGtEnL_sW0BzG5AaOgC7XBHmjZbeLPNvBpmYZKecwtg-bvH2qZ-TEWZF8Gj7WrfDu6UwmoLdEehguQoZsFGvftDQnGHTHVC7I6Wbxe9lz3sGY0QikEzjEReCU6nENOVqKjQHR0x_GhW17e1oV1LtT2dEPBmHoBMn_sZEAZhIhDOE4rK0OM_S7kg1Hs3QVuh061iJUGjAxtPq9Xk44vtkQIRTZBbubqQXlrsh8X_Ux_-BLS18jig88U6_harG90gIkBc8Dgk5AcStvHvAg1vaHuYwbE2a_B62QiXHnwm8eq_SIYtP4cd3OPj2YfxArd8akSI0rDTsGnpEvylxt4k49ZfnbcSLOnOqdTrurxJCda4tXjGi=w861-h437-no Информация о пользователе))// **UserController.php** %%(php) class UserController extends SiteController { ... public function profile() { $this->title = __('site.title_profile'); $title = $this->title; $auth_user = Auth::user(); $this->content = view('auth.profile', compact('title', 'auth_user'))->render(); return $this->renderOutput(); } ... } %% //2) route('users.edit') - будет отображаться форма для редактирования данных о текущем пользователе. ((https://lh3.googleusercontent.com/kvbN406XftafUrjID4liSfvpw5KYL7QsJTL6wpQ1tFEE4gMCKQgdOhuZC-36qXiunstt5GcXZQ3llEGc_2-fgESAfqkWJaVwoMtHP9sY2iD9bka1XxcCQXW_qxLTSinisLq5jXvLqK1G1gjCmX15UFWz01UI7UefdyxcZrV1cTZKa0wM4DqXisOJKshfz4oQhP-hhP_Dxkm8UdaYsPf40jhOQ8zFafwZIW0zZMYjCX587KmWKPE1G18-4uWhv-AZ0S6VS6hbXo7Z97PumH9DfO7MwQvrCuuesIYVYCyuO9Zg2EHPwvnapgmpXCX--2BI6bmbhu3h-GW1M3W8NWJjztWIz5dVVMbIRgCWXcEUw77armTx6FFZHtXjPmTAtvFfqF8805-uO7DU7TQDGyzelPy3ArvM6NIzFhOJafa8LjQtOCiEVruKlVEcvMlCMbsENmxUZKr8qXry7pCk_Xc7QFTRunqaedAh9517N28TnhnWnLMbVlnn0eqzNfo_igbBgcir2nQr1b3wEUVckBhiTL86eYDvUJ8Nc1CEiXBCzjYVg8WxgUzcBR4seQnjPD4HI08LheG4zoYYeGMkf0lBHlTcgvzopiANgS5-EGRUoOGxfUBwyeummMIYwlYjlZV7Gm0e6ptWtHuOy8NACA67D_ic-kM_uRzBbceG_9miu6V7=w785-h595-no Форма редактирования информации о пользователе))// **UserController.php** %%(php) class UserController extends SiteController { ... public function edit() { $this->title = __('site.title_edit_profile'); $title = $this->title; $auth_user = Auth::user(); $this->content = view('auth.edit_user', compact('title', 'auth_user'))->render(); return $this->renderOutput(); } ... } %% //3) route('users.update') - обработка введенных данных о пользователи.// **UserController.php** %%(php) class UserController extends SiteController { ... public function update(UserRequest $request) { if ($this->userService->updateUser($request, Auth::user())) { return redirect()->route('users.profile')->with('status', __('site.inf_update')); } return back()->withInput()->with('status', __('site.warning')); } ... } %% **UserService.php** %%(php) class UserService { public function updateUser($request, $user) { $clearAvatar = $this->getReqClearAvatar($request); $avatarNew = $this->getReqAvatar($request); $showPhone = $this->getReqShowPhone($request); $data = $request->except(['_token','clear_avatar','show_phone']); $data['show_phone'] = $showPhone; if ($clearAvatar) { $this->clearAvatarSrv($user); $data['avatar'] = null; } else { if ($avatarNew) { $data['avatar'] = $this->addAvatarSrv($avatarNew); } } $user->fill($data); if ($user->update()) { return true; } return false; } ... } %% Ссылка на ((https://github.com/vol-mir/larablog.test Git)). Далее ((https://laravel.ru/posts/1062 Часть 4))