【问题标题】:Laravel 5.2 form validation request not working properlyLaravel 5.2 表单验证请求无法正常工作
【发布时间】:2016-09-06 22:12:57
【问题描述】:

当我点击提交按钮时,什么都没有发生,它只是刷新页面。

这是我的代码:

app/Http/routes.php

Route::group(['middleware' => ['web']], function () {
    Route::get('profile/edit', 'UserController@editProfile');
    Route::post('update_name', 'UserController@updateName');
});

app/Http/Request/UpdateNameRequest.php

<?php

namespace App\Http\Requests;

use App\Http\Requests\Request;
use Illuminate\Support\Facades\Auth;

class UpdateNameRequest extends Request
{
    /**
     * Determine if the user is authorized to make this request.
     *
     * @return bool
     */
    public function authorize()
    {
        return Auth::check();
    }

    /**
     * Get the validation rules that apply to the request.
     *
     * @return array
     */
    public function rules()
    {
        return [
            'first_name' => 'required|min:2|alpha',
            'last_name' => 'required|min:2|alpha',
        ];
    }
}

app/Http/Controllers/UserController.php

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use App\Http\Requests;
use App\User;

class UserController extends Controller
{
    public function __construct() {
        $this->middleware('auth');
    }

    public function editProfile() {
        if (Auth::user()->role_id === 3) {
            return view('profile.crew.edit');          
        }
    }

    public function updateName(Requests\UpdateNameRequest $request) {
        return dd($request->all());
    }
}

这是 html 表单

{!! Form::open(array('url' => 'update_name')) !!}
<div class="form-group{{ $errors->has('first_name') ? ' has-error' : '' }}">
    <label class="control-label">First Name</label>
    <input type="text" class="form-control" name="first_name" value="{{ old('first_name') }}" placeholder="{{ Auth::user()->first_name }}">

    @if ($errors->has('first_name'))
        <span class="help-block">
            <strong>{{ $errors->first('first_name') }}</strong>
        </span>
    @endif
</div>
<div class="form-group{{ $errors->has('last_name') ? ' has-error' : '' }}">
    <label class="control-label">Last Name</label>
    <input type="text" class="form-control" name="last_name" value="{{ old('last_name') }}" placeholder="{{ Auth::user()->last_name }}">

    @if ($errors->has('last_name'))
        <span class="help-block">
            <strong>{{ $errors->first('last_name') }}</strong>
        </span>
    @endif
</div>
<button type="submit" class="btn btn-success">Update name</button>
{!! Form::close() !!}

表格输出供参考

<form method="POST" action="http://localhost:8000/update_name" accept-charset="UTF-8">
    <input name="_token" type="hidden" value="VViupfPaPCQCk5aeUdc27Pt2Z8J7Hx1Y2khC0IY9">
    <div class="form-group">
        <label class="control-label">First Name</label>
        <input type="text" class="form-control" name="first_name" value="" placeholder="Hans">

    </div>
    <div class="form-group">
        <label class="control-label">Last Name</label>
        <input type="text" class="form-control" name="last_name" value="" placeholder="Padberg">

    </div>
    <button type="submit" class="btn btn-success">Update name</button>
</form>

这是我在 php artisan route:list 中的输出

+--------+----------+-------------------------+------+-----------------------------------------------------------------+--------------+
| Domain | Method   | URI                     | Name | Action                                                          | Middleware   |
+--------+----------+-------------------------+------+-----------------------------------------------------------------+--------------+
|        | GET|HEAD | /                       |      | Closure                                                         | web          |
|        | GET|HEAD | home                    |      | App\Http\Controllers\HomeController@index                       | web,web,auth |
|        | GET|HEAD | login                   |      | App\Http\Controllers\Auth\AuthController@showLoginForm          | web,guest    |
|        | POST     | login                   |      | App\Http\Controllers\Auth\AuthController@login                  | web,guest    |
|        | GET|HEAD | logout                  |      | App\Http\Controllers\Auth\AuthController@logout                 | web          |
|        | POST     | password/email          |      | App\Http\Controllers\Auth\PasswordController@sendResetLinkEmail | web,guest    |
|        | POST     | password/reset          |      | App\Http\Controllers\Auth\PasswordController@reset              | web,guest    |
|        | GET|HEAD | password/reset/{token?} |      | App\Http\Controllers\Auth\PasswordController@showResetForm      | web,guest    |
|        | GET|HEAD | profile                 |      | App\Http\Controllers\UserController@getProfile                  | web,web,auth |
|        | GET|HEAD | profile/edit            |      | App\Http\Controllers\UserController@editProfile                 | web,web,auth |
|        | GET|HEAD | register                |      | App\Http\Controllers\Auth\AuthController@showRegistrationForm   | web,guest    |
|        | POST     | register                |      | App\Http\Controllers\Auth\AuthController@register               | web,guest    |
|        | POST     | update_email            |      | App\Http\Controllers\UserController@updateEmail                 | web,web,auth |
|        | POST     | update_name             |      | App\Http\Controllers\UserController@updateName                  | web,web,auth |
|        | POST     | update_password         |      | App\Http\Controllers\UserController@updatePassword              | web,web,auth |
|        | POST     | update_profile_picture  |      | App\Http\Controllers\UserController@updateProfilePicture        | web,web,auth |
+--------+----------+-------------------------+------+-----------------------------------------------------------------+--------------+

