代码之家  ›  专栏  ›  技术社区  ›  Marcus Harrison

是否可以从Laravel数组语法输入中获取键?

  •  1
  • Marcus Harrison  · 技术社区  · 8 年前

    给定格式的表单:

    <form method="POST" action="{{ route('post') }}">
    {{ csrf_field() }}
    @foreach([
        'firstname' => 'First name',
        'lastname' => 'Last name',
    ] as $key => $label)
        <label for="person[{{ $key }}]">{{ $label }}</label>
        <input name="person[{{ $key }}]" id="person[{{ $key }}]" type="text" />
    @endforeach
    <input type="submit" value="Send" />
    </form>
    

    还有一个模型:

    use Illuminate\Database\Eloquent\Model;
    
    class Person extends Model
    {
        protected $fillable = [
            'firstname',
            'lastname',
        ];
    }
    

    我想用拉拉维尔的 Illuminate\Http\Request::input() 函数检索所有 person 表单中的字段并从中填充模型。

    我用来测试此功能的示例路径是:

    use Illuminate\Http\Request;
    use App\Person;
    
    Route::post('/testcase', function(Request $request) {
        $person = new Person;
        $fields = $request->input('person.*');
        $person->fill($fields);
        var_dump(
            $person->firstname,
            $person->lastname,
            $fields
        );
        return response('');
    })->name('post');
    

    但是,这将返回以下响应:

    NULL
    NULL
    array(2) {
    [0]=>
    string(4) "John"
    [1]=>
    string(3) "Doe"
    }
    

    (表格中填写了值,“firstname”=>“john”和“lastname”=>“doe”)。

    是否可以使用相应的键(“firstname”和“lastname”)而不是数字键从该窗体中检索数组输入,或者我必须手动指定所有键?

    1 回复  |  直到 8 年前
        1
  •  1
  •   Tim Lewis    8 年前

    将输入的访问方式更改为

    $fields = $request->input("person");
    

    你应该得到

    array:2 [▼
      "firstname" => "John"
      "lastname" => "Doe"
    ]
    

    <form method="POST" action="">
      {{ csrf_field() }}
      @foreach(['firstname' => 'First Name', 'lastname' => 'Last Name'] as $key => $label)
      <label for="person[0][{{ $key }}]">{{ $label }}</label>
      <input name="person[0][{{ $key }}]" id="person[0][{{ $key }}]" type="text" />
      @endforeach
      <input type="submit" value="Send" />
    </form>
    

    for($request->input("person") AS $index => $fields){
      $person = new Person;
      $person->fill($fields);
    }
    
    // OR
    
    $fields = $request->input("person.0");
    $person = new Person;
    $person->fill($fields);
    

    在动态创建字段时,您需要一种方法来维护前端的索引,但这是另一个问题。

    推荐文章