Silex,没找到上课

时间:2014-11-02 20:19:42

标签: php class controller composer-php silex

我希望在我的控制器" ItemController"中访问一个函数。我总是有错误; 致命错误:Class' Iso \ Controller \ ItemController'没找到...

testsilex / Silex

 - app
 - composer.json
 - src
        - routes.php
        - Iso
            - Controller
                  - ItemController.php

 - vendor
 - web
       - index.php

我在Silex / Web中有一个index.php文件

ini_set('display_errors', 1);
require_once __DIR__.'/../vendor/autoload.php';
$app = require __DIR__.'/../app/app.php';
require __DIR__.'/../src/routes.php';
$app['debug'] = true;
$app->run();

我的itemcontroller看起来像:

<?php
namespace Iso\Controller;
use Silex\Application;
class ItemController
{
    public function indexAction(Request $request, Application $app)
    {
           echo "it works";
    }
}

我的routes.php看起来像:

$app->mount('/testsilex/silex/test', new Iso\Controller\ItemController());

我的composer.json我添加了下一行:

"autoload": {
        "psr-0": {"Iso": "src/"}
    }

有谁知道为什么我的班级找不到?这将是一个小错误,但我无法找到它。谢谢:))

2 个答案:

答案 0 :(得分:4)

在composer配置中,命名空间始终指定为尾随\\

"autoload": {
    "psr-0": {"Iso\\": "src/"}
}

查看documentation

中的示例

答案 1 :(得分:1)

我想说你需要一个绝对标识符来控制你的控制器类。这是一个领先的反斜杠:

$app->mount('/testsilex/silex/test', new \Iso\Controller\ItemController());

或者使用use语句导入名称空间,该语句将始终使用完全限定名称。

...
use Iso\Controller;
...
$app->mount('/testsilex/silex/test', new ItemController());
...