[DependencyInjection] added an extension for the Zend Framework

This commit is contained in:
Fabien Potencier 2010-01-15 08:18:05 +01:00
parent 5e555d3d1a
commit 4cfae0a266
4 changed files with 266 additions and 0 deletions

View File

@ -0,0 +1,121 @@
<?php
namespace Symfony\Components\DependencyInjection\Loader\Extension;
use Symfony\Components\DependencyInjection\Loader\LoaderExtension;
use Symfony\Components\DependencyInjection\Loader\XmlFileLoader;
use Symfony\Components\DependencyInjection\BuilderConfiguration;
/*
* This file is part of the symfony framework.
*
* (c) Fabien Potencier <fabien.potencier@symfony-project.com>
*
* This source file is subject to the MIT license that is bundled
* with this source code in the file LICENSE.
*/
/**
* ZendExtension is an extension for the Zend Framework libraries.
*
* @package symfony
* @subpackage dependency_injection
* @author Fabien Potencier <fabien.potencier@symfony-project.com>
*/
class ZendExtension extends LoaderExtension
{
/**
* Loads the logger configuration.
*
* @param array $config A configuration array
*
* @return BuilderConfiguration A BuilderConfiguration instance
*/
public function loggerLoad($config)
{
$configuration = new BuilderConfiguration();
$loader = new XmlFileLoader(__DIR__.'/xml/zend');
$configuration->merge($loader->load('logger-1.0.xml'));
if (isset($config['priority']))
{
$configuration->setParameter('zend.logger.priority', is_int($config['priority']) ? $config['priority'] : constant('\Zend_Log::'.strtoupper($config['priority'])));
}
if (isset($config['path']))
{
$configuration->setParameter('zend.logger.path', $config['path']);
}
return $configuration;
}
/**
* Loads the mail configuration.
*
* @param array $config A configuration array
*
* @return BuilderConfiguration A BuilderConfiguration instance
*/
public function mailLoad($config)
{
$configuration = new BuilderConfiguration();
$loader = new XmlFileLoader(__DIR__.'/xml/zend');
$configuration->merge($loader->load('mail-1.0.xml'));
if (isset($config['transport']))
{
if ('gmail' === $config['transport'])
{
$config['ssl'] = 'ssl';
$config['auth'] = 'login';
$config['host'] = 'smtp.gmail.com';
$configuration->setAlias('zend.mail.transport', 'zend.mail.transport.smtp.ssl');
}
else
{
if (isset($config['ssl']) && $config['ssl'])
{
$config['transport'] = $config['transport'].'.ssl';
}
$configuration->setAlias('zend.mail.transport', 'zend.mail.transport.'.$config['transport']);
}
}
if (isset($config['ssl']))
{
if (true === $config['ssl'] || 'ssl' === $config['ssl'])
{
$config['ssl'] = 'ssl';
if (!isset($config['port']))
{
$config['port'] = 465;
}
}
$configuration->setParameter('zend.mail.smtp.ssl', $config['ssl']);
}
foreach (array('port', 'host', 'username', 'password', 'auth') as $key)
{
if (isset($config[$key]))
{
$configuration->setParameter('zend.mail.smtp.'.$key, $config[$key]);
}
}
return $configuration;
}
public function getNamespace()
{
return 'http://www.symfony-project.org/schema/zend';
}
public function getAlias()
{
return 'zend';
}
}

View File

@ -0,0 +1,32 @@
<?xml version="1.0" ?>
<container xmlns="http://www.symfony-project.org/schema/services"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.symfony-project.org/schema/services http://www.symfony-project.org/schema/services/services-1.0.xsd">
<parameters>
<parameter key="zend.logger.class">\Zend_Log</parameter>
<parameter key="zend.logger.priority" type="constant">\Zend_Log::CRIT</parameter>
</parameters>
<services>
<service id="zend.logger" class="%zend.logger.class%">
<call method="addWriter">
<argument type="service" id="zend.logger.writer_stream" />
</call>
</service>
<service id="zend.logger.writer_stream" class="Zend_Log_Writer_Stream">
<argument>%zend.logger.path%</argument>
<call method="addFilter">
<argument type="service" id="zend.logger.filter" />
</call>
</service>
<service id="zend.logger.filter" class="Zend_Log_Filter_Priority">
<argument>%zend.logger.priority%</argument>
</service>
<service id="logger" alias="zend.logger" />
</services>
</container>

View File

