【问题标题】:Fatal error : class not found in Zend framework 2致命错误:在 Zend 框架 2 中找不到类
【发布时间】:2014-04-15 14:39:42
【问题描述】:

我被 zend 框架困住了,我是新手,并试图实现一个网站只是为了学习它。所以我的网站是关于披萨的。当我尝试添加比萨饼时,在发送表单数据后,我收到以下错误消息:致命错误:在 C:\wamp\www\pizzalast\module\PizzaPoint\src\PizzaPoint 中找不到类 'PizzaPoint\Controller\Pizza' \Controller\PizzaController.php 在第 27 行,在这一行,我正好实例化了位于“模型”文件夹中的 Pizza 类的一个对象。

这是来自披萨控制器的添加操作:

public function addAction()
    {
    $form = new PizzaForm();
    $form->get('submit')->setValue('Add');

    $request = $this->getRequest();
    if($request->isPost())
        {
        $pizza = new Pizza();
        $form->setInputFilter($pizza->getInputFilter());
        $form->setData($request->getPost());

            if($form->isValid())
                {
                    $pizza->exchangeArray($form->getData());
                    $this->getPizzaTable()->savePizza($pizza);
                }       
        }   
    return array('form' => $form);
    }

这些是 Pizza.php 文件的前 40 行代码:

namespace PizzaPoint\Model;

use Zend\InputFilter\InputFilter;
use Zend\InputFilter\InputFilterAwareInterface;

use Zend\InputFilter\InputFilterInterface;

class Pizza implements InputFilterAwareInterface {

public $id;
public $title;
public $zutaten;
public $smallprice;
public $bigprice;
public $familyprice;
public $partyprice;

protected $inputFilter;

public function exchangeArray($data)
    {
        $this->id            = (!empty($data['id']))         ? $data['id']         : null;
        $this->title         = (!empty($data['title']))      ? $data['title']      : null;
        $this->zutaten       = (!empty($data['zutaten']))    ? $data['zutaten']    : null;
        $this->smallprice    = (!empty($data['smallprice'])) ? $data['smallprice'] : null;
        $this->bigprice      = (!empty($data['bigprice']))   ? $data['bigprice']   : null;
        $this->familyprice   = (!empty($data['familyprice']))? $data['familyprice']: null;
        $this->partyprice    = (!empty($data['partyprice'])) ? $data['partyprice'] : null;
    }

public function getArrayCopy()
    {
        return get_object_vars($this);
    }
public function setInputFilter(InputFilterInterface $inputFilter)
    {
        throw new \Exception("Not used");
    }

我认为我应该在这里负担的第三件事是 module.php 文件

namespace PizzaPoint;

use PizzaPoint\Model\Pizza;

use PizzaPoint\Model\PizzaTable;

use Zend\Db\ResultSet\ResultSet;

use Zend\Db\TableGateway\TableGateway;

class Module {

public function getAutoloaderConfig()
    {
        return array('Zend\Loader\ClassMapAutoloader'=>array(__DIR__ . '/autoload_classmap.php',),
        'Zend\Loader\StandardAutoloader'=>array('namespaces'=>array( __NAMESPACE__ => __DIR__ . '/src/' . __NAMESPACE__ , ),),);
    }
public function getConfig()
    {
    return include __DIR__ . '/config/module.config.php';   
    }

public function getServiceConfig()
    {
        return array(
          'factories' => array(
              'PizzaPoint\Model\PizzaTable' => function($sm) 
                    {
                        $tableGateway = $sm->get('PizzaTableGateway');
                        $table = new PizzaTable($tableGateway);
                        return $table;
                    },
               'PizzaTableGateway' => function ($sm)
                    {
                       $dbAdapter = $sm->get('Zend\Db\Adapter\Adapter');
                       $resultSetPrototype = new ResultSet();
                       $resultSetPrototype->setArrayObjectPrototype(new Pizza());
                       return new TableGateway('pizza', $dbAdapter, null, $resultSetPrototype); 
                    },
              ),
            );
    }

}

最后是根的结构:

module 

-----\应用程序

------\PizzaPoint

    2. -----\config



              3 ------\ module.config.php

    2------\src
                   3 ------\PizzaPoint
                           4 --------\Controller
                                    5 -------\PizzaController.php
                           4---------\Form
                                     5--------\PizzaForm.php
                           4 ---------\Model
                                    5--------\Pizza.php
                                    5--------\PizzaTable.php

【问题讨论】:

    标签: php class zend-framework2


    【解决方案1】:

    由于您的控制器位于PizzaPoint\Controller 命名空间内,当您运行new Pizza() 时,PHP 认为您的意思是new PizzaPoint\Controller\Pizza()。你要么想使用全局命名空间:

    new \PizzaPoint\Model\Pizza()
    

    或者(甚至更好),添加:

    use PizzaPoint\Model\Pizza;
    

    到控制器类的顶部(在命名空间声明下方)将该类导入当前命名空间。那么你现有的代码应该可以工作了。

    【讨论】:

    • 谢谢它的工作,但我现在有这个问题 Zend\Filter\FilterPluginManager::get 无法获取或创建 StripTrim 的实例
    • 这是一个完全不相关的问题,可能需要一个新问题;但没有名为“StripTrim”的 ZF2 过滤器
    • 是的,完全正确,非常感谢您的帮助!
    猜你喜欢
    • 1970-01-01
    • 2014-03-04
    • 1970-01-01
    • 2011-11-08
    • 2015-04-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多