我刚刚开始使用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
更新了迁移,然后再次注册。同样的问题。 debug设置为true,如果更改,则会收到其他错误。我将项目添加到github仓库中:github.com/EsthervdS/LaravelTest
我重新安装了一个新项目,该问题再次出现。
答案 0 :(得分:1)
更改以下行:
$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();
中包含已登录的用户数据,即我们大部分放置在会话中的数据,但是要更新用户数据,您必须使用模型实例或查询构建器。
答案 1 :(得分:1)
发现您正在表中使用表单,这就是阻止表单提交的原因。我也发现了更多的错误。所以我改进了。
发现错误:
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 authorization policies。 并且如果您还希望仅将欢迎路由用于身份验证用户,则只需将身份验证中间件添加到欢迎路由-laravel docs
答案 2 :(得分:0)
我克隆了您的代码,它正在我的身边工作。 请尝试作曲家du或清除浏览器缓存。或提供更多信息。