0

嘿,我正在尝试在我的路线(注释)中获取选定的选项值。我有包含索引视图的投资组合控制器。在索引视图中有一个只有一个选择下拉列表的表单。最初的 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>

当用户提交表单时,它会调用switchportfolioAction(在投资组合控制器内)我的开关投资组合 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 中的 URL? 因此,如果用户选择 portofolio1,并提交表单,则 URL 变为:

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

3 回答 3

0

HTML 表单的行为并非如此。您需要添加一些 javascript,在提交表单时运行,停止提交并根据所选选项更改当前位置。

于 2012-08-13T11:06:38.617 回答
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
}
于 2012-08-13T11:12:25.017 回答
0

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

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

在我看来,这不是 Symfony2 的问题。

您可以像@carlos-granados 所指的那样做,但不是创建转发,而是抓住提交事件,并使用 javascript 使用此处描述window.location的方式进行重定向

调整表格

您可以只删除<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')));

但这就是我最初的答案。您应该寻找@ParamConverter查看类似于此处的内容

然后添加javascript

$('form').submit(function(event){ 
    event.preventDefault(); 
    window.location.href = $('form select').value(); 
});
于 2012-08-13T18:38:46.713 回答