Laravel刀片动态目录

时间:2016-01-27 12:44:35

标签: php laravel laravel-5 laravel-5.1 laravel-blade

我正在开发模块化结构,例如下面的

true

然而,我正在努力弄清楚如何从动态目录加载视图,例如,可能有20个不同的模块,每个模块从其自己的目录加载视图,这是否可能与刀片呈现模板的方式一起?< / p>

2 个答案:

答案 0 :(得分:1)

虽然您在询问“模块化”行为,但正如评论中所述,您可能需要考虑服务提供商和软件包。 Laravel更多Service-Oriented Architecture。如上所述,您可以在Wikipedia上了解有关SOA的更多信息。

IMHO模块是一种古老的做法,并且在涉及到依赖性时是不灵活的 - 当两个包需要覆盖包中的相同依赖关系但又不知道彼此 - 这是优先的?

创建包

为了让您开始,最快的方法是创建自己的包,它将拥有自己的存储库(我们假设它将是GIT和本地存储库 - 它可以在任何地方,GitHub上的私有存储库,Bitbucket甚至是你自己的私人服务器。)

首先创建您的存储库,我假设您在/Users/developer/Projects内进行了本地化。

$ cd ~/Projects
$ git init blog

根据Composer Documentation,您需要一个Composer配置,以便您的应用程序更新vendor中的包。

您需要在刚刚创建的blog存储库中创建它(File:composer.json)。

{
    "name": "yourcompany/blog",
    "description": "Description of what the package is.",
    "version": "1.0.0-dev",
    "authors": [
        {
            "name": "Developer Name",
            "email": "developer@company",
            "role": "Software Develper"
        }
    ],
    "require": {
        "php": ">=5.5.9",
    },
    "autoload": {
        "psr-4": {
            "Company\\Blog\\": "src/"
        }
    },
    "minimum-stability": "dev"
}

所以你的包结构应该如下所示:

blog/
├── database/
    ├── migrations/
    ├── seeds/
├── resources/
    ├── assets/
    ├── lang/
    ├── views/
├── src/
    ├── BlogServiceProvider.php
├── composer.json
├── readme.md

这里唯一的强制文件/目录是composer.json文件和src目录。

如果您参考Laravel Documentation - Package Development您将很快了解如何设置服务提供商,路由服务提供商并使您的包可以发布。这是你想要实现的目标吗?

当您将内容发布到应用程序中时,它允许您覆盖应用程序中的视图,并使您的包保持通用,而不会将所有内容混为一谈。

注册包

您现在想要在应用程序中注册您的软件包,只需通过编辑您的应用程序/项目composer.json即可。

由于您的软件包私有,您需要告诉composer您的存储库所在的位置。在"type": "project",配置之后,您需要定义存储库;类似的东西:

"repositories": [
    {
        "type": "vcs",
        "url": "/Users/developer/Projects/blog"
    }
]

你需要通知作曲家你需要你的博客包,当composer无法在packagist上发现它时,存储库只是定义它的位置。

"require-dev": {
    "fzaninotto/faker": "~1.4",
    "mockery/mockery": "0.9.*",
    "phpunit/phpunit": "~4.0",
    "phpspec/phpspec": "~2.1",
    "vendor/blog": "dev-master"
},

但是,一旦您完成了对软件包的开发,您应该将其移到“require”列表中,而不是“require-dev”也替换版本:

"require": {
    "php": ">=5.5.9",
    "laravel/framework": "5.1.*",
    "vendor/blog": "1.0.*"
},

代码示例

您可以查看Laravel Source以构建您的软件包。

总结;包的功能类似于模块,除了包含所有这些包的更多优点,所有包都列为SOLID pattern的一部分,并且有一个学习曲线。

答案 1 :(得分:0)

结帐pingpong/moduleshttp://sky.pingpong-labs.com/docs/2.1/modules。该软件包完成了您正在尝试做的事情以及更多内容。

要从特定模块加载视图(使用上面的包),您可以这样做:

view('moduleName:view-name')