我正在为10月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如何如此完全不同有关?有没有办法预先填充旧的输入值和错误消息?
答案 0 :(得分:2)
您可以使用此树枝输出旧的输入值
{{form_value('my_input_name')}}
正如你可以在最顶层阅读的那样你可以通过将“方法名称”更改为小写并将“::”更改为_
来“翻译”php例如twig为例:
// PHP
<?= Form::open(..) ?>
// Twig
{{ form_open(...) }}
希望它会有所帮助。
答案 1 :(得分: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
答案 2 :(得分: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”来更新部分。部分将被新消息覆盖。