Symfony未正确加载控制器:致命错误:调用成员函数addResource()

时间:2015-06-09 22:05:31

标签: php symfony

我在Symfony2中玩DDD,我添加了以下控制器: \src\Coredomain\Companies\RestBundle\Controller\CompanyController.php

namespace Coredomain\Companies\RestBundle\Controller;

use [...] ;

class CompanyController
{
    public function indexAction()
    {
        return $this->render('default/index.html.twig');
    }
}

关于路线,我在我的主路线中。我有:

coredomain_companies_rest:
    resource: "@CoredomainCompaniesRestBundle/Resources/config/routing.yml"

\src\Coredomain\Companies\RestBundle\Resources\config\routing.yml

coredomain_companies_rest_company:
    resource: "@CoredomainCompaniesRestBundle/Controller/CompanyController.php"

现在,当我浏览任何页面或运行php app/console debug:router时,我得到:

PHP Fatal error:  Call to a member function addResource() on a non-object in /vagrant/coredomain/vendor/symfony/symfony/src/Symfony/Component/Routing/Loader/PhpFileLoader.php on line 45
[2015-06-09 12:03:32] php.CRITICAL: Fatal Error: Call to a member function addResource() on a non-object {"type":1,"file":"/vagrant/coredomain/vendor/symfony/symfony/src/Symfony/Component/Routing/Loader/PhpFileLoader.php","line":45,"level":-1,"stack":[]} 

当我查看PhpFileLoader.php:45时,我看到了:

44| $collection = self::includeFile($path, $this);
45| $collection->addResource(new FileResource($path));

我检查了$path var,它包含:

\vagrant\coredomain\src\Coredomain\Companies\RestBundle\Controller\CompanyController.php

然后我检查了$collection,其中包含int(1)。事实证明self::includeFile($path, $this)返回1而不是对象。该方法如下所示:

private static function includeFile($file, PhpFileLoader $loader)
{
    return include $file;
}

所以基本上include $path;会返回1true。这给我提出了两个问题。因为当我在那里放置一个断点时,当我删除路由并使用Symfony2附带的样本控制器时,似乎运行。但是,当我为自己的控制器添加路由时,它会运行。

那么我为自己的路线运行这部分代码有什么不对呢?为什么这会返回1?这个PhpFileLoader不是用于类而是用于平面PHP文件吗?

谢谢。

1 个答案:

答案 0 :(得分:0)

是的,我的坏!

coredomain_companies_rest_company:
    path:      /
    defaults:  { _controller: CoredomainCompaniesRestBundle:Company:index }

这就是路由在Symfony上的工作方式。解释一个答案会很长。关于这个问题,文档得到了很好的解释:http://symfony.com/doc/current/book/routing.html

resource a reference to another routing file需要包含在实际的include中。

如果包含的文件没有返回另一个特定值,PHP New-ADUser -name "$firstName $lastName" -SamAccountName "$firstName.$lastName" -GivenName "$firstName" -Surname "$lastName" -DisplayName "$firstName $lastName" -Path "OU=$Dpart,OU=Employees,DC=OPR,DC=Local" -Enabled $true -AccountPassword $PWD -ChangePasswordAtLogon $true -EmailAddress "$firstName.$lastName@opr.org" 也返回1.

From the PHP documentation :

  

处理返回:include失败时返回FALSE并发出警告。成功包括,除非被包含文件覆盖,否则返回1.

和:

  

可以在包含文件中执行return语句,以终止该文件中的处理并返回调用它的脚本。