【问题标题】:Internal Erro 500 when using class in symfony 3在 symfony 3 中使用类时出现内部错误 500
【发布时间】:2016-09-22 03:33:10
【问题描述】:

我真的是 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();

}

【问题讨论】:

  • FloydWarshall 类的__construct 方法是什么样的?猜测是因为该文件没有使用 PSR-4 兼容的文件名 - 它应该被称为 FloydWarshall.php 而不是 fw.class.php。然而,Symfony 应该会为您提供一些非常好的错误报告,这些报告会指出您正确的问题——您使用的是调试(即开发)环境吗?
  • 我会在 ajax 请求中收到此错误,因此 browserconsole 中没有错误......只有上述描述。
  • 打开错误报告.. ini_set('display_errors', 'On'); error_reporting(E_ALL).. 500 错误基本上说.. 你真的搞砸了一些东西..
  • @Blowski Omg,我猜你只是用那个评论把它钉住了^^
  • 你应该将@Blowski 的答案标记为正确的答案!

标签: php symfony


【解决方案1】:

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

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

  • 必须在目录src/AppBundle/Entity
  • 文件必须命名为FloydWarshall.php

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


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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多