将所选选项名称发送到注释(路由)

时间:2012-08-13 11:01:17

标签: php symfony

嘿我想在我的路线(注释)中获取所选的选项值。我有包含索引视图的Portfolio Controller。在索引视图中,有一个只有一个选择下拉列表的表单。最初URL看起来像

http://localhost/idp/web/app_dev.php/portfolio/ 

索引视图中的表单是

<form name="portfolios" action="{{ path('v2_pm_portfolio_switch') }}" method="post" >
    <select name="portfolio" style="width: 200px; height:25px;">
        <option selected="selected" value="default">Switch Your Portfolio</option>
        {% for portfolio in portfolios %}
            <option value={{ portfolio.id }}>{{ portfolio.portfolioName }}</option>
        {% endfor %}
    </select>
   <input type="submit"class="portfolio_input button2 tooltip" value="Switch">
</form>

当用户提交表单时,它会调用switchportfolio Action(内部组合控制器) 我的交换机组合行动是

/**
* Switch Portfolio action.
* @Route("/{user selected option name should come here}", name="v2_pm_portfolio_switch")
* @Secure(roles="ROLE_Normal_Registered_User")
* @Template("MunichInnovationGroupPatentBundle:Portfolio:index.html.twig")
*/
public function switchportfolioAction(Request $request){
    }

如何在Symfony2中将所选选项名称发送到我的网址? 因此,如果用户选择portofolio1,并提交表单,则URL变为:

http://localhost/idp/web/app_dev.php/portfolio/portfolio1

3 个答案:

答案 0 :(得分:0)

HTML表单不是那样的。您需要添加一些在提交表单时运行的javascript,它会停止提交并根据所选选项更改当前位置。

答案 1 :(得分:0)

做这样的事情:

/**
 * Switch Portfolio action.
 * @Route("/v2_pm_portfolio_switch", name="v2_pm_portfolio_switch")
 * ...
 */
public function switchPortfolioAction(Request $request){
    //check that the form parameters are OK and get the portfolio id from the request
    return $this->redirect($this->generateUrl('show_portfolio',array('portfolio'=>$portfolioId)));                

}

/**
 * Show Portfolio action.
 * @Route("/portfolio/{portfolio)", name="show_portfolio")
 * ...
 */
public function showPortfolioAction($portfolio){
    //do whatever you need to show this portfolio
}

答案 2 :(得分:0)

我认为这不是正确的方法。

我的意思是,如果您只想要一个带有修改URL的选择的表单,则不应使用POST作为表单提交方法。那对于GET方法来说更合适。

我认为这不是Symfony2的问题。

你可以像@ carlos-granados那样引用,但不是创建转发,而是抓住提交事件,并使用javascript使用window.location方式重定向described here

调整表格

您可以放弃<form> action=""属性,只填写每个

<option value="{{ path('show_portfolio', { 'slug': portfolio.name }}">{{ portoflio.name }}</option>

将生成正确完全生成路径的节点。然后,确保您的show_portfolio已准备好{slug}以正确的方式从数据库中获取条目

调整控制器方法

$entry = $em->getRepository('Bundle:Portoflio')->findBy(array('slug'=>$request->get('slug')));

但这是我原来回答的地方。您应该查找@ParamConvertersee for something similar to here

然后添加javascript

$('form').submit(function(event){ 
    event.preventDefault(); 
    window.location.href = $('form select').value(); 
});