【问题讨论】:

  • 你确定这条路径是正确的? public function updateName(Requests\UpdateNameRequest $request) 我认为应该只有“UpdateNameRequest”
  • 是的,我确定它是正确的路径
  • 我试图按照你对我说的方式运行它,但它给了我这个错误Class App\Http\Controllers\UpdateNameRequest does not exist
  • 呃..好的..我在那里找不到任何错误。正如您所说的页面只是刷新,您可以在视图上显示所有错误,以检查是否有其他东西阻止您的验证。 pastebin.com/igHK5bif
  • 你能不能把web中间件去掉再试试。 .

标签: php validation laravel request


【解决方案1】:

我只是想为那些使用邮递员或该类别中的任何其他应用程序检查验证的人添加一些东西,请确保添加

接受:应用程序/json

到 Header 选项卡,否则您将不会收到应用程序错误,页面只是刷新并返回 200

【讨论】:

  • 对我来说就是这样
【解决方案2】:

您的错误变量返回空值。这就是为什么没有错误显示只是看起来页面正在刷新。 Ur 验证正常,但未显示错误值。

试试看: 在 app\Http\Kernel.php 中将 \Illuminate\Session\Middleware\StartSession::classweb $middlewareGroups 移动到 $middleware

【讨论】:

  • 感谢您的想法。我将routes.php 文件中的middlewareweb 更改为auth,现在验证工作正常。
【解决方案3】:

您是否安装了表单生成器? Laravel Collective 制作了关于如何安装 HTML 和表单外观的指南。你可以在这里找到它:https://laravelcollective.com/docs/5.2/html

【讨论】:

  • 是的,我做到了。当我从浏览器查看源代码时,表单看起来很好
  • 请再次检查我添加了表单输出
【解决方案4】:

不确定它到底是什么,但这里有几件事可以尝试:

显式添加method =&gt; post

{!! Form::open(array('url' => 'update_name', 'method' => 'post')) !!}

检查您的路线以确保路线已正确注册。运行:

`php artisan route:list`

如果所有其他方法都失败,请尝试使用Postman 手动发送 POST 请求。这至少可以让您确定问题是在您的表单中还是在设置 POST 路由中。

最后,与这个问题无关,我建议保持简单。在这样的路由上,不需要 Request 类,只需使用内联验证即可。

public function updateName(Illuminate\Http\Request $request) {
    $this->validate($request, [
        'first_name' => 'required',
        'last_name' => 'required'
    ]);
    return dd($request->all());
}

【讨论】:

  • 我尝试在邮递员上运行 http://localhost:8000/update_name 并给了我一个由 laravel 生成的 html 页面,并出现此错误 Whoops, looks like something went wrong. TokenMismatchException
  • 当我运行它时仍然没有任何反应public function updateName(Illuminate\Http\Request $request) { $this-&gt;validate($request, [ 'first_name' =&gt; 'required', 'last_name' =&gt; 'required' ]); return dd($request-&gt;all()); }
  • 但是当我这样做public function updateName(Illuminate\Http\Request $request) { return dd($request-&gt;all()); }它工作正常
  • 我认为当我尝试使用规则进行验证时会出现问题。你知道如何解决这个问题吗?我已经花了几个小时试图让这个工作,但我仍然不能做对。我以前用我的其他项目做过这个,它工作正常我只是不知道为什么它现在不起作用。你认为它是 laravel 中的错误吗?
  • @Marley 如果您认为这是一个验证错误,只需在您正在测试的方法的开头放置一个 dd() 即可。当故障排除时,它会缩小到你需要让某些东西工作的程度,然后从那里开始构建。怀疑这是 Laravel 中的一个错误。
【解决方案5】:

你得到了 TokenMismatchException .. 确保你的会话存储路径是可写的

【讨论】:

    【解决方案6】:

    我解决了我改变这个的问题:

    Route::group(['middleware' => ['web']], function () {
        Route::get('profile/edit', 'UserController@editProfile');
        Route::post('update_name', 'UserController@updateName');
    });
    

    到:

    Route::group(['middleware' => ['auth']], function () {
        Route::get('profile/edit', 'UserController@editProfile');
        Route::post('update_name', 'UserController@updateName');
    });
    

    谢谢你们:)

    【讨论】:

      【解决方案7】:

      如果您正在验证的字段数多于提交的表单上的字段数,您也会收到此错误。

      确保您没有验证提交表单上的更多字段。

      【讨论】:

        猜你喜欢
        • 2016-05-23
        • 1970-01-01
        • 2012-11-18
        • 2012-04-22
        • 2012-11-18
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多