quazardous/silex-pack

Silex 2.x 的类似框架的扩展包

dev-master / 1.0.x-dev 2017-03-21 07:01 UTC

This package is auto-updated.

Last update: 2019-12-20 00:05:29 UTC


README

向 Silex 2.x 添加类似扩展包的系统

有一个演示项目

是什么?

Silex Pack 在您的 Silex 项目中添加了一些代码结构,模仿了 Symfony Bundle 的特性。

可挂载包

包可以提供控制器和挂载的前缀。

实现 Quazardous\Silex\Api\MountablePackInterface

可配置模板包

包可以定义私有 Twig 模板文件夹,并可以从应用程序模板文件夹中覆盖。

实现 Quazardous\Silex\Api\TwiggablePackInterface

对于包类 AcmeDemoPack,Silex 包将在 Twig 中注册一个 @AcmeDemo 命名空间。 @AcmeDemo 是从 PackInterface::getName() 创建的。

现在您可以在控制器中使用类似的东西

...
return $app->renderView('@AcmeDemo/default/hello.html.twig', $vars);
...

.twig 模板内部,您也可以使用 @AcmeDemo,例如在 extends 子句中

{% extends '@AcmeDemo/base.html.twig' %}
...

如果您注册了 twig.path,Silex Pack 将在这些文件夹中查找覆盖的模板。

...
$app->register(new TwigServiceProvider(), ['twig.path' => '/path/to/app/views']);
...

对于 @AcmeDemo/default/hello.html.twig,我们将查找在 /path/to/app/views/AcmeDemo/default/hello.html.twig 中。可爱吧?

实体包

包可以将实体暴露给 Doctrine ORM。

实现 Quazardous\Silex\Api\EntitablePackInterface

控制台命令包

包可以添加到控制台中的命令。

实现 Quazardous\Silex\Api\ConsolablePackInterface

可配置包

包可以有配置文件。所有配置文件都将注入到应用程序容器中。

实现 Quazardous\Silex\Api\ConfigurablePackInterface

资源包

包可以有资源。

实现 Quazardous\Silex\Api\AssetablePackInterface

...
{% stylesheets '@AcmeDemo/css/*.css' output="css/acme_demo.css" %}
    <link href="{{ asset(asset_url) }}" type="text/css" rel="stylesheet" />
{% endstylesheets %}
...

您必须注册提供的 Assetic 服务提供者,因为我们必须注入一个“命名空间感知”的 assetic 工厂。

提供的 assetic.factory 知道如何处理带有 @AcmeDemo 前缀的路径。

@AcmeDemo 是从 PackInterface::getName() 衍生的。

Quazardous\Silex\Provider\AsseticServiceProvider

资源倾倒是在标准的 $app['assetic.path_to_web'] 中完成的。

Silex Assetic 了解此提供者的更多信息。

可翻译包

包可以有翻译。

实现 Quazardous\Silex\Api\TranslatablePackInterface

您可以提供 yaml 文件、xliff 文件或 php 文件(返回键 => 翻译数组)。

可链接包

您可以在项目和包之间创建符号链接(例如,对于公共文件)。

实现 Quazardous\Silex\Api\LinkablePackInterface

您必须执行提供的命令 pack:symlinks

可选包

您可以将常用选项注入到您的包中。

实现 Quazardous\Silex\Api\OptionnablePackInterface

...
$app->register(new AcmeDemoPack(), [
    'acme_demo.mount_prefix' => '/acme/demo',
    'acme_demo.entity_subnamespace' => 'Model',
]);
...

见下文。

使用方法

安装

composer require quazardous/silex-pack

使用 Quazardous\Silex\PackableApplication 代替 Silex\Application

实现所需的接口,并将您的包注册为经典的服务提供者。

...
$app = new Quazardous\Silex\PackableApplication;
...
use Acme\DemoPack\AcmeDemoPack;
$app->register(new AcmeDemoPack());
...

享受(或不享受)!

Jet pack

Silex Pack 为简单的函数提供基本的自定义实现。

使用 Quazardous\Silex\Pack\JetPackTrait

并提供一个完整的接口

实现 Quazardous\Silex\Pack\JetPackInterface

因此,有了 JetPackInterfaceJetPackTrait,您只需提供一些选项即可

...
$app->register(new AcmeDemoPack(), [
    'acme_demo.mount_prefix' => '/acme/demo',
    'entity_subnamespace' => 'Model',
]);
...

用户包命名空间 acme_demo. 来自 PackInterface::getName() 的结果,即结果为小写。

查看 JetPackTrait::$packOptions 以获取所有选项的列表。

注意:您需要手动添加所有建议的依赖关系(请参阅示例项目中的典型 composer.json)。

命令

Silex pack 使用 Sillex Console

Silex pack 提供了 assetic 命令

  • assetic:dump : 输出资源
  • assetic:watch : 监视资源并在修改时输出

注册 Quazardous\Silex\Provider\AsseticCommandsProvider

Silex pack 提供了包命令

  • pack:symlinks : 创建包符号链接

注册 Quazardous\Silex\Provider\PackCommandsProvider

包文件夹

包没有严格的结构,但它可能/应该与包非常相似

+-- Acme/ :
|   +-- AlphaPack/
|   |   +-- AcmeAlphaPack.php
|   |   +-- Command/
|   |   +-- Controller/
|   |   +-- Entity/
|   |   +-- assets/
|   |   +-- configs/
|   |   +-- fixtures/
|   |   +-- locales/
|   |   +-- public/
|   |   +-- views/
|   |
|   +-- BetaPack/
|

示例

查看一个 完整的工作示例

您可以用它作为项目的快速启动器。

功能 Silex 用户包(见下文)。

一些包项目