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暴露出来。