maynard-malone/core-bundle

此包已被废弃且不再维护。未建议替代包。
此包的最新版本(dev-master)没有可用的许可证信息。

Maynard Malone 的核心包

dev-master 2015-08-13 15:40 UTC

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