2012-03-30 9 views
1

zendフォームのsetActionに問題があります。私は、複数ページのフォームを持っていると私は同じアクションを設定したすべてのサブフォームZend form setActionが間違ったURLに送信されます

$subForm->setAction('process') 
     ->setMethod('post'); 

に私のフォームは、indexアクション、アプリケーションコントローラ、買い手モジュール http://localhost/project/public/buyer/applicationでレンダリングされているが、私はフォームを送信する際、URLがリダイレクトされます/投稿されたURL:http://localhost/project/public/buyer/process(存在しないページに)

私のマシンに仮想サーバーをセットアップすると動作しているようですが、localhostを使って作業しているときや他のサーバー。

私は、URLの全体を試みたが、それはすなわち$subForm->setAction('buyer/applciation/process')または$subForm->setAction('application/process')

答えて

2

私はいつもそれが最も簡単なのURLヘルパーを使用してビューからフォームのaction属性を設定することが分かってきました。あなたがしたこの

<?php echo $this->form->setAction($this->url(array(
    'action' => 'process' 
))) ?> 
+0

urlはアクションヘルパーになっていますか?$ this-> url-> url(array( 'action' => 'process')のように使用できますが、$ this-> url()は使用できません)私はサブフォームを準備しながらzend_formを拡張して、すべてのフォームにアクションを設定しているmultipageという抽象クラスを持っています。私はそれを動作させるために、いくつかのコードを変更する必要があります(このシナリオでは、コントローラ内の複数の場所が好きではありません)。ありがとうございます。私はなぜ私が働いていないのか、より良い提案が得られるかどうかを待っています。 –

+0

「Url」というアクションヘルパーとビューヘルパーの両方があります。私の例はビュースクリプトからのものですが、あなたの設定に合っていればあなたのコントローラーでアクションヘルパーを使うことができます – Phil

0

のようにそれを試してみてください$ subForm-> SetActionは(「プロセス」)、それは基本的に前提となるだろう意味/プロジェクト/公共/買い手/アプリケーションのURLに相対パスを設定していますプロジェクト、パブリック、バイヤーはディレクトリであり、プロセスはアプリケーションと同じレベルでなければなりません。

$this->form->setAction('/application/process'); 

私は本当に正しいURLが何であるかわからないんだけど、それは相対的なもはやいないように私は/大手でそのURLを使って試してみた:

はこれを試してみてください。

+0

MVCアプリケーションのハードコードURL文字列は一般的には悪い考えです。ルート名やヘルパー(URLジェネレータ)を使用する方が良いです。 – Phil

+0

@Philに絶対に同意してください。現時点では、セットアップと、ドキュメントルートがオフになっているかどうか、またはモジュールが関与しているかどうかを前提にしています。希望のURLがわからなければ、とにかくこの時点で推測しています。 –

0

問題はprocessは、コントローラ内のアクションではないということであるように、それは私には見えます

$subForm->setAction($this->getView()->url(array('action'=>'process','controller'=>'application','module'=>'buyer'),null,true)) 
     ->setMethod('post'); 
+2

これは、philがコントローラのビューヘルパーを使用していることを示唆したものと同じです –

0

を行います。メソッドまたはクラスが呼び出されるように見えます。 ZFで最も頻繁に行われることは、フォームアクションをアクションに設定することです。

//set form action to a controller action where you can call process against the form. 
$form->setAction('action')//or 'controller/action' or 'module/controller/action' 

ZF参照がZendのは私のURLを処理しているようだ、私は私のコードで間違っていたものを見つけmulti part forms

+0

私はあなたが質問を完全に読まなかったと思いますし、はいプロセスが私の動作の名前です –

+0

@Rohan申し訳ありません。 – RockyFord

1

行う方法についてかなり広範な議論を持っています - 買い手コントローラとして http://localhost/project/public/buyer/applicationとつまり、アクションはインデックスであり、私のURLには含まれていないからです。私のコード$form->setAction('process');は、アプリケーションがアクションであることを前提として、単に「アプリケーション」を「プロセス」http://localhost/project/public/buyer/processに置き換えるだけでした。もし私が間違っていなければ、それはバグかもしれないし、そうかもしれない。

私はアクションインデックスをフォームの名前に変更しましたが、現在は動作しているようです。私は@Philがどのように提案したのか好きだった。しかし、ちょうど誰か他の誰かを入れてください

関連する問題