【问题标题】:Getting form inputs in the controller after validation验证后在控制器中获取表单输入
【发布时间】:2015-06-30 20:31:56
【问题描述】:

我是 Laravel 世界的新手,但我遇到了一个目前无法解决的问题。

我的问题是: 验证失败后如何访问控制器create()函数中提交的值?

这是我所拥有的:

  1. PostsController,在 routes.php 中定义为资源
  2. 在控制器中,我有常用方法create()store() 等。

这里有一些代码:

//PostsController
public function create()
{
    //Here I need to get the inputs
    return view('posts.create');
}

public function store(Requests\PostsRequest $request)
{
    //store actions
}

我创建了 PostsRequest 类,它有一些规则,例如:

public function rules(){
    $rules = [
        'category_id'=>'required',
        'name'=>'required|min:3',
        'description'=>'required'
    ];
    return $rules;
}

如果一切正常,条目已存储到数据库中,但当验证失败时,它会加载带有一些验证消息的create()。 我需要在表单中加载所选类别的祖先,这应该通过知道 category_id 元素的提交值来实现。

到目前为止我已经尝试过:

  1. 尝试像这样在创建中添加参数:

    public function create(Requests\PostsRequest $request){...}  
    

    但它进入了无限循环。我理解为什么因为控制器的资源定义并且它“认为”它是存储方法。

  2. 试图打印外观Input::all(),但它是空的

  3. 尝试制作:

    public function create(){
        $request = new \Request();
        //print $request
    }  
    

    但它不起作用,我认为这不是正确的方法。

因此,如果您想知道如何在控制器中获取这些值,我们将不胜感激。

【问题讨论】:

    标签: validation laravel laravel-5


    【解决方案1】:

    如果您使用{!! Form::open() !!}(或Form::model),所有内容都将再次加载(重定向回来后)。 Laravel 自动捕获“Input::old”值。

    来源:FormBuilder.php(illuminate/html 包 - 5.0 版)

    /**
     * Get the value that should be assigned to the field.
     *
     * @param  string  $name
     * @param  string  $value
     * @return string
     */
    public function getValueAttribute($name, $value = null)
    {
        if (is_null($name)) return $value;
    
        if ( ! is_null($this->old($name)))
        {
            return $this->old($name);
        }
    
        if ( ! is_null($value)) return $value;
    
        if (isset($this->model))
        {
            return $this->getModelValueAttribute($name);
        }
    }
    

    如果你不想使用Illuminate/html,只需在你的value属性处添加:

    Input::old('input_name')
    

    如果你想得到请求。只需添加到您的创建方法。

    public function create(Request $request){
       $data = $request->all(); //or whatever you want..
    }
    

    【讨论】:

    • 请看我对其他答案的评论
    【解决方案2】:

    你应该可以通过 Input::old() 获取数据

    在你看来你可以做到

    <input type="text" name="name" value="{{ old('name') }}" />
    

    如果它被发送,它将给出 name 的值。

    另请参阅此最近的问题/答案; Laravel 5 - Validation error on form doesn't re-enter user input

    【讨论】:

    • 我的问题不是在字段中显示值,而是在控制器中以某种方式获取它。我有很多嵌套类别,我需要将它们显示为每个级别的多个选择。当用户从级别 3 中选择类别并且验证失败时,我需要再加载 2 个级别以显示当前选择,顺便说一下,它加载了 ajax(例如选择 cat1,(加载新选择)然后选择 cat1.2 , (加载新选择)然后选择。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-02-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-04
    • 2017-09-01
    相关资源
    最近更新 更多