Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/symfony/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Symfony未正确加载控制器:致命错误:调用成员函数addResource()_Php_Symfony - Fatal编程技术网

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

Php Symfony未正确加载控制器:致命错误:调用成员函数addResource(),php,symfony,Php,Symfony,我在Symfony2中使用DDD,我添加了以下控制器: \src\Coredomain\companys\RestBundle\Controller\CompanyController.php namespace Coredomain\Companies\RestBundle\Controller; use [...] ; class CompanyController { public function indexAction() { return $thi

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

use [...] ;

class CompanyController
{
    public function indexAction()
    {
        return $this->render('default/index.html.twig');
    }
}
至于路线,我的主要路线中有。yml:

coredomain_companies_rest:
    resource: "@CoredomainCompaniesRestBundle/Resources/config/routing.yml"
\src\Coredomain\companys\RestBundle\Resources\config\routing.yml
中:

coredomain_companies_rest_company:
    resource: "@CoredomainCompaniesRestBundle/Controller/CompanyController.php"
现在,当我浏览到任何页面或运行
php应用程序/控制台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
变量,它包含:

\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;
}
所以基本上
包含$path返回
1
true
。这给我提出了两个问题。因为当我在那里放置断点时,当我删除路由并使用Symfony2附带的示例控制器时,似乎没有运行断点。但是,当我为自己的控制器添加路由时,它确实会运行

那么,如果它为我的路线运行这部分代码,我会做错什么呢?为什么返回1?这个PhpFileLoader不是用于类,而是用于平面PHP文件吗

谢谢。

是的,我的错

coredomain_companies_rest_company:
    path:      /
    defaults:  { _controller: CoredomainCompaniesRestBundle:Company:index }
这就是路由在Symfony上的工作方式。用一个答案来解释这一点需要相当长的时间。关于这一点,文档中有相当详细的解释:

资源是需要包含在实际资源中的资源

另外,如果包含的文件未返回其他特定值,PHP
include
将返回1

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

以及:

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

你试过更“经典”的路线吗?像这样:?我不得不把“CompanyController:index”改为“Company:index”,但会有什么结果呢?这解决了我的问题。为什么这样做有效?我是Symfony2的新手,所以我也在尝试确定是否应该使用“经典”路线,或者找出我的其他路线不起作用的原因。非常感谢你。