Laravel 5 withInput old总是空的

时间:2015-06-30 20:39:23

标签: php laravel laravel-5

我正在使用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中完成吗? 非常感谢你的时间!

7 个答案:

答案 0 :(得分:7)

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

如果您正在进行return view(),则无需(也可能)调用它。

您可以考虑让do_loginreturn redirect()->back()->withInput(Request::except("password"));,以正确实施Post/Redirect/Get

答案 1 :(得分:2)

我建议你使用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')) !!}

您的用户名&#34;输入现在应该包含&#34;默认和有效的用户名&#34;如果遇到错误,则显示错误消息。

答案 2 :(得分:0)

在错误对象中传递数据是一个有用的提示?如果你打算按照预期的方式使用错误对象怎么办?

相反,有一种正确的方法可以做到这一点。您传递给的第二个参数 - &gt; view是数据! horray!

return view('your.view', dataYouWannaPass)

完美地完成工作!

laravel 5.1 doc也建议使用

->with($data)

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

答案 3 :(得分:0)

我解决这个问题的方法......而不是把你的路线放在这个

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

只需将其移除即可正常使用。它喜欢&#39; web&#39;中间件正在加载两次。

答案 4 :(得分:0)

以@AnthonyPillos的答案为基础,

Laravel 5.2.27我认为它已经删除了对Web中间件组的需求,因此为什么删除它有效。

所以:

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

变得多余。

希望它可以帮助其他人搜索validateRequests,validatesLogin等等,只是为了发现它是路线。

答案 5 :(得分:0)

在Laravel 5.2中,你可以写 Rational

答案 6 :(得分:0)

当您返回一个重定向要求(http响应标题&#34;位置&#34;项目不为空)时,不会删除与withInput对应的会话数据。因此下一个请求可以访问此数据。

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

所以,我们可以看到&#34; withInput&#34;函数只能在重定向中工作。