0

ちょっと、ルート(注釈)で選択したオプション値を取得しようとしています。インデックス ビューを含むポートフォリオ コントローラーがあります。インデックス ビュー内には、選択ドロップダウンが 1 つだけあるフォームがあります。最初の 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アクションが呼び出されます (ポートフォリオ コントローラー内) 私のスイッチ ポートフォリオ アクションは

/**
* 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

これは正しい方法ではないと思います。

つまり、URL を変更する選択を含むフォームのみが必要な場合は、フォームの送信方法として POST を使用しないでください。その場合は、GET メソッドに適しています。

これは私の意見であり、Symfony2 の質問ではありません。

@ carlos-granados が参照しているように行うこともできますが、転送を作成する代わりに、送信イベントを取得し、ここで説明さwindow.locationれている方法を使用して javascript を使用してリダイレクトします

フォームを調整する

<form> action=""属性をドロップして、それぞれを埋めるだけです

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

完全に生成された適切なパスを生成するノード。次に、データベースから適切なエントリを取得する準備が整ってshow_portfolioいることを確認してください。{slug}

Adjust Controller メソッド

$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 に答える
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 に答える