无法在Silex应用程序中找到控制器

 蔡中均扬玫韵如 发布于 2023-01-19 14:22

早上好,

在过去的几周里,我一直在使用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文件

 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

 app = $app;
    }

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

}

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

有人可以对此有所了解吗?

谢谢,拉塞尔

1 个回答
  • 我在Silex GitHub问题网站https://github.com/silexphp/Silex/issues/919上发布了这个问题并指出了问题.感谢Dave Marshall.

    网站/的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();
    

    当我重新组织文件时,我必须无意中删除了该行.

    2023-01-19 14:23 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有