有没有办法在 October CMS 中使用 GET 参数重定向?
Is there a way to Redirect with GET Parameters in October CMS?
我有一个具有 Ajax 处理程序的组件。在此处理程序结束时,我想将用户重定向到带有 GET 参数的页面。
示例:
- 用户转到页面 www.example。com/hello
- 他使用 Ajax 处理程序 onClicked()
点击按钮
- 用户浏览器被重定向到 www.example.com/redirect?id=1
在 Ajax 处理程序中,一些代码将 return 来自 REST API 的 ID。同一个处理程序也知道要重定向到的页面(可以在后端设置中设置)。
我试图在 October CMS Documentation 中找到一些东西。我发现的唯一东西是重定向 Class,它可以重定向到给定的页面,但我找不到设置 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 处理程序
public function onOrder() {
$sample = Sample::findOrFail(input('sample'));
// API Call returns ID $id
return Redirect::to(Settings::get('redirectUrl')->with('id',$id);
}
我希望使用 GET 查询
将用户重定向到给定的 Url
有人知道如何进行这项工作吗?
我使用组件页面顶部的Input;
服务。现在我认为最好使用尽可能少的 AJAX 。对于整页重定向,我推荐一个简单的 HTML 表单,但使用 TWIG 打开它。
所以我的故障排除技巧。使用 {{ form_open({request: __SELF__~"::onOrder", id: "sample-form"}) }}
创建您的表单;不要忘记结尾 {{ form_close() }}
。这将生成一个非 ajax 表单,但对解决问题很有用。注意 __SELF__~"::onOrder"
,这是用于指定特定组件的处理程序。如果您有许多具有相同 onOrder
处理程序和一般良好做法的组件,这一点很重要。
现在你会注意到在 Component.php onOrder
处理程序中我有 //dd(Input::get('sample'))
当你取消注释这一行和 运行 你应该看到 $id
你想通过。如果正确,则将 die 和 dump 命令移到函数的下方。
检查是否检索到 $sample
。你可以只使用 Sample::where('id', $id)
;我相信如果找不到,这将 return 为空,但如果找到,您可以使用 $sample->first()
,因为 return 是一个集合。
构建重定向很容易 return Redirect::to(Settings::get('redirectUrl').'?id='.$id);
。在这里,我在 url 的末尾连接了 '?id='.$id
。包含 ->with()
只是意味着您正在闪烁一条消息,例如 `->with('success', 'Thank you for your order');您可以通过会话检索此消息。
如果您觉得必须使用 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() }}
我有一个具有 Ajax 处理程序的组件。在此处理程序结束时,我想将用户重定向到带有 GET 参数的页面。
示例:
- 用户转到页面 www.example。com/hello
- 他使用 Ajax 处理程序 onClicked() 点击按钮
- 用户浏览器被重定向到 www.example.com/redirect?id=1
在 Ajax 处理程序中,一些代码将 return 来自 REST API 的 ID。同一个处理程序也知道要重定向到的页面(可以在后端设置中设置)。 我试图在 October CMS Documentation 中找到一些东西。我发现的唯一东西是重定向 Class,它可以重定向到给定的页面,但我找不到设置 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 处理程序
public function onOrder() {
$sample = Sample::findOrFail(input('sample'));
// API Call returns ID $id
return Redirect::to(Settings::get('redirectUrl')->with('id',$id);
}
我希望使用 GET 查询
将用户重定向到给定的 Url有人知道如何进行这项工作吗?
我使用组件页面顶部的Input;
服务。现在我认为最好使用尽可能少的 AJAX 。对于整页重定向,我推荐一个简单的 HTML 表单,但使用 TWIG 打开它。
所以我的故障排除技巧。使用 {{ form_open({request: __SELF__~"::onOrder", id: "sample-form"}) }}
创建您的表单;不要忘记结尾 {{ form_close() }}
。这将生成一个非 ajax 表单,但对解决问题很有用。注意 __SELF__~"::onOrder"
,这是用于指定特定组件的处理程序。如果您有许多具有相同 onOrder
处理程序和一般良好做法的组件,这一点很重要。
现在你会注意到在 Component.php onOrder
处理程序中我有 //dd(Input::get('sample'))
当你取消注释这一行和 运行 你应该看到 $id
你想通过。如果正确,则将 die 和 dump 命令移到函数的下方。
检查是否检索到 $sample
。你可以只使用 Sample::where('id', $id)
;我相信如果找不到,这将 return 为空,但如果找到,您可以使用 $sample->first()
,因为 return 是一个集合。
构建重定向很容易 return Redirect::to(Settings::get('redirectUrl').'?id='.$id);
。在这里,我在 url 的末尾连接了 '?id='.$id
。包含 ->with()
只是意味着您正在闪烁一条消息,例如 `->with('success', 'Thank you for your order');您可以通过会话检索此消息。
如果您觉得必须使用 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() }}