3

我正在为十月 CMS 创建一个插件,它有一个前端表单(组件)

{{ form_open({ request: 'onSubmitForm' }) }}

在插件中有一个onSubmitForm()带有validator. 如果验证器失败,我想重定向到表单输入来自 ( $this->page->url) 的页面,但发送验证器消息 ( $validator->messages()) 和表单的原始输入 ( post())。

我试过了:

if ($validator->fails()) {
  return Redirect::to($this->page->url)->withErrors($validator->messages())->withInput(post());
}

如果我放在{{ errors }}页面上,我会收到一条消息

类 Illuminate\Support\ViewErrorBag 的对象无法转换为字符串

然后我使用以下方法修复:

{% for error in errors.all() %}
  <li>{{ error }}</li>
{% endfor %}

{{ errors.first('name') }}

{{ input }}它甚至不返回错误。

我做错了重定向吗?还是与 Twig 和 Blade 完全不同有关?有没有办法预填充旧的输入值和错误消息?

4

3 回答 3

4

您可以使用此树枝输出旧的输入值

{{form_value('my_input_name')}}

十月 cms 表格 doc

正如您在最上面看到的那样,您可以通过将“方法名称”更改为小写并将“::”更改为 _ 来将 php 示例“翻译”为 twig

例子:

// PHP
<?= Form::open(..) ?>

// Twig
{{ form_open(...) }}

希望它会有所帮助。

于 2015-11-18T10:54:57.230 回答
0

这是我的刀片常规代码

 @if (count($errors) > 0)
            <div class="alert alert-danger">
                 <button type="button" class="close" data-dismiss="alert" aria-hidden="true">×</button>
                 <strong>{{trans('messages.sorry')}}</strong>
                 <br><br>
                 <ul>
                      @foreach ($errors->all() as $error)
                          <li>{{ $error }}</li>
                      @endforeach
                 </ul>
            </div>
@endif
于 2015-09-19T02:23:33.300 回答
0

无需重定向到提交表单的同一页面,只需使用 Ajax!你可以通过几种方式来做。

代替 form_open,使用 form_ajax。这是一个例子:

form_ajax('onSubmitForm', { model: user, class: 'whateverclass', id: 'idoftheform', success:'doSomethingInJS(textStatus, data)'})

在 PHP 中,您可以将错误消息返回为

 return ["ErrorMsg" => 'this is some error']

然后在JS中就可以显示了:

function whateverClass (textStatus, data){
alert (data.ErrorMsg);
$('#alertHolderDiv').html(data.ErrorMsg);
}

另一种方法是使用部分!一旦你抛出一个错误,你可以在 ajax 命令中使用“update”来更新部分。部分将被新消息覆盖。

于 2015-12-23T23:33:21.963 回答