关于 php:Unable to find controller in Silex Application

Unable to find controller in Silex Application

早上好,

在过去的几周里,我一直在使用 Silex 开发一个应用程序,昨晚我要么对我的代码进行了更改,要么在更新 composer 的过程中更新了一些东西,但它不起作用。

我正在使用 \\'Igorw\\\\\\\\ConfigServiceProvider\\' 来加载链接到我配置的控制器的路由。但是当我访问网页时,我收到错误消息:

1
InvalidArgumentException: Unable to find controller"controllers.admin:index".

我的文件如下

composer.json

1
2
3
4
5
6
7
8
9
10
11
12
13
{
   "require": {
       "silex/silex":"1.2.*@dev",
       "igorw/config-service-provider":"1.2.*@dev",
       "symfony/yaml":"2.5.*@dev"
    },

   "autoload": {
       "psr-4": {
           "Turtle\\\\Controllers\":"src/turtle/controllers"
        }
    }
}

config/routes.yml

1
2
3
4
5
config.routes:
  admin:
    pattern: /admin
    defaults: { _controller: 'controllers.admin:index' }
    method: GET

web/index.php

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<?php

require_once __DIR__ . '/../vendor/autoload.php';

use \\Igorw\\Silex\\ConfigServiceProvider;
use \\Turtle\\Controllers\\AdminController;

$app = new Silex\\Application;

$app["debug"] = true;

// load the routes
$app -> register (new ConfigServiceProvider(__DIR__ ."/../config/routes.yml"));
foreach ($app["config.routes"] as $name => $route) {
    $app -> match($route["pattern"], $route["defaults"]["_controller"]) -> bind($name) -> method(isset($route["method"]) ? $route["method"] :"GET");
}

// register the classes
$app["controllers.admin"] = $app -> share(function($app) {
    return new AdminController($app);
});

$app -> run();

src/turtle/controllers/AdminController.php

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<?php

namespace Turtle\\Controllers;

use Silex\\Application;
use Symfony\\Component\\HttpFoundation\
equest;

class AdminController {

    protected $app;

    public function __construct(Application $app) {
        $this -> app = $app;
    }

    public function index (Request $request) {
        return"Hello World!";
    }

}

我检查了 $app 变量,它包含一个实例化的 AdminController 类,但由于某种原因,系统正在正确地选择控制器。我真的不明白发生了什么,只能把它归结为一个模糊的错误或更新。

谁能解释一下这个问题?

谢谢,罗素


我在 Silex GitHub 问题网站 https://github.com/silexphp/Silex/issues/919 上交叉发布了此问题,问题已被指出。向戴夫·马歇尔致敬。

web/index.php 文件没有注册 Silex ServerControllerServiceProvider。在系统中添加它后,现在可以工作了。更新后的文件现在看起来像:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<?php

require_once __DIR__ . '/../vendor/autoload.php';

use \\Igorw\\Silex\\ConfigServiceProvider;
use \\Turtle\\Controllers\\AdminController;

$app = new Silex\\Application;

$app["debug"] = true;

$app->register(new Silex\\Provider\\ServiceControllerServiceProvider());

// load the routes
$app -> register (new ConfigServiceProvider(__DIR__ ."/../config/routes.yml"));
foreach ($app["config.routes"] as $name => $route) {
    $app -> match($route["pattern"], $route["defaults"]["_controller"]) -> bind($name) -> method(isset($route["method"]) ? $route["method"] :"GET");
}

// register the classes
$app["controllers.admin"] = $app -> share(function($app) {
    return new AdminController($app);
});

$app -> run();

我一定是在重新组织文件时无意中删除了该行。