Zend_Form setアクション-サブディレクトリに組み込まれたZendアプリケーションで動作しますか?

StackOverflow https://stackoverflow.com/questions/1640738

質問

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

http://localhost/application/

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

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

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

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

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

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

役に立ちましたか?

解決

問題の原因は、アクションに最初のスラッシュを含めることです。ルート相対リンクでリンクを設定する場合、宛先アンカーが同じドメイン名の下にある場合、絶対リンクを設定するのと同じです。 (" / 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が自動的に含まれるようになります。

これがお役に立てば幸いです。

他のヒント

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

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

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

    $url = new Zend_View_Helper_Url();
    $this->setAction($url->url(array('controller'=> 'register','action'=>'index'),'default'));
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top