- <?php
- /**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2014 Zend Technologies USA Inc. (http://www.zend.com)
- * @license http://framework.zend.com/license/new-bsd New BSD License
- */
-
- namespace Zend\Form;
-
- use Zend\InputFilter\InputFilterInterface;
- use Zend\ServiceManager\AbstractFactoryInterface;
- use Zend\ServiceManager\ServiceLocatorInterface;
-
- class FormAbstractServiceFactory implements AbstractFactoryInterface
- {
- /**
- * @var array
- */
- protected $config;
-
- /**
- * @var string Top-level configuration key indicating forms configuration
- */
- protected $configKey = 'forms';
-
- /**
- * @var Factory Form factory used to create forms
- */
- protected $factory;
-
- /**
- * Can we create the requested service?
- *
- * @param ServiceLocatorInterface $serviceLocator
- * @param string $name Service name (as resolved by ServiceManager)
- * @param string $requestedName Name by which service was requested
- * @return bool
- */
- public function canCreateServiceWithName(ServiceLocatorInterface $serviceLocator, $name, $requestedName)
- {
- $config = $this->getConfig($serviceLocator);
- if (empty($config)) {
- return false;
- }
-
- return (isset($config[$requestedName]) && is_array($config[$requestedName]) && !empty($config[$requestedName]));
- }
-
- /**
- * Create a form
- *
- * @param ServiceLocatorInterface $serviceLocator
- * @param string $name Service name (as resolved by ServiceManager)
- * @param string $requestedName Name by which service was requested
- * @return Form
- */
- public function createServiceWithName(ServiceLocatorInterface $serviceLocator, $name, $requestedName)
- {
- $config = $this->getConfig($serviceLocator);
- $config = $config[$requestedName];
- $factory = $this->getFormFactory($serviceLocator);
-
- $this->marshalInputFilter($config, $serviceLocator, $factory);
- return $factory->createForm($config);
- }
-
- /**
- * Get forms configuration, if any
- *
- * @param ServiceLocatorInterface $services
- * @return array
- */
- protected function getConfig(ServiceLocatorInterface $services)
- {
- if ($this->config !== null) {
- return $this->config;
- }
-
- if (!$services->has('Config')) {
- $this->config = array();
- return $this->config;
- }
-
- $config = $services->get('Config');
- if (!isset($config[$this->configKey])
- || !is_array($config[$this->configKey])
- ) {
- $this->config = array();
- return $this->config;
- }
-
- $this->config = $config[$this->configKey];
- return $this->config;
- }
-
- /**
- * Retrieve the form factory, creating it if necessary
- *
- * @param ServiceLocatorInterface $services
- * @return Factory
- */
- protected function getFormFactory(ServiceLocatorInterface $services)
- {
- if ($this->factory instanceof Factory) {
- return $this->factory;
- }
-
- $elements = null;
- if ($services->has('FormElementManager')) {
- $elements = $services->get('FormElementManager');
- }
-
- $this->factory = new Factory($elements);
- return $this->factory;
- }
-
- /**
- * Marshal the input filter into the configuration
- *
- * If an input filter is specified:
- * - if the InputFilterManager is present, checks if it's there; if so,
- * retrieves it and resets the specification to the instance.
- * - otherwise, pulls the input filter factory from the form factory, and
- * attaches the FilterManager and ValidatorManager to it.
- *
- * @param array $config
- * @param ServiceLocatorInterface $services
- * @param Factory $formFactory
- */
- protected function marshalInputFilter(array &$config, ServiceLocatorInterface $services, Factory $formFactory)
- {
- if (!isset($config['input_filter'])) {
- return;
- }
-
- if ($config['input_filter'] instanceof InputFilterInterface) {
- return;
- }
-
- if (is_string($config['input_filter'])
- && $services->has('InputFilterManager')
- ) {
- $inputFilters = $services->get('InputFilterManager');
- if ($inputFilters->has($config['input_filter'])) {
- $config['input_filter'] = $inputFilters->get($config['input_filter']);
- return;
- }
- }
-
- $inputFilterFactory = $formFactory->getInputFilterFactory();
- $inputFilterFactory->getDefaultFilterChain()->setPluginManager($services->get('FilterManager'));
- $inputFilterFactory->getDefaultValidatorChain()->setPluginManager($services->get('ValidatorManager'));
- }
- }
# |
Change |
User |
Description |
Committed |
|
#1
|
18334 |
Liz Lam |
initial add of jambox |
9 years ago
|
|