quazardous / silex-pack
Silex 2.x 的类似框架的扩展包
Requires
- silex/silex: ^2.0@dev
Requires (Dev)
- doctrine/orm: ^2.3
- kriswallsmith/assetic: ^1.0
- mheap/silex-assetic: *@dev
- quazardous/silex-console: *@dev
- symfony/form: ^3.0
Suggests
- dflydev/doctrine-orm-service-provider: Allows packs to manage their own entities
- mheap/Silex-Assetic: Allows packs to add assets via assetic
- quazardous/silex-console: Allows packs to add their own commands
- symfony/translation: Allows packs to have translations
- symfony/twig-bridge: Allows to use the url() function within Twig template
- twig/twig: Allows to use templates with packs
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
因此,有了 JetPackInterface 和 JetPackTrait,您只需提供一些选项即可
... $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 用户包(见下文)。
一些包项目
- Silex 用户包:用户安全助手包