Laravel 4 - 从包扩展应用程序控制器


Laravel 4 - Extend application controller from a package

Background

我知道我想做的事情听起来有点不对劲,但我确实有我的理由。基本上,我有一个中央核心应用程序,它是一个默认的 laravel 应用程序,经过一些调整和样板代码,然后我开发了一系列可用于通过作曲家扩展应用程序的软件包。这些包在没有核心框架的情况下无法运行,因此完全可以依赖它。

我想做什么

我想做的是在我的核心应用程序中有一个 BaseController,并让我的软件包中的各种控制器扩展这个 BaseController,以在整个模块包中提供通用功能。

我希望能够将基本控制器放在app/controllers/BaseController.php然后使用以下方法从我的包中扩展它:

class PackageController extends 'BaseController{}

不幸的是,当我这样做时,它仍然在软件包(当前工作台)中查找控制器,并且出现错误:

include(/var/www/l4core.dev/workbench/myvendor/mypackage/src/controllers/BaseController.php): 无法打开流:没有此类文件或目录

谁能告诉我我在这里做错了什么。我正在寻找一种解决方案,使我可以轻松地在供应商目录和工作台之间移动我的软件包以进行开发。任何帮助非常感谢

更新

前面提到的错误消息似乎是由于我的软件包中包含/vendor/composer/classloader.php - 我现在已经删除了供应商目录并完成了新的作曲家安装。这并没有解决问题,但它至少已经改变了它,因为我现在收到以下错误消息:

找不到类"基本控制器"

我的包作曲家.json

{
    "name": "modules/sesame",
    "description": "",
    "authors": [
        {
            "name": "any",
            "email": ""
        }
    ],
    "require": {
        "php": ">=5.4.0",
        "illuminate/support": "4.0.x",
        "zizaco/confide": "dev-master",
        "zizaco/entrust": "dev-master",
        "conarwelsh/mustache-l4": "dev-master"
    },
    "autoload": {
        "classmap": [
            "src/controllers",
            "src/models",
            "src/migrations",
            "src/seeds"
        ],
        "psr-0": {
            "Modules''Sesame": "src/"
        }
    },
    "minimum-stability": "dev"
}

确保执行:

php artisan dump-autoload

并验证您的类BaseController是否在/vendor/composer/autoload_classmap.php 中。

或者像OP所说的那样,删除vendor目录并再次运行composer install有时可以解决问题。