4

对于可以添加和修改字段的动态表单:

通知

<input name="gallery[1][title]">
<input name="gallery[1][text]">
.
.
.
<input name="gallery[n][title]">
<input name="gallery[n][text]">

在控制器中进行验证:

'gallery.*.file' => 'nullable|image',
'gallery.*.title' => 'nullable|string',

在本地化文件中:

我永远不知道阵列中有多少人。

'gallery.*.text' =>  'text of gallery 1',
'gallery.*.title' =>  'title of gallery 1',

我该怎么写?

我想要这样的结果:

画廊 1 的标题

.

.

.

画廊名称 n

4

3 回答 3

1

这是一个 hacky 方法来做到这一点。不幸的是,laravel 目前不支持为特定令牌添加通用消息替换器,因此您可以这样做:

在控制器中:

$replacer = function ($message, $attribute) {
    $index = array_get(explode(".",$attribute),1);
    $message = str_replace(":index",$index,$message);
    //You may need to do additional replacements here if there's more tokens
    return $message;
}
$this->getValidationFactory()->replacer("nullable", $replacer);
$this->getValidationFactory()->replacer("string", $replacer);
$this->getValidationFactory()->replacer("image", $replacer);
$v = $this->getValidationFactory()->make($request->all(), $rules);
if ($v->fails()) {
   $this->throwValidationException($request, $v); //Simulate the $this->validate() behaviour
}

您还可以在服务提供商中添加替换器,以使它们在所有路由中都可用,但不幸的是,您需要为每个希望它们可用的规则注册它们。

在本地化文件中:

'gallery.*.text' =>  'text of gallery :index',
'gallery.*.title' =>  'title of gallery :index',
于 2017-10-23T13:18:08.133 回答
0

在 laravel 7 中更新

your_language/validation.php

es it/validation.php

'attributes' => [
       'gallery.*.file' => 'Your custom message!!',
    ],
于 2020-08-07T13:54:35.853 回答
0

需要修改表单和控制器验证

通知

 {!! Form::open(['url' => 'actionURL']) !!}
    {{ csrf_field() }}
      <input name="gallery[]">

    {!! Form::close() !!}

在控制器中

  foreach ($request->gallery as $key => $gallery) {        
       $validator = Validator::make(array('gallery => $gallery),
                array('gallery' => 'required'));        
}
于 2017-10-23T13:18:54.883 回答