php - Laravel 4 - 从包中扩展应用程序 Controller

标签 php namespaces laravel laravel-4

背景

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

我想做什么

我想做的是在我的核心应用程序中拥有一个 BaseController,并让我的包中的各种 Controller 扩展此 BaseController 以在各个模块包中提供通用功能。

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

class PackageController extends \BaseController{}

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

include(/var/www/l4core.dev/workbench/myvendor/mypackage/src/controllers/BaseController.php): failed to open stream: No such file or directory

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

更新

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

Class 'BaseController' not found

我的包composer.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有时可以解决问题。

关于php - Laravel 4 - 从包中扩展应用程序 Controller ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19449916/

相关文章:

java - 超出 post_max_size 时的 php 行为

javascript - JQuery Popup 仅适用于一个项目

namespaces - 使用 DQL 转义命名空间中的反斜杠(Doctrine 2)

javascript - 在选择图像时预览编辑图像的图像(即时)

apache - 使用 .htaccess 从子域的目录中获取内容

php - 从非英语语言下载文件名时未正确显示在下载的文件上

typescript - 了解 TypeScript 导入、模块和命名空间

php spl_autoload 不适用于语法错误的命名空间

javascript - Laravel 4,将变量传递给 javascript 中的路由

php - 查询背后的实时搜索引擎逻辑