まず第一に、そのフォームの問題についてstackoverflowにいくつかの非常によく似た質問があることを私は知っていますが、実際にはどれも私を助けてくれなかったので、自分で試してみました. 私は過去10時間これに固執しており、今は本当に絶望的です.
それでは、ディレクトリ構造から始めましょう。
gpos/
---- application/
--- forms/
------- CustomerForm.php
--- modules/
--- default/
--- controllers/
--- CustomerController.php
--- views/
--- Bootstrap.php
---- public/
---- library/
--- Doctrine/
--- GPos/
--- Doctrine/
--- ActiveEntity.php
--- Models/
--- Customer.php
ご覧のとおり、Zend の標準の forms/ フォルダーを使用してフォームを保存し、Doctrine を DB マネージャーとして使用しています。
そのため、送信元に到達しようとしましたCustomerForm.php
がCustomerController.php
、単に見つからないというエラーが発生しました。
ここに私が得ているエラーがあります:
Fatal error: Class 'Form_CustomerForm' not found in C:\wamp\www\GPos\gpos\application\modules\default\controllers\CustomerController.php on line 9
CustomerController.php:
class CustomerController extends Zend_Controller_Action {
public function init() {
/* Initialize action controller here */
}
public function indexAction() {
$form = new Form_CustomerForm(); //line 9
$form->setAction('/customer/index');
$form->setMethod('post');
$this->view->form = $form;
}
とCustomerForm.php:
class Form_CustomerForm extends Zend_Form {
public function init() {
そして最後にviews/scripts/customer/submit.phtml:
<h2>Customer</h2>
<p>To create blabla</p>
<?php echo $this->form; ?>
Form 名前空間をオートローダーに追加しようと必死に努力してきましたが、Zend のおかげで既に実装されていることを今日知りました。だから...私は何を間違っていますか?リソースを追加する方法やカスタム フォームを管理する方法を説明している投稿をたくさん見つけました。求められていることを正確に実行していると感じていますが、何があっても機能しません。
ActiveEntity.php ファイルの GPos_Doctrine など、さまざまな名前空間を追加しようとして失敗したため、別の場所から来たのではないかと心配していますlibrary/GPos/Doctrine/
。
protected function _initAutoload()
{
$autoloader = new Zend_Application_Module_Autoloader(array(
'namespace' => 'Application',
'basePath' => APPLICATION_PATH,
));
$autoloader->addResourceType('gpos', '/../../library/GPos', 'GPos');
$autoloader->addResourceType('doctrine', '/../../library/GPos/Doctrine', 'GPos_Doctrine');
return $autoloader;
}
これもうまくいきませんでした。「パス」パラメーター (2 番目のパラメーター) についてはよくわかりませんが、チュートリアルで、追加するイース リソース タイプのパスは、オートローダーの basePath からの相対パスでなければならないことを確認したので、これらのパスを思いつきました。
GPos_Doctrine_ActiveEntity() を機能させる唯一の方法は、application.ini に追加autoloadernamespaces[] = "GPos_"
することでした。追加autoloadernamespaces[] = "Form_"
してもうまくいきませんでした... 追加しようとしているリソース タイプの何が問題なのか、よくわかりません。
そのプロジェクトをビルドするためにzfツールを使用しなかったことに注意してください。すべてを正しく機能させる方法が見つからない場合は、それを行うことを検討しています。
また、フォーム クラスの名前を「Application_Form_CustomerForm」に変更しようとしましたが、どちらもうまくいきませんでした。今できることはすべてやり尽くした感があります。私はただ必死です:(
ああ、ちなみに、最初に見つけた唯一の回避策は、フォーム/フォルダーをライブラリに配置することでした。理由はわかりませんが、そのハックを使用したくありません。ほら、私はIT学士号の仕事の卒業としてこのプロジェクトをやっています。それらを機能させるために物事をハッキングするべきではありません:P.
注目してくれた人ありがとう!