早上好,
过去几周我一直在使用Silex开发一个应用程序,昨晚我要么对代码进行了更改,要么更新了作为更新作曲家的一部分,但它不起作用。
我正在使用' Igorw \ ConfigServiceProvider'加载链接到我配置的控制器的路由。但是当我访问网页时,我收到错误消息:
InvalidArgumentException: Unable to find controller "controllers.admin:index".
我的文件如下
composer.json
{
"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"
}
}
}
配置/ routes.yml
config.routes:
admin:
pattern: /admin
defaults: { _controller: 'controllers.admin:index' }
method: GET
网络/ index.php的
<?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 /龟/控制器/ AdminController.php
<?php
namespace Turtle\Controllers;
use Silex\Application;
use Symfony\Component\HttpFoundation\Request;
class AdminController {
protected $app;
public function __construct(Application $app) {
$this -> app = $app;
}
public function index (Request $request) {
return "Hello World!";
}
}
我检查了$ app变量,它包含一个实例化的AdminController类,但由于某种原因,系统正在正确地拾取控制器。我真的不明白发生了什么,只能把它归结为一个模糊的错误或更新。
有人可以对此有所了解吗?
谢谢,拉塞尔
答案 0 :(得分:8)
我在https://github.com/silexphp/Silex/issues/919的Silex GitHub问题网站上发布了这个问题,并指出了问题。感谢Dave Marshall。
web / index.php 文件未注册Silex ServerControllerServiceProvider。在系统中添加此功能后即可使用。更新的文件现在看起来像:
<?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();
当我重新组织文件时,我必须无意中删除了该行。