【问题标题】:Laravel 5 - why is input empty when returning with errors?Laravel 5 - 为什么返回错误时输入为空?
【发布时间】:2015-09-19 14:33:12
【问题描述】:

我有一个提交给控制器的表单,该控制器验证数据。如果验证失败,它会使用输入和错误重定向回来。这是处理表单提交的方法:

<?php namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Models\User;

class UserController extends Controller {

    /**
     * Create a new user.
     *
     * @param Reqeust       $request
     *
     * @return Void
     */
    public function postCreate(Request $request)
    {
        $user = new User;
        $rules = $user->rules();
        $rules['password'] = 'required|confirmed|min:8';
        $v = \Validator::make($request->except('_token', 'roles'), $rules);
        if ($v->fails())
        {
            return redirect()->back()->withInput($request->except('_token', 'password', 'password_confirmation'))->withErrors($v);
        }
        $user->fill($request->except('_token', 'password', 'password_confirmation'));
        $user->password = \Hash::make($request->input('password'));
        $user->save();

        return redirect()->route('webmanAccounts')->with('messages', [['text' => 'User account created', 'class' => 'alert-success']]);
    }

在显示表单的页面上,我检查其中一个字段name 是否存在,如果存在,则使用数据填充用户对象。问题是input 总是空的。

<?php namespace BackEnd;

use Illuminate\Http\Request;
use Illuminate\Support\Facades\Request as RequestFacade;
use App\Http\Controllers\Controller;
use App\Models\Role;
use App\Models\User;

class UserController extends Controller {

    public function __construct(Request $request)
    {
        if ( ! $request->user()->can('accounts'))
        {
            return abort(403, 'You do not have permission to access this page.'); 
        }
    }

    /**
     * Display the create new user form and process any error messages.
     *
     * @param Reqeust       $request
     *
     * @return View
     */
    public function create(Request $request)
    {
        $user = new User;
        dump(RequestFacade::all());
        if (RequestFacade::has('name'))
        {
            $user->fill(RequestFacade::except('_token', 'roles'));
            foreach (RequestFacade::only('roles') as $role)
            {
                $user->roles()->add($role);
            }
        }
        return view('backend.user.create', ['title' => 'Website Manager :: Create New Account', 'user' => $user, 'roles' => Role::all()]);
    }

我试过RequestFacade$requestInput,都显示为空。为什么没有传回数据?

更奇怪的是,我还有另一个项目,它使用几乎相同的代码,并且运行良好。为什么它对一个项目可以正常工作,而对另一个项目却不行!?

【问题讨论】:

  • 当您以物理方式重定向用户时,您会丢失所有帖子数据。在重定向之前将发布数据存储在会话中。或者在错误查找页面上呈现帖子表单。
  • @MichaelDibbets 这不是真的。正如我在帖子中所说,在我的其他项目中使用 withInput() 非常好。

标签: php forms validation laravel laravel-5


【解决方案1】:

当您使用withInput() 方法时,数据会作为“旧”数据刷新到会话中。

$request-&gt;old() 应该给你一个包含所有“旧”数据的数组。

$request-&gt;old('name') 应该为您提供“旧”名称数据。

【讨论】:

  • 那行得通,谢谢,但是为什么Request::input() 可以在我的另一个项目上工作,而不是这个?两者都是 Laravel 5.1,代码几乎相同。我不明白。
  • @Styphon Request::input() 从 $_GET 和 $_POST 超全局变量中获取输入。您的其他项目工作的唯一方法是数据来自获取/发布请求数据,而不是来自redirect()-&gt;back()-&gt;withInput() 情况(通过将数据闪烁到会话来传输数据)。
  • -地址对象是默认的
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-07
  • 2018-12-11
  • 2021-09-02
  • 1970-01-01
相关资源
最近更新 更多