maynard-malone / core-bundle
Maynard Malone 的核心包
Requires
- antimattr/google-bundle: ~2.0
- guzzle/guzzle: ~3.9
- sonata-project/cache: ~1.0
- sonata-project/cache-bundle: ~2.2
- sonata-project/core-bundle: ~2.3
Suggests
- codeconsortium/ccdn-user-security-bundle: To use the client login voter.
- nelmio/alice: To use the fixtures processors.
- sonata-project/admin-bundle: To use the admin base classes.
- sonata-project/doctrine-orm-admin-bundle: To use the admin base classes.
- sonata-project/user-bundle: To use the provided User/Group entities.
This package is not auto-updated.
Last update: 2016-10-11 10:07:24 UTC
README
此包提供各种工具,以快速开发使用 Symfony2 的应用程序。
注意:这是一个进行中的工作,目前不打算公开使用(尽管您当然可以)。
它提供了 Maynard Malone 在我们的基于 Symfony2 的 Web 应用程序中使用的常用功能,例如
- 到各种社交媒体 API 的简单接口。
- 基于事件的 JavaScript 变量暴露。
- 具有 Sonata Admin 集成的 Cron 系统,允许定期执行 Symfony 控制台命令。
安装
下载包
在命令行中,浏览到您的项目根目录并执行
$ composer require "maynard-malone/core-bundle" "dev-master"
启用包
// app/AppKernel.php public function registerBundles() { return array( // ... new MaynardMalone\CoreBundle\MaynardMaloneCoreBundle(), ); }
用法
社交媒体 API 客户端
通过配置包简化了社交媒体 API 客户端的创建。每个客户端都是独立的,包括内部使用的 Guzzle 客户端。
创建客户端
# app/config.yml maynard_malone_core: twitter: clients: example: access_token: %twitter_access_token% # Token from parameter or similar. cache: adapter: memcached # Sonata Cache adapter. ttls: statuses/user_timeline: 60
获取客户端
选项 A:直接从池中获取
use MaynardMalone\CoreBundle\Model\Twitter\Enum\DataType; public function twitterProxyAction($user) { $client = $this->get('mm.core.twitter.client_pool')->get('example'); // ... }
选项 B:用服务包装
# services.yml services: # ... vendor.twitter_client: class: MaynardMalone\CoreBundle\Service\Twitter\TwitterClient factory: [ @mm.core.twitter.client_pool, get ] arguments: [ example ]
use MaynardMalone\CoreBundle\Model\Twitter\Enum\DataType; public function twitterProxyAction($user) { $client = $this->get('vendor.twitter_client'); // ... }
客户端 HTTP 配置
HTTP 配置可以针对包中所有与 HTTP 相关的服务进行全局配置,或针对每个客户端进行覆盖。
maynard_malone_core: # ... http: tcp_nodelay: true timeout: 5000 proxy: host: 127.0.0.1 port: 8080 instagram: clients: example: # ... http: # tcp_nodelay setting will go back to default of false. timeout: 20000 proxy: enabled: false
通过 JavaScript 暴露变量
当调用 Twig 函数 js_expose_config
时,通过中央 Symfony 事件调度器分发一个名为 MaynardMalone\CoreBundle\Event\JsConfigExposureEvent
的事件,事件名为 MaynardMalone\CoreBundle\Event\Events::JS_CONFIG_EXPOSURE
。
默认情况下,这包含在 MaynardMaloneCoreBundle::layout.html.twig
模板中,作为所有脚本之前的 foot_script
块的一部分。
此事件提供了设置/删除数据的能力,然后这些数据将作为全局对象暴露给 JavaScript。
方法委托给 PropertyAccessor
,允许设置嵌套元素。
use MaynardMalone\CoreBundle\Event\JsConfigExposureEvent; public function onJsConfigExposure(JSConfigExposureEvent $event) { $event->set('[i18n][form][validation_error]', 'Please check the errors below.'); $event->setMulti( array( '[i18n][form][modal][confirmation]' => 'Thanks for entering.', '[locale]' => 'en', ) ); }
默认情况下,值作为全局 ExposedConfig
对象暴露。
上述内容将产生
var ExposedConfig = { i18n: { form: { validation_error: 'Please check the errors below.', modal: { confirmation: { 'Thanks for entering.' } } }, }, locale: 'en' };
资产管理
提供与独立前端工作流程的集成支持(例如 Grunt/Gulp)。
假设使用两种应用程序资产表示,一种用于生产(例如,压缩和连接)和一种用于开发(例如,未压缩,单个文件)。然而,实际上这只是两组不同的资产,没有任何东西将它们联系在一起,或者对它们的创建方式做出假设。
一个JSON配置文件决定了两个环境的资产路径。
{ "css": { "dev": [ "css/vendor/library.css", "css/app.css" ], "prod": ["css/all.min.css"] }, "js": { "dev": [ "vendor/jquery.min.js", "vendor/respond.min.js", "bundles/fosjsrouting/js/router.js", "js/app.js" ], "prod": ["js/all.min.js"] } }
基本包配置
maynard_malone_core_bundle: # ... global_assets: # Path to assets configuration file source: %kernel.root_dir%/config/assets.json # Global variable exposed through to Twig variable: app_assets web_dir: web
Twig消费
基本 layout.html.twig
模板自动化与资产管理集成。
{% set css_assets = app.debug ? app_assets.css.dev : app_assets.css.prod %} {% for asset in css_assets %} <link type="text/css" rel="stylesheet" href="{{ asset(asset) }}"/> {% endfor %}
缓存破坏
通过启用缓存破坏,生产资产的路径将被重写以包含缓存破坏者。
例如,如果你的工作流程输出生产CSS为 all.min.<sha1>.css
,你可以这样配置
maynard_malone_core: # ... global_assets: cache_busting: enabled: true asset_pattern: '{file_name}.{buster}.{extension}'
你的CSS资产配置如下
{ "css": { "dev": [ "css/vendor/library.css", "css/foo.css", "css/bar.css ], "prod": ["css/all.min.css"] } }
在容器编译期间,将搜索匹配资产模式的文件(例如,在这种情况下是 all.min.*.css
),并通过Twig暴露出来。