【发布时间】:2017-10-01 17:34:45
【问题描述】:
我正在使用 Silex 框架。我正在创建一个用户可以回答我的问题的系统。我已经设置了以下路线:
$routes->match('/assignment/register/{type}/{count}', function (Request $request, $type, $count) use ($app) {
现在,可以有两种类型的问题:多项选择或开放。路由的类型是 MC 或 OP。因此,表单将像这样生成:
if($type == 'MC'){
$builder->add('type', ChoiceType::class, array(
'label' => 'Type',
'required' => 'required',
'attr' => array('class' => 'select-field', 'autocomplete' => 'off', 'onchange' => 'this.form.submit()'),
'label_attr' => array('class' => 'label'),
'choices' => array('Multiple Choice' => 'MC', 'Open' => 'OP'),
'expanded' => false,
'multiple' => false,
));
}
if($type == 'OP'){
$builder->add('type', ChoiceType::class, array(
'label' => 'Type',
'required' => 'required',
'attr' => array('class' => 'select-field', 'autocomplete' => 'off', 'onchange' => 'this.form.submit()'),
'label_attr' => array('class' => 'label'),
'choices' => array('Multiple Choice' => 'MC', 'Open' => 'OP'),
'expanded' => false,
'multiple' => false,
'data' => 'OP',
));
}
但是,当我选择其他类型的问题时,我希望被重定向。所以假设我在 MC 问题上,当我在选择框中选择 OP 时,如何将我重定向到 OP 页面?我认为应该用onchange='' 做点什么。但我不知道如何继续。
更新
当我更改选择按钮时,我希望被重定向到新 URL:
假设我在多项选择页面上:
Www.MyWebsite.nl/Escape/public/assignment/create/MC/3
MC 代表多项选择,3 告诉脚本我可以给出 3 个答案。
现在,当我将选择设置为开放式问题 (OP) 时,我需要重定向到此 URL:
Www.MyWebsite.nl/Escape/public/assignment/create/OP/1
这必须使用 Silex/Symfony 中的 URL 生成器来完成,因为我不能只给出完整的 URL
更新 2
我现在在我的 twig 模板中获得了以下代码。但是,当我更改我的选择框时它仍然没有执行:
{% block scripts %}
{% if urlTo is defined %}
<script>
var urlTo = {{ urlTo }};
document.getElementById('form_type').onchange(function()
{
alert(urlTo);
window.location.href(urlTo);
});
</script>
{% endif %}
{% endblock %}
网址已完美给出。我已经测试过了,所以这部分确实有效。我的错在哪里?
【问题讨论】:
-
我不确定我是否关注...当您说重定向时,您的意思是整页重新加载?或者你想要一个 AJAX 调用来动态地改变问题?你能详细说明你的用例吗?
-
我已经更新了我的问题,希望对您有所帮助
-
要进行重定向,您必须在 Javascript 中进行,因为这将是在浏览器上运行的客户端代码。但是你有重定向到哪里的问题。你基本上有2个选择。在您的控制器中生成 URL 并将其传递给您的模板,或者如果您使用的是 twig,您有 path/url functions。检查this answer,这可能对您的JS代码有所帮助。
-
那么您能否回答我如何将生成的 URL 从控制器传递到 Onchange 的脚本(我不知道如何编写)?
标签: php forms symfony select silex