Laravel blade 动态目录
Laravel blade dynamic directory
我正在研究如下的模块化结构
modules
module
controllers
models
views
但是我正在努力弄清楚如何从动态目录加载视图,例如可能有 20 个不同的模块,每个模块都从它们自己的目录加载视图,这是否可以通过 blade 呈现的方式实现目前有模板吗?
结帐 pingpong/modules
:http://sky.pingpong-labs.com/docs/2.1/modules。该软件包可以完成您想要做的事情以及更多。
要从特定模块加载视图(使用上述包),您可以这样做:
view('moduleName:view-name')
尽管您询问的是 "modular" 行为,但如评论中所述,您可能需要考虑服务提供商和包。 Laravel 更 Service-Oriented Architecture。作为参考,您可以在维基百科上了解更多关于 SOA 的信息。
恕我直言,模块是一种古老的做法,并且在涉及依赖项时不灵活 - 当两个包需要覆盖包中的相同依赖项但又彼此不了解时 - 哪个优先?
创建包
为了让您开始使用,最快的方法是创建您自己的包,它将拥有自己的存储库(我们假设将是 GIT 和一个本地存储库 - 但是它可以在任何地方, GitHub、Bitbucket 甚至您自己的私人服务器上的私人存储库。
首先创建您的存储库,我假设您是在本地 /Users/developer/Projects
.
$ cd ~/Projects
$ git init blog
根据 Composer Documentation,您需要一个 Composer 配置,以便您的应用程序更新 vendor
中的包。
您需要在刚刚创建的 blog
存储库中创建它(文件: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
此处唯一必需的 files/directories 是 composer.json
文件和 src
目录。
如果您参考 Laravel Documentation - Package Development,您将很快了解如何 set-up 服务提供商、路由服务提供商并使您的包可发布。这就是您要实现的目标?
当您将内容发布到应用程序中时,它允许您覆盖应用程序中的视图并保持包的通用性,而无需将内容组合在一起。
注册一个包
您现在想要在您的应用程序中注册您的包,只需编辑您的 application/project composer.json
.
因为你的包是私有的你需要告诉作曲家你的存储库在哪里。在 "type": "project",
配置之后,您需要定义存储库;类似于:
"repositories": [
{
"type": "vcs",
"url": "/Users/developer/Projects/blog"
}
]
您需要通知 composer 您需要您的博客包,当 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 的一部分,并且有一个学习曲线。
我正在研究如下的模块化结构
modules
module
controllers
models
views
但是我正在努力弄清楚如何从动态目录加载视图,例如可能有 20 个不同的模块,每个模块都从它们自己的目录加载视图,这是否可以通过 blade 呈现的方式实现目前有模板吗?
结帐 pingpong/modules
:http://sky.pingpong-labs.com/docs/2.1/modules。该软件包可以完成您想要做的事情以及更多。
要从特定模块加载视图(使用上述包),您可以这样做:
view('moduleName:view-name')
尽管您询问的是 "modular" 行为,但如评论中所述,您可能需要考虑服务提供商和包。 Laravel 更 Service-Oriented Architecture。作为参考,您可以在维基百科上了解更多关于 SOA 的信息。
恕我直言,模块是一种古老的做法,并且在涉及依赖项时不灵活 - 当两个包需要覆盖包中的相同依赖项但又彼此不了解时 - 哪个优先?
创建包
为了让您开始使用,最快的方法是创建您自己的包,它将拥有自己的存储库(我们假设将是 GIT 和一个本地存储库 - 但是它可以在任何地方, GitHub、Bitbucket 甚至您自己的私人服务器上的私人存储库。
首先创建您的存储库,我假设您是在本地 /Users/developer/Projects
.
$ cd ~/Projects
$ git init blog
根据 Composer Documentation,您需要一个 Composer 配置,以便您的应用程序更新 vendor
中的包。
您需要在刚刚创建的 blog
存储库中创建它(文件: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
此处唯一必需的 files/directories 是 composer.json
文件和 src
目录。
如果您参考 Laravel Documentation - Package Development,您将很快了解如何 set-up 服务提供商、路由服务提供商并使您的包可发布。这就是您要实现的目标?
当您将内容发布到应用程序中时,它允许您覆盖应用程序中的视图并保持包的通用性,而无需将内容组合在一起。
注册一个包
您现在想要在您的应用程序中注册您的包,只需编辑您的 application/project composer.json
.
因为你的包是私有的你需要告诉作曲家你的存储库在哪里。在 "type": "project",
配置之后,您需要定义存储库;类似于:
"repositories": [
{
"type": "vcs",
"url": "/Users/developer/Projects/blog"
}
]
您需要通知 composer 您需要您的博客包,当 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 的一部分,并且有一个学习曲线。