10月CMS,如何从插件重定向到包含数据的页面

时间:2015-09-18 20:46:45

标签: php laravel octobercms

我正在为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如何如此完全不同有关?有没有办法预先填充旧的输入值和错误消息?

3 个答案:

答案 0 :(得分:2)

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

{{form_value('my_input_name')}}

october cms form doc

正如你可以在最顶层阅读的那样你可以通过将“方法名称”更改为小写并将“::”更改为_

来“翻译”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”来更新部分。部分将被新消息覆盖。