Laravel 5 with Input old always empty

erhoui1w  于 2023-05-01  发布在  其他
关注(0)|答案(8)|浏览(195)

我正在使用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中可以做到这一点吗?非常感谢您抽出时间!

rdlzhqv9

rdlzhqv91#

withInput()用于在重定向期间保留输入。
如果您正在执行return view(),则没有必要(也不可能)调用它。
不过,您可以考虑让do_login执行return redirect()->back()->withInput(Request::except("password"));,以正确实现Post/Redirect/Get

3mpgtkmj

3mpgtkmj2#

我建议您使用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

然后在auth/login视图中:

{!! 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')) !!}

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

nvbavucw

nvbavucw3#

在错误对象中传递数据是一个有用的提示吗?如果您要按预期的方式使用错误对象,该怎么办?
相反,有一个正确的方法来做到这一点。传递给-〉view的第二个参数是data!horray!

return view('your.view', dataYouWannaPass)

工作做得很完美!
laravel 5.1 doc也建议使用just

->with($data)

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

xwmevbvl

xwmevbvl4#

我对这个问题的解决方案。而不是把你的路线放进去

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

只要把它取下来,它就能正常工作了。它就像“网络”中间件加载两次。

o4hqfura

o4hqfura5#

基于@AnthonyPillos的回答
Laravel 5.2.27我认为它被删除了对Web中间件组的需要,因此为什么删除这个工作。
所以:

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

变得多余。
希望它能帮助其他人通过validateRequests,validatesLogin等搜索。等,才发现这是路线。

hmtdttj4

hmtdttj46#

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

yqkkidmi

yqkkidmi7#

当您返回一个重定向请求时(http响应头“Location”项不为空),withInput对应的会话数据不会被擦除。所以下一个请求可以访问这些数据。
当您返回没有重定向要求的响应页面时(“位置”项为空),对应于withInput的会话数据将被删除。
因此,我们可以看到“withInput”函数只在重定向中起作用。

dy1byipe

dy1byipe8#

当你需要用旧数据的时候,如果你没有使用laravel验证,那么你可以试试blow
return Redirect::back()-〉withInput()
这工作完美

相关问题