在symfony 3中使用class时内部Erro 500

时间:2016-05-24 18:55:38

标签: php symfony

我是symfony的新手,但是他是一名长期开发人员。现在我决定看看symfony但是因为它涉及新事物,所以问题远远不够:)

我想在我的项目中包含一个类。每次我创建一个类的实例

$fw = new FloydWarshall($graph, $nodes);

我会收到内部错误500

我做错了什么?

结构:

app/
  ...
bin/
  ...
src/AppBundle/
       Controller/MyController.php
       Entity/
           ...
       Model/
          fw.class.php
       Reposetory/
               ...
var/
  ...
vendor/
   ...
web/
  ...

所以在我的班级中,命名空间看起来像

namespace AppBundle\Controller;

use AppBundle\Entity\lpNodes;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Form\Extension\Core\Type\TextType;
use AppBundle\Model\FloydWarshall;
....

在我的fw.class.php中,标题如下:

<?php

/**
* @package FloydWarshall
* @author Janne Mikkonen <janne dot mikkonen at julmajanne dot com>
* @date $Date: 2013/03/23 05:10:48 $
* @version $Revision: 1.1.1 $
* @license GNU General Public License, version 2 http://www.opensource.org/licenses/GPL-2.0
**/

namespace AppBundle\Model;

class FloydWarshall {

FloydWarshall的构造函数:

/**
* Constructor
* @param array $graph Graph matrice.
* @param array $nodenames Node names as an array.
*/

public function __construct($graph, $nodenames='') {

    $this->weights = $graph;
    $this->nodes   = count($this->weights);
    if ( ! empty($nodenames) && $this->nodes == count($nodenames) ) {
        $this->nodenames = $nodenames;
    }
    $this->__floydwarshall();

}

1 个答案:

答案 0 :(得分:0)

根据评论,Symfony 3使用PSR-0PSR-4。假设您正在使用Composer,请在composer.json文件中配置支持哪一个。

使用PSR-4,您的文件名必须与您的类名相对应,并且您的目录名必须与您的名称空间相匹配。因此,如果您的实体在名称空间FloydWarshall中被称为AppBundle\Entity

  • 它必须位于目录src/AppBundle/Entity
  • 该文件必须被称为FloydWarshall.php

这种严格的原因是Composer附带的自动加载器。执行new AppBundle\Entity\FloydWarshall时,自动装带器会知道在哪个位置找到该类的文件。在您的情况下,您已将其命名为fw.class.php,因此自动加载器无法找到它。

切向问题,您使用的是dev环境吗?如果您是,Symfony会给您一个非常有用的错误消息,它将帮助您更快地诊断问题。