【问题标题】:Laravel 5.2 - Validation errors are not getting displayed [duplicate]Laravel 5.2 - 没有显示验证错误[重复]
【发布时间】:2016-08-06 15:49:58
【问题描述】:

我正在尝试在 Laravel 5.2 中验证登录/注册系统。

我使用welcome.blade.php 作为索引页面,其中包含注册和登录两种表单

这就是我的UserController.php 的设置方式:

namespace authme\Http\Controllers;

use Illuminate\Http\Request;
use authme\User;
use Illuminate\Support\Facades\Auth;

class UserController extends Controller
{
    public function getDashboard()
    {
        return view('dashboard');
    }
    public function doSignUp(Request $request)
    {
        $this->validate($request, [
            'email' => 'required|email|unique:users',
            'first_name' => 'required|max:120',
            'password' => 'required|min:6'
        ]);

        $email = $request['email'];
        $password = bcrypt($request['password']);
        $first_name = $request['first_name'];
        $last_name = $request['last_name'];
        $location = $request['location'];
        $phone = $request['phone'];

        $user = new User();
        $user->email = $email;
        $user->password = $password;
        $user->firstname = $first_name;
        $user->lastname = $last_name;
        $user->location = $location;
        $user->phone = $phone;

        $user->save();

        Auth::login($user);

        return redirect()->route('dashboard');

    }

    public function doSignIn(Request $request)
    {
        $this->validate($request, [
            'email' => 'required',
            'password' => 'required'
        ]);

        if(Auth::attempt(['email' => $request['email'], 'password' => $request['password']])){
            return redirect()->route('dashboard');
        }
        return redirect()->back();
    }
}

为了在注册/登录期间显示错误,在我的视图文件 (welcome.blade.php) 中,我包含了:

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

路线是这样设置的:

Route::group(['middleware' => ['web']], function() {

Route::get('/', function () {
    return view('welcome');
});

Route::post('/signup', [
    'uses'  => 'UserController@doSignUp',
    'as' => 'signup'
]);

Route::post('/signin', [
    'uses'  => 'UserController@doSignIn',
    'as' => 'signin'
]);

Route::get('/dashboard', [
    'uses' => 'UserController@getDashboard',
    'as' => 'dashboard'
]);
});

输入正确的详细信息时,表单工作正常。但是当我输入不正确的数据时:

  • 当我尝试提交空白表单时,它只是重定向回原始页面,但没有显示错误
  • 当我尝试输入已在使用的电子邮件时,它会再次重定向回原始页面,但没有显示错误

但是,我在我的代码中找不到任何可能的语法错误。有没有逻辑错误?

PS:

  1. 我没有编辑或修改App\Exceptions\Handler
  2. herehere 提出的问题都没有解决我的问题

【问题讨论】:

标签: php validation laravel blade


【解决方案1】:

如果您使用的 Laravel 版本高于或等于 5.2.25,则不再需要将路由放入 web 中间件中。它现在会自动应用。

将你的路由放在routes.php 中的web 中间件实际上会导致问题。

解释here

【讨论】:

  • web 中间件中删除路由工作正常!
【解决方案2】:

您还可以使用以下代码显示使用无效凭据登录的错误。

public function doSignIn(Request $request)
{
    $rules = array(
        'email'    => 'required',
        'password' => 'required'
    );
    $validator = Validator::make($request->all(), $rules);
    if ($validator->fails()){
            return redirect('welcome')
            ->withErrors($validator)
            ->withInput();
    }else{
        if(Auth::attempt(['email' => $request['email'], 'password' => $request['password']])){
            return redirect()->route('dashboard');
        }
    }
}

【讨论】:

    【解决方案3】:

    在我看来,您的验证错误消息没有保存到会话中。看看这个。

    https://github.com/laravel/framework/issues/12022

    【讨论】:

      猜你喜欢
      • 2016-05-25
      • 1970-01-01
      • 1970-01-01
      • 2016-03-28
      • 2016-09-12
      • 2016-11-30
      • 2016-08-17
      • 1970-01-01
      • 2018-12-05
      相关资源
      最近更新 更多