我有一个组件,它有一个Ajax处理程序。在这个处理程序的末尾,我想将用户重定向到一个带有GET参数的页面。
示例:
在中,一些代码将返回来自REST的ID。相同的Handler也知道要重定向到的页面(可以在后端设置中设置)。我试图在十月的CMS文档中找到一些东西。我唯一找到的是重定向类,它可以重定向到给定的页面,但是我找不到一种方法来设置GET查询参数
<form id="sample-form" data-request-validate data-request="onOrder">
<input type="hidden" name="sample" value="{{ sample.id }}" />
<button type="submit">Get Sample</button>
</form>
AJAX Handler
public function onOrder() {
$sample = Sample::findOrFail(input('sample'));
// API Call returns ID $id
return Redirect::to(Settings::get('redirectUrl')->with('id',$id);
}
我希望通过GET查询将用户重定向到给定的Url
有谁知道如何让这件事成功吗?
发布于 2019-09-09 18:48:56
我在组件页面顶部使用Input;
服务。现在,在我看来,最好使用尽可能少的AJAX。为了执行完整的页面重定向,我建议使用一个简单的HTML表单,但是使用TWIG打开它。
所以我的麻烦枪击案提示。用{{ form_open({request: __SELF__~"::onOrder", id: "sample-form"}) }}
创建表单;不要忘记{{ form_close() }}
的结尾。这将生成一个非ajax表单,但对于解决问题很有用。请注意__SELF__~"::onOrder"
,它用于指定特定组件的处理程序。如果有许多具有相同onOrder
处理程序和良好实践的组件,则这一点非常重要。
现在,您将在Component.php onOrder
处理程序中注意到,当您取消注释这一行并运行您希望传递的$id
时,您将看到//dd(Input::get('sample'))
。如果它是正确的,然后移动模具和转储命令进一步向下的函数。
检查是否检索到$sample
。您可以只使用Sample::where('id', $id)
;如果没有找到,我相信这将返回null,但如果找到,则可以使用$sample->first()
,因为where返回集合。
构建重定向是很容易的return Redirect::to(Settings::get('redirectUrl').'?id='.$id);
。在这里,我把'?id='.$id
连接在url的末尾。包含一个->with()
只是意味着您正在闪烁一条消息,如‘->with’(‘success’,‘感谢您的订单’);您可以通过会话检索此消息。
如果您认为必须使用Ajax并完全回答您的问题,我确实包括了{{ form_ajax(__SELF__~"::onOrder", {id: "sample-form"}) }}
。我对此进行了测试,尽管不是确切的情况,而且一切都在为我工作。
<?php namespace Author\Plugin\Components;
use Input;
use Author\Plugin\Models\Sample;
class Something extends \Cms\Classes\ComponentBase
{
public function componentDetails()
{
return [
'name' => 'Somthing',
'description' => 'Something'
];
}
public function onOrder() {
//dd(Input::get('sample'));
$id = Input::get('sample');
$sample = Sample::where('id', $id);
//dd($sample);
// API Call returns ID $id
if ($sample != null) {
return Redirect::to(Settings::get('redirectUrl').'?id='.$id);
}
}
}
{{ form_ajax(__SELF__~"::onOrder", {id: "sample-form"}) }}
<input type="hidden" name="sample" value="{{ sample.id }}" />
<button type="submit">Get Sample</button>
{{ form_close() }}
{{ form_open({request: __SELF__~"::onOrder", id: "sample-form"}) }}
<input type="hidden" name="sample" value="{{ sample.id }}" />
<button type="submit">Get Sample</button>
{{ form_close() }}
https://stackoverflow.com/questions/57843396
复制相似问题