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

Php 在10月的CMS中,如何从插件重定向到包含数据的页面,php,laravel,octobercms,Php,Laravel,Octobercms,我正在为十月CMS创建一个插件,它的前端表单(组件)带有 在插件中有一个函数onSubmitForm(),带有一个验证器。 如果验证程序失败,我想重定向到表单输入来自的页面($this->page->url),但发送验证程序消息($validator->messages())和表单的原始输入(post()) 我试过: if ($validator->fails()) { return Redirect::to($this->page->url)->withErrors

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

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

我试过:

if ($validator->fails()) {
  return Redirect::to($this->page->url)->withErrors($validator->messages())->withInput(post());
}
如果我把
{{errors}}
放在页面上,我会收到一条消息

无法转换Illumb\Support\ViewErrorBag类的对象 串

然后,我使用以下方法对其进行修复:

{% for error in errors.all() %}
  <li>{{ error }}</li>
{% endfor %}
{%for errors.all()中的错误%}
  • {{error}}
  • {%endfor%}
    {{errors.first('name')}

    但是
    {{input}}
    甚至不返回错误


    我是否做了错误的重定向?或者,这与树枝和刀片是如何完全不同有关?有没有办法预先填充旧的输入值和错误消息?

    这是我为blade编写的常规代码

     @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
    
    @if(计数($errors)>0)
    ×
    {{trans('messages.sorry')}}
    

      @foreach($errors->all()作为$error)
    • {{$error}}
    • @endforeach
    @恩迪夫
    您可以使用此细枝输出旧的输入值

    {{form_value('my_input_name')}}
    

    正如您可以在最上面看到的,您可以通过将“方法名称”更改为小写和:“to”将php示例“翻译”为twig_

    例如:

    // PHP
    <?= Form::open(..) ?>
    
    // Twig
    {{ form_open(...) }}
    
    //PHP
    //小枝
    {{form_open(…)}
    

    希望它能有所帮助。

    不要重定向到表单提交的同一页面,只需使用Ajax!你可以用两种方法

    使用form_ajax代替form_open。 以下是一个例子:

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

    是的,这在Twig中不起作用。。。我讨厌10月CMS没有将刀片,而是细枝作为他们选择的模板引擎。
    function whateverClass (textStatus, data){
    alert (data.ErrorMsg);
    $('#alertHolderDiv').html(data.ErrorMsg);
    }