nathanburkett / ecosystem

v0.0.2 2016-04-07 15:44 UTC

This package is auto-updated.

Last update: 2024-09-22 13:23:50 UTC


README

Latest Version on Packagist Software License

Ecosystem 是一个简单而智能的环境管理器,用于您面向用户的面板脚本和样式表。

当您有针对应用不同部分的不同资源集合时,Ecosystems 非常有用 - http://example.comhttp://example.com/admin。为每个部分创建一个 Ecosystem 允许您在单个位置管理每个部分的资源,同时能够在运行时向集合添加新资源。

安装

要将 Ecosystem 作为 Composer 包安装,运行

composer require nathanburkett/ecosystem

安装后,您可以在 config/app.phpproviders 数组中注册服务提供者

'providers' => [

    ...

	NathanBurkett\Ecosystem\Providers\EcosystemServiceProvider::class,
]

并在 aliases 数组中注册 Ecosystem 门面

'aliases' => [

    ...

    'Ecosystem' => NathanBurkett\Ecosystem\Facades\Ecosystem::class,

然后使用 php artisan vendor:publish 发布 Ecosystem 的资产。这将添加文件 config/ecosystem.php。此 配置文件 允许某些环境禁用缓存破坏字符串。

用法

创建新的 Ecosystem

在控制台运行 php artisan,您将看到新的 make:ecosystem 命令。

在控制台运行 php artisan make:ecosystem StandardEcosystem 将在 App\Library\Ecosystems 目录中创建 StandardEcosystem。如果目录不存在,则命令将创建它。

要将 Ecosystem 放置在不同的目录中,将 --namespace=Your\Namespace\Here 添加到命令中。这样做将在以第一个目录段的小写版本开始的目录字符串中创建一个 Ecosystem - 例如,--namespace=Resources\Ecosystems 将将 Ecosystem 放置在 resources\Ecosystems 中。

命令 php artisan make:ecosystem StandardEcosystem 将在 App\Library\Ecosystems 目录中生成以下文件。

<?php

namespace App\Library\Ecosystems;

use NathanBurkett\Ecosystem\Contracts\AssetCollectionContract;
use NathanBurkett\Ecosystem\Entities\AbstractEcosystem as Ecosystem;

class StandardEcosystem extends Ecosystem implements AssetCollectionContract
{
    /**
     * Default StandardEcosystem head scripts
     * @return array
     */
    final public function defaultHeadScripts()
    {
        return [
            '' => ['src' => '']
        ];
    }

    /**
    * Default StandardEcosystem stylesheets
    * @return array
    */
    final public function defaultStylesheets()
    {
        return [
            '' => ['href' => '']
        ];
    }

    /**
    * Default StandardEcosystem footer scripts
    * @return array
    */
    final public function defaultFooterScripts()
    {
        return [
            '' => ['src' => '']
        ];
    }
}

向任何 default 集合添加资产允许您轻松地从任何视图显示它们。

    final public function defaultHeadScripts()
    {
        return [
            'yahoo' => ['src' => '/yahoo.js'],
            'wahoo' => ['src' => '/wahoo.js'],
            'yippee' => ['src' => '/yippee.js']
        ];
    }

这将捆绑资产,直到在视图中输出。在与此路由关联的视图中

    Ecosystem::getHeadScripts();

将输出

<script src="/yahoo.js?123456789"></script>
<script src="/wahoo.js?123456789"></script>
<script src="/yippee.js?123456789"></script>

附加到路由

Ecosystems 通过作为中间件附加来分配给路由和路由组。

Route::group(['middleware' => 'ecosystem', 'ecosystem' => 'App\Library\Ecosystems\StandardEcosystem'], function() {
    Route::get('/', 'IndexController@index');
});

Ecosystems 被覆盖,因此最接近路由的一个将被使用

Route::group(['middleware' => 'ecosystem', 'ecosystem' => 'App\Library\Ecosystems\StandardEcosystem'], function () {
     // NewStandardEcosystem would be used for the '/' route
    Route::get('/', ['middleware' => 'ecosystem', 'ecosystem' => 'App\Library\Ecosystems\NewStandardEcosystem', 'uses' => 'IndexController@index']);
});

动态附加资产

由于资产是在运行时编译和输出的,因此您有权向集合添加一次性资产。这通常在控制器中完成。

<?php

namespace App\Http\Controllers;

use Ecosystem;
// ...

class IndexController extends Controller
{
    public function index() {
        Ecosystem::addScriptToHead('blammo', ['src' => '/blammo.js']);
    }
}

将更改 Ecosystem::getHeadScripts() 输出为

<script src="/yahoo.js?123456789"></script>
<script src="/wahoo.js?123456789"></script>
<script src="/yippee.js?123456789"></script>
<script src="/blammo.js?123456789"></script>

Ecosystem::addScriptToHead()Ecosystem::addStylesheet()Ecosystem::addScriptToFooter() 最多接受三个参数。资产名称、资产属性数组以及设置资产之前已添加到集合中的选项。

function addScriptToHead($name, $attr = array(), $before = null)

$before 参数中提供已注册资产的名称将使新资产位于目标之上。

Ecosystem::addScriptToHead('blammo', ['src' => '/blammo.js'], 'yippee');

产出

<script src="/yahoo.js?123456789"></script>
<script src="/wahoo.js?123456789"></script>
<script src="/blammo.js?123456789"></script>
<script src="/yippee.js?123456789"></script>

可用方法

Ecosystem 门面 揭示某些方法来与注册到具有 Ecosystem 的路由的动作交互。

这三个方法在 html 元素中输出已注册到其集合中的任何资产,并打算在 views 中使用。

Ecosystem::getHeadScripts();
Ecosystem::getStylesheets();
Ecosystem::getFooterScripts();

生态系统 允许您在路由中间件附加的生态系统覆盖的任何区域添加一次性的资产。然而,这通常是在控制器中完成的。

<?php

namespace App\Http\Controllers;

// import the facade
use Ecosystem;

// ...

Ecosystem::addHeadScript($name, $attr = array(), $before = null);

Ecosystem::addStylesheet($name, $attr = array(), $before = null);

Ecosystem::addFooterScript($name, $attr = array(), $before = null);

变更日志

有关最近更改的更多信息,请参阅 变更日志

贡献

有关详细信息,请参阅 贡献指南行为准则

安全

如果您发现任何与安全相关的问题,请通过电子邮件 nathan at nathanb dot me 而不是使用问题跟踪器。

鸣谢

许可协议

MIT 许可协议 (MIT)。有关更多信息,请参阅 许可文件