1

私のアプリケーションは、次のようなローカル サーバーのサブディレクトリに構築されています。

http://localhost/application/

問題は、フォーム アクションを「/form/save」に設定すると、フォームが存在しない「localhost/form/save」にルーティングされることです。

フォーム アクションを「/application/form/save」に設定すると、エラーが発生します。これは、Zend が Front_Controller で URL 入力を使用して、要求に使用するモジュール、コントローラー、およびアクションを選択するためです。

base_url をリクエストから解析する簡単な方法はありますか? 何らかの理由で、フォームを除く他のすべてで機能します。

もう 1 つの方法は、base_url をすべてのフォーム アクションに追加して、アプリケーションがさまざまな環境で動作できるようにし、アクションがコントローラーによって受信されたときに解析されるようにすることです。

Zend に既に組み込まれている、このようなことを行うために変数を設定する簡単な方法はありますか? そうでない場合、解決策は何ですか?

この問題に対処するものはどこにも見つからないようです。

4

3 に答える 3

4

この問題は、アクションに最初のスラッシュが含まれているために発生します。ルート相対リンクでリンクを設定すると、宛先アンカーが同じドメイン名の下にある場合、絶対リンクを設定するのと同じになります。("/form/save" は " http://localhost/form/ save " と同等です)。

あなたの場合、データを別のコントローラー/アクションに送信する場合は、フォームにベース URL を追加する必要があるようです。あなたが使用しているZend_Form(そうですか?)最も洗練された解決策はZend_Form、メソッドをオーバーライドして、setAction()設定したすべてのアクションの前にベースURLを追加することです。

class My_Form extends Zend_Form
{
    ...
    public function setAction($action)
    {
        $baseAction = rtrim($this->_getBaseUrl(),'/') . $action;  // Will remove a slash from the end of the base URL, so form actions start with a slash.

        parent::setAction($baseAction);
    }

    private function _getBaseUrl()
    {
        // Retrive your base url from somewhere (config might be a good place).
    }        
}

これで、新しいフォームを作成しMy_Formて呼び出すたびMy_Form::setAction()に、ベース URL が自動的に含まれるようになります。

お役に立てれば。

于 2009-10-29T16:31:43.307 に答える
0

アクションを空白のままにして、同じアクションでフォーム データを処理することもできます。

于 2009-10-28T23:16:52.930 に答える
0

私は Zend Framework を初めて使用するので、これが最善の解決策かどうかはわかりませんが、私にとっては問題なく機能します。

次のコードを使用してアクションを設定しました。

    $url = new Zend_View_Helper_Url();
    $this->setAction($url->url(array('controller'=> 'register','action'=>'index'),'default'));
于 2011-03-17T04:26:53.033 に答える