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 用户包:用户安全助手包