0

"action = '[module]/[action]'" & submit のように定義されたいくつかのアクションがあります。結果は「[module]/[action]」ではなく「[currentUrl]/[module]/[action]」です。理由がわかりません。コードは次のとおりです。

前面に :

<a href="<?php echo ( isset($disabledMajSuivi) && $disabledMajSuivi ? "#" : "javascript:showYesNoDialog('". addslashes(__('enquete.visu.msg.confirmation.majsuivi')). "', 'majSuivi')" ); ?>" >
    <?php echo __('enquete.visu.majsuivi');?>
</a>

showYesNoDialog は、最初の引数が表示される文で、2 番目の引数がコールバック関数である JavaScript 関数であるため、「majSuivi」がコールバックされ、次のようになります。

<script>
function majSuivi(response) {
    if(response == 'yes') {
        document.forms[0].action = "module_name/majsuivi";
        document.forms[0].submit();
    }
}

これはデバッグ済みです。状態はtrueです。

アクション「majSuivi」(大きい) は次のように終了します。

    $this->redirect('enquete/visu?enq_id='.$enq_id
        . (!is_null($personneMorale) ? '&pm_id='.$personneMorale->getPmId() : '') );

しかし、URL が間違っているため、アクションは実行されません (つまり、コードのこの部分は役に立たないのです)。

したがって、URL は次のようになります。http://[baseUrl]/index.php/module_name/majsuivi

代わりに、「majSuivi アクションを呼び出す直前の現在の URL はhttp://[baseUrl]/index.php/enquete/visu/enq_id/24/menu_id/module_name/majsuivi どこにありましたか。/index.php/enquete/visu/enq_id/24/menu_id/「a href」ボタンをクリックするたびに、次のように「module_name」が URL に追加されます。

クリック ->http://[baseUrl]/index.php/enquete/visu/enq_id/24/menu_id/module_name/majsuivi

クリック2 ->http://[baseUrl]/index.php/enquete/visu/enq_id/24/menu_id/module_name/module_name/majsuivi

click3 ->http://[baseUrl]/index.php/enquete/visu/enq_id/24/menu_id/module_name/module_name/module_name/majsuivi

など...

それが routing.yml 設定ファイルから来ているとは思いませんが、誰かがそれができると思ったら、その内容を書きます。

ご協力いただきありがとうございます

4

2 に答える 2

1

次のようなものを使用する必要があります。

document.forms[0].action = "<?php echo url_for('module_name/majsuivi')?>";

また

document.forms[0].action = "/index.php/module_name/majsuivi";

または、routing.yml にこのルートがある場合

document.forms[0].action = "<?php echo url_for('@your_route_name_from_yaml')?>";

は相対パスであり、先頭'module_name/majsuivi'になしで現在の URL と連結されるためです。/

于 2012-05-04T13:34:14.120 に答える
0

どうもありがとう、これらは非常に有用な情報です。特に 3 番目のオプションだと思います。実際には、展開する前にテストするためのさまざまなサーバーがあります。そして、私は2種類の行動を観察しました。

動作 1 : 私がテストしたすべてのソリューションのうち、機能しているのは 1 つだけdocument.forms[0].action = "/module_name/majsuivi";です。

動作 2 : 私がテストしたすべてのソリューションのうち、どれも機能していません。

テストサーバーごとに異なるphpバージョンを掘り下げましたが、2つのサーバーを同じPHPおよびApacheバージョンに配置しても、この問題に関して同じ動作をすることはありませんでした.

デプロイメント環境には動作 1 があるため、次の JavaScript を使用して、この問題を解決しましたdocument.forms[0].action = "/module_name/majsuivi";

前に説明したことはすべて、動作 1 に一致するローカル サーバーで行われていました。

私はすでに最初のオプションをテストしました: document.forms[0].action = ""; どのサーバーでも機能しません。

2番目のものhttp://[baseUrl]/index.php/enquete/visu/enq_id/24/index.php/module_name/majsuivi、それが機能していないことを示しており、ローカルサーバーで機能しない場合は、他のサーバーでも機能しないと確信しています。

今のところ問題を解決したので、 3番目の解決策はテストしていませんが、効果的な解決策に見えます。うまくいくはずです。使ったら更新します。

ありがとうございます。それでは、お元気で

于 2012-05-21T14:47:45.520 に答える