Обновление пользовательских данных в приложении Laravel по умолчанию - PullRequest
0 голосов
/ 27 июня 2018

Я только начал использовать Laravel, и я не могу разобраться с этой проблемой ... Я надеюсь, что более опытные люди здесь смогут обнаружить ошибку, которую я делаю.

Я настроил новое приложение laravel и выполнил

php artisan make:auth

Следуя инструкциям https://laravel.com/docs/5.6/authentication#authentication-quickstart.

Это все маршруты в routes/web.php:

Route::get('/', 'HomeController@show');
Route::get('/user', ['as'=>"user", 'uses'=>'UserController@show']);
Route::post('/user/update', ['as' => 'user.update', 'uses' => 'UserController@update']);

Auth::routes();

Route::get('/home', 'HomeController@index')->name('home');

Это мой UserController.php:

<?php

namespace App\Http\Controllers;
use Auth;
use Illuminate\Http\Request;
use App\User;

class UserController extends Controller
{
  public function show() {

    return view('user')->withUser(Auth::user());
  }
  public function update(Request $request)
    {
        $user = Auth::user();
        $user->name=$request->input('name');
        $user->email=$request->input('email');

        $user->save();
        return Redirect::route('user');
    }
}

А это форма в моем user.blade.php:

{!! Form::model($user, ['route' => ['user.update'], 'method' => 'POST']) !!}
<tr><th colspan=2>My data</th></tr>
  <tr>
      <td>Name</td>
      <td>{!! Form::text('name', null, ['class' => 'form-control']) !!}</td>
  </tr>
  <tr>
      <td>E-mail address</td>
      <td>{!! Form::text('email', null, ['class' => 'form-control']) !!}</td>
  </tr>
  <tr><td colspan=2>{!! Form::submit('Submit', ['class' => 'btn btn-primary']) !!}</td></tr>
{!! Form::close() !!}

Ничего не происходит, когда я нажимаю кнопку отправки в форме ... Данные в базе данных не изменяются.

Обновления :

  • Контроллер не срабатывает. Я добавил dd() в функцию update(), и это ничего не дает.

  • Я попробовал composer du, очистив кеш браузера и попробовал другой браузер. Я обновил миграцию, используя php artisan migrate:fresh, и снова зарегистрировался. Та же проблема до сих пор. Отладка установлена ​​в значение true, я получаю другие ошибки, если я что-то изменить. Я добавил проект в репозиторий github: github.com / EsthervdS / LaravelTest

  • Я переустановил целый новый проект, и проблема возникла снова.

Ответы [ 3 ]

0 голосов
/ 27 июня 2018

я клонировал твой код, он работает на моей стороне. попробуйте composer du или очистите кеш браузера. или дайте больше информации.

0 голосов
/ 28 июня 2018

после просмотра вашего user.blade.php обнаружил, что вы используете форму внутри таблицы, и это то, что мешает отправке формы. Также я нашел больше ошибок тоже. так что я улучшил его.

Найдены ошибки:

  • Форма отправки внутри таблицы
  • дубликаты названий маршрутов
  • нет авторизации промежуточного программного обеспечения для пользовательских маршрутов
  • нет подтверждения данных
  • с использованием неправильных операторов использования

user.blade.php

@extends('layouts.app')

@section('content')
    <div class="container">
        <div class="row justify-content-center">
            <div class="col-md-8">
                <div class="card">
                    <div class="card-header">Profile</div>
                    <div class="card-body">

                        @if($errors)
                            @foreach($errors->all() as $error)
                                <div class="alert alert-danger" role="alert">
                                    {{ $error }}
                                </div>
                            @endforeach
                        @endif

                        {!! Form::model($user, ['route' => ['user.update'], 'method' => 'POST']) !!}
                            <div class="form-group row">
                                <label for="name" class="col-sm-2 col-form-label">Name</label>
                                <div class="col-sm-10">
                                    {!! Form::text('name', null, ['class' => 'form-control', 'id' => 'name']) !!}
                                </div>
                            </div>

                            <div class="form-group row">
                                <label for="email" class="col-sm-2 col-form-label">Email</label>
                                <div class="col-sm-10">
                                    {!! Form::text('email', null, ['class' => 'form-control', 'id' => 'email']) !!}
                                </div>
                            </div>

                            <div class="form-group">
                                {!! Form::submit('Submit', ['class' => 'btn btn-primary']) !!}
                            </div>

                        {!! Form::close() !!}
                    </div>
                </div>
            </div>
        </div>
    </div>
@endsection

Я не большой поклонник коллектива Laravel

UserController.php

<?php

namespace App\Http\Controllers;

use App\User;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Validator;
use Illuminate\Validation\Rule;

class UserController extends Controller
{
    /**
     * Create a new controller instance.
     *
     * @return void
     */
    public function __construct()
    {
        $this->middleware('auth');
    }

    /**
     * @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View
     */
    public function show()
    {
        return view('user', ['user' => Auth::user()]);
    }

    /**
     * @param Request $request
     * @return
     */
    public function update(Request $request)
    {
        // Get current user
        $userId = Auth::id();
        $user = User::findOrFail($userId);

        // Validate the data submitted by user
        $validator = Validator::make($request->all(), [
            'name' => 'required|max:255',
            'email' => 'required|email|max:225|'. Rule::unique('users')->ignore($user->id),
        ]);

        // if fails redirects back with errors
        if ($validator->fails()) {
            return redirect()->back()
                ->withErrors($validator)
                ->withInput();
        }

        // Fill user model
        $user->fill([
            'name' => $request->name,
            'email' => $request->email
        ]);

        // Save user to database
        $user->save();

        // Redirect to route
        return redirect()->route('user');
    }
}

web.php

<?php

// Auth routes
Auth::routes();

// User account routes
Route::get('user', 'UserController@show')->name('user');
Route::post('user/update', 'UserController@update')->name('user.update');

// other routes
Route::get('/', function () {
    return view('welcome');
})->name('welcome');

Route::get('/home', 'HomeController@index')->name('home');

дополнительный наконечник я рекомендую использовать политики авторизации laravel . и если вы также хотите сделать приветственный маршрут доступным только для аутентификации пользователей, просто добавьте промежуточное программное обеспечение авторизации в приветственный маршрут - laravel docs

0 голосов
/ 27 июня 2018

Измените следующую строку:

$user = Auth::user();

до

$userDetails = Auth::user();  // To get the logged-in user details
$user = User::find($userDetails ->id);  // Find the user using model and hold its reference
$user->name=$request->input('name');
$user->email=$request->input('email');

$user->save();  // Update the data

Auth::user(); содержит вошедшие в систему пользовательские данные, то есть данные, которые мы в основном помещаем в сеанс, но для обновления пользовательских данных необходимо использовать экземпляр модели или построитель запросов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...