gpt4 book ai didi

php - Zend 框架 11.1 : Form_Customer not found in

转载 作者:行者123 更新时间:2023-12-04 16:54:00 25 4
gpt4 key购买 nike

首先,我知道在 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 作为数据库管理器。

所以我一直在尝试联系我的 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 为我们做的。所以......我做错了什么?我发现很多帖子都在说如何添加资源以及如何管理自定义表单,我觉得我正在按照要求做,但不管怎样都行不通。

我担心它来自其他地方,因为我一直在尝试添加不同的命名空间,但没有成功,例如为 library/GPos/Doctrine/ 中的 ActiveEntity.php 文件添加了 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;
}

这也不起作用。我不太确定“路径”参数(第二个参数),但我在教程中看到您添加的资源类型的路径必须与自动加载器的 basePath 相关,所以我想出了这些路径。

我可以让我的 GPos_Doctrine_ActiveEntity() 工作的唯一方法是添加 autoloadernamespaces[] = "GPos_"到 application.ini。添加 autoloadernamespaces[] = "Form_"虽然没有用...我真的不明白我添加的资源类型有什么问题。

请注意,我没有使用 zf 工具来构建该项目。如果我没有找到使其全部正常工作的方法,我正在考虑这样做。

我还尝试将我的表单类重命​​名为“Application_Form_CustomerForm”,但也没有任何好处。我觉得我已经尽力了。我只是绝望:(

哦,顺便说一句,我最初找到的唯一解决方法是将表单/文件夹放入我的库中,这很有效。不明白为什么,但我不想使用那个 hack。看,我正在做这个项目,因为我的 IT 学士学位工作毕业,我真的不应该为了让它们工作而进行黑客攻击:P。

谢谢大家关注!

最佳答案

要么向默认模块添加 Bootstrap (这又会自动设置资源类型)

class Default_Bootstrap extends Zend_Application_Module_Bootstrap
{
protected function _initAutoload() {
$moduleLoader = new Zend_Application_Module_Autoloader(array(
'namespace' => 'Default_',
'basePath' => APPLICATION_PATH . '/modules/default'));
return $moduleLoader;
}
}

或将此添加到您的全局 Bootstrap (使用您的两个自定义资源类型扩展它):
public function _initDefaultResourceTypes() {
$al = new Zend_Application_Module_Autoloader(array(
'namespace' => '',
'basePath' => APPLICATION_PATH.'/modules/default/',
'resourceTypes' => array(
'dbtable' => array(
'namespace' => 'Model_DbTable',
'path' => 'models/DbTable',
),
'mappers' => array(
'namespace' => 'Model_Mapper',
'path' => 'models/mappers',
),
'form' => array(
'namespace' => 'Form',
'path' => 'forms',
),
'model' => array(
'namespace' => 'Model',
'path' => 'models',
),
'plugin' => array(
'namespace' => 'Plugin',
'path' => 'plugins',
),
'service' => array(
'namespace' => 'Service',
'path' => 'services',
),
'viewhelper' => array(
'namespace' => 'View_Helper',
'path' => 'views/helpers',
),
'viewfilter' => array(
'namespace' => 'View_Filter',
'path' => 'views/filters',
)
)
));
$al->setDefaultResourceType('model');
}

看看这个 ZF 1 Skeleton 了解更多信息:
https://github.com/eddiejaoude/Zend-Framework--Doctrine-ORM--PHPUnit--Ant--Jenkins-CI--TDD-

关于php - Zend 框架 11.1 : Form_Customer not found in,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10026056/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com