我正在使用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"));
}
}
注意到withInput被PhpStorm加了下划线,说在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中可以做到这一点吗?非常感谢您抽出时间!
8条答案
按热度按时间rdlzhqv91#
withInput()
用于在重定向期间保留输入。如果您正在执行
return view()
,则没有必要(也不可能)调用它。不过,您可以考虑让
do_login
执行return redirect()->back()->withInput(Request::except("password"));
,以正确实现Post/Redirect/Get。3mpgtkmj2#
我建议您使用MessageBag类。首先在控制器文件的顶部导入它的名称空间:
然后,您可以在您的控制器中使用它:
然后在auth/login视图中:
如果需要,您甚至可以替换输入的值:
如果遇到错误,您的“用户名”输入现在应该包含“默认和有效的用户名”消息。
nvbavucw3#
在错误对象中传递数据是一个有用的提示吗?如果您要按预期的方式使用错误对象,该怎么办?
相反,有一个正确的方法来做到这一点。传递给-〉view的第二个参数是data!horray!
工作做得很完美!
laravel 5.1 doc也建议使用just
http://laravel.com/docs/5.1/views
xwmevbvl4#
我对这个问题的解决方案。而不是把你的路线放进去
只要把它取下来,它就能正常工作了。它就像“网络”中间件加载两次。
o4hqfura5#
基于@AnthonyPillos的回答
Laravel 5.2.27我认为它被删除了对Web中间件组的需要,因此为什么删除这个工作。
所以:
变得多余。
希望它能帮助其他人通过validateRequests,validatesLogin等搜索。等,才发现这是路线。
hmtdttj46#
在Laravel 5.2、可以写
return Redirect::back()->withErrors([$errors])->withInput(Input::all());
yqkkidmi7#
当您返回一个重定向请求时(http响应头“Location”项不为空),withInput对应的会话数据不会被擦除。所以下一个请求可以访问这些数据。
当您返回没有重定向要求的响应页面时(“位置”项为空),对应于withInput的会话数据将被删除。
因此,我们可以看到“withInput”函数只在重定向中起作用。
dy1byipe8#
当你需要用旧数据的时候,如果你没有使用laravel验证,那么你可以试试blow
return Redirect::back()-〉withInput()
这工作完美