我正在使用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=''
完成一些事情。但我不知道如何继续。
当我更改选择按钮时,我想重定向到新网址:
假设我在多选页面上:
Www.MyWebsite.nl/Escape/public/assignment/create/MC/3
MC代表多项选择,3代表脚本我可以给出3个答案。
现在,当我将select设置为Open Question(OP)时,我需要重定向到此URL:
Www.MyWebsite.nl/Escape/public/assignment/create/OP/1
这必须使用Silex / Symfony中的URL生成器来完成,因为我不能只提供完整的URL
我现在在我的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 %}
网址完美无缺。我已经测试了,所以这部分确实有效。我的错误在哪里?
答案 0 :(得分:0)
要将URL从控制器传递到您的脚本,您只需附加一个模板变量,如下所示:
<?php
// somwhere in your route definition file
$app->match(
'/assignment/register/{type}/{count}',
function (Request $request, $type, $count) use ($app) {
// do your magic here
$urlTo = $app['url_generator']->generate('path-name', [$path=>$options]);
// here you pass the $urlTo variable to your template
// by passing a 2n argument to the render method
// https://silex.sensiolabs.org/doc/2.0/providers/twig.html#usage
return $app['twig']->render('your-template-name-here.twig', ["urlTo" => $urlTo]);
}
);
然后在你定义JS的模板中(假设你使用的是Twig,你没有指定你使用的是哪个模板):
<?php
// this is your template file
<script>
var urlTo = {{ urlTo }}; // here comes the injection from the PHP value to JS
document.getElementById('the-id-of-the-select-element').onchange = function(e) {
// probably you want to check the selected value here and then...
window.location.replace(urlTo);
};
</script>
这是一个最小的骨架,展示了如何将urlTo PHP变量传递到模板中并将其转换为JS变量。从这里开始,您应该详细说明并根据您的用例调整此代码。