我正在使用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中完成吗? 非常感谢你的时间!
答案 0 :(得分:7)
withInput()
用于在重定向期间保留输入。
如果您正在进行return view()
,则无需(也可能)调用它。
您可以考虑让do_login
做return 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)
答案 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;函数只能在重定向中工作。