petercoles / themes
Laravel 的意见型主题管理器
Requires
- php: >=5.6.0
- illuminate/config: ~5
- illuminate/http: ~5
- illuminate/view: ~5
- nesbot/carbon: ^1.21
Requires (Dev)
- mockery/mockery: ^0.9.4
- phpunit/phpunit: ~5.0
This package is auto-updated.
Last update: 2024-09-17 19:15:57 UTC
README
介绍
这绝对不是为 Laravel 提供的唯一主题管理包(见下文)。每个都有自己的方法。这个包的独特之处在于它的无编码方法。相反,您只需安装它,设置配置规则,然后包将使用这些规则来确定要使用哪个主题。
您可能还想考虑的其他 Laravel 主题包
安装
在命令行运行
composer require petercoles/themes
然后,将服务提供者添加到 config/app.php 文件中的 providers 条目
'providers' => [
// ...
PeterColes\Themes\ThemesServiceProvider::class,
// ...
],
配置
使用以下命令从命令行发布配置文件
php artisan vendor:publish
或者,如果您只想发布此包
php artisan vendor:publish --provider="PeterColes\Themes\ThemesServiceProvider"
生成的主题配置文件只有一个默认设置,将不会触及您的站点。要开始控制使用的主题,请参阅下一节 ...
创建您的主题
默认情况下,此包将继续在 Laravel 的默认位置使用您的视图和资源。要开始使用基于上下文的替代方案覆盖这些默认值,请首先在 Laravel 资源文件夹同一级别创建一个主题文件夹。在其内部创建一个或多个主题的文件夹。
例如
.
|-- app
|-- ...
|-- resources
|-- storage
|-- themes
|-- myFirstTheme
|-- mySecondTheme
|--vendor
在每个主题中放置您的配置、资产和视图文件。例如
.
|-- themes
|-- myFirstTheme
|-- config
|-- resources
|-- assets
|-- img
|-- js
|-- sass
|-- views
配置文件
配置文件将被自动检测和加载。它们将 完全替换 正常配置文件夹中相同名称的任何文件,而不是覆盖个别设置。
资产
没有自动管理资产。建议使用 Elixir,但可以使用任何类似的构建系统来处理、准备并将它们放置在您站点的公共文件夹中。为了避免冲突,建议将它们放置在与主题文件夹名称相同的子文件夹中,例如
.
|-- public
|-- myFirstTheme
|-- img
|-- js
|-- sass
这样做的话,那么主题资产() 和 secure_theme_assets() 辅助函数可用于将资产的链接插入到视图中。例如,以下将自动检测正在使用的主题,并将指向适当的脚本文件
theme_assets('app.js') // will generate "http://www.example.com/theme-name/app.js"
视图
视图将自动检测。如果您的路由、控制器或另一个视图需要存在于您的主题中的视图,则将使用该版本,否则它将按正常视图层次结构查找视图,如果没有在那里找到,则抛出正常异常。所以如果当前主题是 "foo",则 view('pages.about')
首先查找 themes/foo/views/pages/about.blade.php
,如果没有找到,则查找 resources/views/pages/about.blade.php
。
...还有一件事
还有一个辅助函数 themes_path()
,用于构建主题文件夹的文件路径,并且像 Laravel 中的其他路径辅助函数一样,将路径添加到任何接收到的字符串参数之前。
为主题选择设置规则
要控制主题的选择,您可以将规则添加到主题配置文件。这些规则遵循与 Laravel 验证规则相同的语法。包将依次处理每套规则,如果找到匹配项,则将主题设置为给定的值。例如,主题配置
<?php
return [
[
'match' => 'subdomain:admin',
'theme' => 'adminV1'
],
[
'theme' => 'siteV2'
]
];
将导致任何具有 "admin" 子域的路由使用名为 "adminV1" 的模板。所有其他路由将使用模板 "siteV2"。
在单个匹配状态中,甚至正常情况下,也可以使用多个标准,每个标准由管道 ("|") 分隔。例如
[
'match' => 'domain:www.client.com|dates:2016-02-14',
'theme' => 'valentines'
],
匹配器从配置文件的最顶部开始工作,并且第一个满足所有匹配标准的集是获胜的主题。
如果没有为某个主题提供匹配标准,则视为匹配成功(见最后一个示例中倒数第二个示例的默认值)。
空白字符会自动从匹配语句中删除,因此您可以随意布局它们...
[
'match' => '
domain: www.anotherclient.com |
dates: 2016-12-14, 2016-12-26
',
'theme' => 'xmas'
],
目前支持的匹配器包括
日期
规则必须至少接收一个日期,并将服务器时间与该日期进行匹配。如果收到第二个日期,如上面的示例所示,则将其视为一个包含日期范围的边界。日期必须使用国际格式。这可能会在以后的版本中变得更加灵活。
域名
如果完全合格域名(FQDN)与提供的域名完全相同,则规则将匹配,因此子域或顶级域(TLD)的更改将导致匹配失败。如果您在开发、测试和生产环境中使用不同的域名,您可能希望在一个匹配组中包含多个域名规则。请注意,这种行为在未来的版本中可能会变得更加友好。
环境
规则将匹配给定的参数与Laravel的APP_ENV全局变量的值。这通常用作辅助标准,以防止开发中的主题泄露到生产环境中。
HTTP方案
允许HTTP路由接收与HTTPS路由不同的主题。规则以http或https作为其参数。
子域
此规则允许仅匹配子域。
URL段
规则目前接收单个参数,并将其与路由的第一个段进行比较。这也是那些计划进行扩展和更多灵活性的一种,因此请谨慎使用。
路线图
计划添加更多匹配器,包括
- 国家
- 语言
- 查询参数
一些现有的匹配器将进行重新设计,以使其更加友好。建议您不要将项目绑定到dev-master,而是针对特定的分支。重大更改将在(目前尚不存在的)更改日志中清楚地说明,并且该包将使用语义版本控制,因此针对"^0.1"或"^0"等标签不会使您面临API更改的风险。
贡献
欢迎贡献和建议。代码应放置在功能分支上,并包含测试。