我正在使用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()
这是完美的