我是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();
}
答案 0 :(得分:0)
根据评论,Symfony 3使用PSR-0或PSR-4。假设您正在使用Composer,请在composer.json
文件中配置支持哪一个。
使用PSR-4,您的文件名必须与您的类名相对应,并且您的目录名必须与您的名称空间相匹配。因此,如果您的实体在名称空间FloydWarshall
中被称为AppBundle\Entity
:
src/AppBundle/Entity
FloydWarshall.php
这种严格的原因是Composer附带的自动加载器。执行new AppBundle\Entity\FloydWarshall
时,自动装带器会知道在哪个位置找到该类的文件。在您的情况下,您已将其命名为fw.class.php
,因此自动加载器无法找到它。
切向问题,您使用的是dev
环境吗?如果您是,Symfony会给您一个非常有用的错误消息,它将帮助您更快地诊断问题。