Laravel 5 with Input old始终为空


Laravel 5 withInput old always empty

我正在使用Laravel 5构建一个简单的登录表单,当出现错误时,我想默认填充一些输入。我的路由器正在调用给定的这些函数

Route::get('/login','AuthController@login');
Route::post('/login','AuthController@do_login');

我的控制器如下方所示

namespace App'Http'Controllers;
use App;
use App'Models'User;
use Request;
use Illuminate'Support'Facades'Redirect;
class AuthController extends Controller {
   function login()
   {
       if(User::check())
       {
           /*User is logged, then cannot login*/
           return Redirect::back();
       }
       else
       {
           return view('auth.login');
       }
   }
    function do_login()
    {
        return view('auth.login')->withInput(Request::except("password"));
    }
}

注意到PhpStorm强调了withInput,并表示在Illuminate''View''View中找不到它的实现。在我的视图中,我有以下内容:

            {!! Form::open() !!}
            <div class="form-group">
                {!! Form::text('email', Input::old('email'), array('placeholder' => Lang::get('auth.email'), 'class' => 'form-control')) !!}
            </div>
            <div class="form-group">
                {!! Form::password('password', array('placeholder' => Lang::get('auth.password'),'class'=>'form-control')) !!}
            </div>
            <div class="form-group">
                <button class="btn btn-primary btn-block">@lang('auth.signin')</button>
                <span class="pull-right"><a href="/{{App::getLocale()}}/register">@lang('auth.register')</a></span>
            </div>
        <input type="email" class="form-control" name="email" value="{{ old('email') }}">
        {!! Form::close() !!}

我在这里错过了什么?这可以在Laravel 5中完成吗?非常感谢您抽出时间!

withInput()用于在重定向期间保留输入。

如果您正在执行return view(),则没有必要(也不可能)调用它。

不过,您可以考虑让do_login执行return redirect()->back()->withInput(Request::except("password"));,以正确地实现Post/Rerect/Get。

我建议您使用MessageBag类。首先在控制器文件的顶部导入它的命名空间:

use Illuminate'Support'MessageBag;

然后你可以在你的控制器中使用它:

$message = new MessageBag(["username" => "A default and valid username"]); // Create your message
Redirect::to('auth/login')->withErrors($message); // Return it to your view, whatever the url

然后在您的身份验证/登录视图中:

{!! Form::text('username', Input::old('username'), array('placeholder' => ($errors->has('username')?$errors->first('username'):Lang::get('auth.username')), 'class' => 'form-control')) !!}

如果你想的话,你甚至可以替换输入的值:

{!! Form::text('username', ($errors->has('username')?$errors->first('username'):null), array('placeholder' => ($errors->has('username')?$errors->first('username'):Lang::get('auth.username')), 'class' => 'form-control')) !!}

如果遇到错误,您的"用户名"输入现在应该包含"默认有效用户名"消息。

在错误对象中传递数据是一个有用的提示吗?如果您要按照预期的方式使用错误对象,该怎么办?

相反,有一个合适的方法可以做到这一点。传递给->视图的第二个参数是data!太可怕了!

return view('your.view', dataYouWannaPass)

做得很完美!

laravel 5.1文档也建议只使用

->with($data)

http://laravel.com/docs/5.1/views

我的这个问题的解决方案。。。而不是把你的路线放在这个里面

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

只要把它取下来,它就会正常工作。它类似于"web"的中间件正在加载两次。

基于@AnthonyPilos的答案,

Laravel 5.2.27我认为它删除了对web中间件组的需求,因此删除它是有效的。

因此:

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

变得多余。

希望它能帮助其他人通过validateRequest、validateLogin等进行搜索,发现这就是路线。

在Laravel 5.2中,您可以编写return Redirect::back()->withErrors([$errors])->withInput(Input::all());

当您返回一个重定向要求(http响应头"Location"项不为空)时,与withInput对应的会话数据将不会被擦除。所以下一个请求可以访问这些数据。

当您返回没有重定向要求的响应页面("位置"项为空)时,与withInput对应的会话数据将被删除。

因此,我们可以看到"withInput"函数只在重定向中起作用。

当你需要旧数据时,如果你不使用laravel验证,那么你可以尝试吹

return Redirect::back()->withInput()

这是完美的