@ -0,0 +1,48 @@
<?xml version="1.0" ?>
<container xmlns="http://www.symfony-project.org/schema/services"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.symfony-project.org/schema/services http://www.symfony-project.org/schema/services/services-1.0.xsd">
<parameters>
<parameter key="zend.mail.class">Zend_Mail</parameter>
<parameter key="zend.mail.smtp.class">Zend_Mail_Transport_Smtp</parameter>
<parameter key="zend.mail.smtp.host">localhost</parameter>
<parameter key="zend.mail.smtp.username">null</parameter>
<parameter key="zend.mail.smtp.password">null</parameter>
<parameter key="zend.mail.smtp.auth">null</parameter>
<parameter key="zend.mail.smtp.ssl">null</parameter>
<parameter key="zend.mail.smtp.port">25</parameter>
</parameters>
<services>
<service id="zend.mail" class="%zend.mail.class%" shared="false">
<call method="setDefaultTransport">
<argument type="service" id="zend.mail.transport" />
</call>
</service>
<service id="zend.mail.transport.smtp" class="%zend.mail.smtp.class%">
<argument>%zend.mail.smtp.host%</argument>
<argument type="collection">
<argument key="auth">%zend.mail.smtp.auth%</argument>
<argument key="username">%zend.mail.smtp.username%</argument>
<argument key="password">%zend.mail.smtp.password%</argument>
<argument key="port">%zend.mail.smtp.port%</argument>
</argument>
</service>
<service id="zend.mail.transport.smtp.ssl" class="%zend.mail.smtp.class%">
<argument>%zend.mail.smtp.host%</argument>
<argument type="collection">
<argument key="auth">%zend.mail.smtp.auth%</argument>
<argument key="username">%zend.mail.smtp.username%</argument>
<argument key="password">%zend.mail.smtp.password%</argument>
<argument key="ssl">%zend.mail.smtp.ssl%</argument>
<argument key="port">%zend.mail.smtp.port%</argument>
</argument>
</service>
<service id="zend.mail.transport" alias="zend.mail.transport.smtp" />
</services>
</container>

View File

@ -0,0 +1,65 @@
<?xml version="1.0" encoding="UTF-8" ?>
<xsd:schema xmlns="http://www.symfony-project.org/schema/zend"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.symfony-project.org/schema/zend"
elementFormDefault="qualified">
<xsd:element name="logger" type="logger" />
<xsd:complexType name="logger">
<xsd:attribute name="priority" type="priority" />
<xsd:attribute name="path" type="xsd:string" />
</xsd:complexType>
<xsd:simpleType name="priority">
<xsd:restriction base="xsd:string">
<xsd:enumeration value="emerg" />
<xsd:enumeration value="alert" />
<xsd:enumeration value="crit" />
<xsd:enumeration value="err" />
<xsd:enumeration value="warn" />
<xsd:enumeration value="notice" />
<xsd:enumeration value="info" />
<xsd:enumeration value="debug" />
<xsd:enumeration value="0" />
<xsd:enumeration value="1" />
<xsd:enumeration value="2" />
<xsd:enumeration value="3" />
<xsd:enumeration value="4" />
<xsd:enumeration value="5" />
<xsd:enumeration value="6" />
<xsd:enumeration value="7" />
</xsd:restriction>
</xsd:simpleType>
<xsd:element name="mail" type="mail" />
<xsd:complexType name="mail">
<xsd:sequence>
<xsd:element name="username" type="xsd:string" minOccurs="0" maxOccurs="1" />
<xsd:element name="password" type="xsd:string" minOccurs="0" maxOccurs="1" />
<xsd:element name="host" type="xsd:string" minOccurs="0" maxOccurs="1" />
<xsd:element name="port" type="xsd:string" minOccurs="0" maxOccurs="1" />
<xsd:element name="ssl" type="ssl" minOccurs="0" maxOccurs="1" />
<xsd:element name="auth" type="auth" minOccurs="0" maxOccurs="1" />
</xsd:sequence>
<xsd:attribute name="transport" type="xsd:string" />
</xsd:complexType>
<xsd:simpleType name="auth">
<xsd:restriction base="xsd:string">
<xsd:enumeration value="plain" />
<xsd:enumeration value="login" />
</xsd:restriction>
</xsd:simpleType>
<xsd:simpleType name="ssl">
<xsd:restriction base="xsd:string">
<xsd:enumeration value="tls" />
<xsd:enumeration value="ssl" />
</xsd:restriction>
</xsd:simpleType>
</xsd:schema>