Laravel 5项目结构(插件系统)


Laravel 5 Project Structure (Plugin System)

我正在尝试开发我的第一个Laravel(5)应用程序,它可以通过插件进行扩展。我读了很多关于插件架构的文章,但我正在努力解决的是在Laravel中组织这样一个项目的最佳或首选方式。我将非常感谢这里的任何帮助和建议,因为我不想走上错误的道路。

以下是我对构建和实现的想法

/ Plugins
    - PluginManager.php
    / Contracts
        - PluginInterface.php
    / Plugins
        / ExamplePlugin1
            - ExamplePlugin1.php
        / ExamplePlugin2
            - ExamplePlugin2.php

问题1:根目录/插件目录的最佳位置在哪里?直接在app/root文件夹或类似app/Http的地方

在应用程序启动时,我希望PluginManager类扫描Plugins/Plugins/子目录,因为所有安装的插件都将驻留在该目录中。在这一点上,PluginManager将创建这些插件类的反射实例,并将它们存储在一个数组中,以便以后可以循环使用它们,并在它们存在的情况下调用它们上的方法。

问题2:由于我希望PluginMananger可用于所有请求,因此我应该使用服务提供商和Facade吗

问题3:这种方法有效吗?或者有人能提供替代解决方案吗

所有这些插件都将实现PluginInterface接口,这样PluginManager类就可以在所有插件上调用init()函数。

感谢您抽出时间

问题1

要做到这一点,最简单的方法是创建一个目录"app/Plugins"("app/Http/Plugin斯"仅当您的插件特定于Laravel核心应用程序或路由@RTM:"将Console和Http目录视为向应用程序的"核心"提供API。")。

问题2

是的!@请参阅:使用延迟提供程序的性能问题

问题3

也许你能在你的应用程序根目录中创建一种插件锁定,以避免在每次请求时扫描"应用程序/插件"吗?