1. Go to this page and download the library: Download rkeet/zf-doctrine-form library. Choose the download type require.
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
rkeet / zf-doctrine-form example snippets
class CoordinatesForm extends AbstractDoctrineForm
{
public function init()
{
$this->add([
'name' => 'coordinates',
'type' => CoordinatesFieldset::class,
'options' => [
'use_as_base_fieldset' => true,
],
]);
//Call parent initializer. Check in parent what it does.
parent::init();
}
}
class CoordinatesFieldset extends AbstractDoctrineFieldset
{
public function init()
{
parent::init();
$this->add([
'name' => 'latitude',
'
class AddressFieldset extends AbstractDoctrineFieldset
{
public function init()
{
parent::init();
// ... add street
// ... add city dropdown selector (based on available City Entity objects)
$this->add([
'type' => CoordinatesFieldset::class,
'
class CityFieldset extends AbstractDoctrineFieldset
{
/**
* @var AddressFieldset
*/
protected $addressFieldset;
public function __construct(
ObjectManager $objectManager,
string $name,
array $options = [],
AddressFieldset $addressFieldset
) {
$this->setAddressFieldset($addressFieldset);
parent::__construct($objectManager, $name, $options);
}
public function init()
{
parent::init();
// ... add name
$this->add([
'type' => Collection::class,
'
class CoordinatesFormInputFilter extends AbstractDoctrineFormInputFilter
{
/** @var CoordinatesFieldsetInputFilter */
protected $coordinatesFieldsetInputFilter;
public function __construct(
ObjectManager $objectManager,
Translator $translator,
CoordinatesFieldsetInputFilter $filter
) {
$this->coordinatesFieldsetInputFilter = $filter;
parent::__construct([
'object_manager' => $objectManager,
'translator' => $translator,
]);
}
public function init()
{
$this->add($this->coordinatesFieldsetInputFilter, 'coordinates');
parent::init();
}
}
class AddressFieldsetInputFilter extends AbstractDoctrineFieldsetInputFilter
{
/** @var CoordinatesFieldsetInputFilter $coordinatesFieldsetInputFilter */
protected $coordinatesFieldsetInputFilter;
public function __construct(
ObjectManager $objectManager,
Translator $translator,
CoordinatesFieldsetInputFilter $filter
) {
$this->coordinatesFieldsetInputFilter = $filter;
parent::__construct([
'object_manager' => $objectManager,
'object_repository' => $objectManager->getRepository(Address::class),
'translator' => $translator,
]);
}
public function init()
{
parent::init();
$this->add($this->coordinatesFieldsetInputFilter, 'coordinates');
// ... validate street
// ... city can be validated like this because it's a `Select` element, not a child Fieldset
$this->add([
'name' => 'city',
'
class CoordinatesFormFactory extends AbstractDoctrineFormFactory
{
public function __construct()
{
parent::__construct(CoordinatesForm::class, CoordinatesFormInputFilter::class);
}
}
class CoordinatesFieldsetFactory extends AbstractDoctrineFieldsetFactory
{
public function __construct()
{
// params, in order: FQCN of Fieldset, name of Fieldset, Object/Entity FQCN for Hydrator
parent::__construct(CoordinatesFieldset::class, 'coordinates', Coordinates::class);
}
}
class CityFieldsetFactory extends AbstractDoctrineFieldsetFactory
{
// This function as normal
public function __construct()
{
parent::__construct(CityFieldset::class, 'city', City::class);
}
// To use a Collection you must override the __invoke method. Example below
/**
* @param ContainerInterface $container
* @param string $requestedName
* @param array|null $options
* @return CityFieldset
* @throws \Psr\Container\ContainerExceptionInterface
* @throws \Psr\Container\NotFoundExceptionInterface
*/
public function __invoke(ContainerInterface $container, $requestedName, array $options = null)
{
$this->setEntityManager($container->get(EntityManager::class));
$this->setTranslator($container->get('MvcTranslator'));
/** @var FormElementManagerV3Polyfill $formManager */
$formManager = $container->get('FormElementManager');
/** @var AddressFieldset $addressFieldset */
$addressFieldset = $formManager->get(AddressFieldset::class);
$addressFieldset->remove('city'); // Already being populated with Entity being created in base_fieldset
/** @var CityFieldset $fieldset */
$fieldset = new CityFieldset($this->getEntityManager(), 'city', [], $addressFieldset);
$fieldset->setHydrator(
new DoctrineObject($this->getEntityManager())
);
$fieldset->setObject(new City());
$fieldset->setTranslator($this->getTranslator());
return $fieldset;
}
}
class CoordinatesFieldsetInputFilterFactory extends AbstractDoctrineFieldsetInputFilterFactory
{
public function __invoke(ContainerInterface $container, $requestedName, array $options = null)
{
parent::setupRequirements($container, Coordinates::class);
return new CoordinatesFieldsetInputFilter([
'object_manager' => $this->getObjectManager(),
'object_repository' => $this->getObjectManager()->getRepository(Coordinates::class),
'translator' => $this->getTranslator(),
]);
}
}
class AddressFieldsetInputFilterFactory extends AbstractDoctrineFieldsetInputFilterFactory
{
public function __invoke(ContainerInterface $container, $requestedName, array $options = null)
{
parent::setupRequirements($container, Address::class);
/** @var CoordinatesFieldsetInputFilter $coordinatesFieldsetInputFilter */
$coordinatesFieldsetInputFilter = $this->getInputFilterManager()->get(CoordinatesFieldsetInputFilter::class);
$coordinatesFieldsetInputFilter->setRequired(false);
return new AddressFieldsetInputFilter(
$this->getObjectManager(),
$this->getTranslator(),
$coordinatesFieldsetInputFilter
);
}
}
class CityFieldsetInputFilterFactory extends AbstractDoctrineFieldsetInputFilterFactory
{
public function __invoke(ContainerInterface $container, $requestedName, array $options = null)
{
parent::setupRequirements($container, City::class);
/** @var AddressFieldsetInputFilter $addressFieldsetInputFilter */
$addressFieldsetInputFilter = $this->getInputFilterManager()->get(AddressFieldsetInputFilter::class);
$addressFieldsetInputFilter->setRequired(false);
$addressFieldsetInputFilter->remove('city'); // Will be set with the City being created in base_fieldset
/** @var CollectionInputFilter $addressFieldsetCollectionInputFilter */
$addressFieldsetCollectionInputFilter = new CollectionInputFilter();
$addressFieldsetCollectionInputFilter->setInputFilter($addressFieldsetInputFilter);
$addressFieldsetCollectionInputFilter->setIsRequired(false);
/** @var CoordinatesFieldsetInputFilter $coordinatesFieldsetInputFilter */
$coordinatesFieldsetInputFilter = $this->getInputFilterManager()->get(CoordinatesFieldsetInputFilter::class);
$coordinatesFieldsetInputFilter->setRequired(false);
return new CityFieldsetInputFilter(
$this->getObjectManager(),
$this->getTranslator(),
$addressFieldsetCollectionInputFilter,
$coordinatesFieldsetInputFilter
);
}
}
return [
'form_elements' => [ // <== NOTICE THAT CONFIG NAME FOR FORMS AND FIELDSETS!!!
'factories' => [
AddressForm::class => AddressFormFactory::class,
AddressFieldset::class => AddressFieldsetFactory::class,
CityForm::class => CityFormFactory::class,
CityFieldset::class => CityFieldsetFactory::class,
CoordinatesForm::class => CoordinatesFormFactory::class,
CoordinatesFieldset::class => CoordinatesFieldsetFactory::class,
],
],
'input_filters' => [ // <== NOTICE THAT CONFIG NAME FOR JUST INPUT FILTERS!!!
'factories' => [
AddressFormInputFilter::class => AddressFormInputFilterFactory::class,
AddressFieldsetInputFilter::class => AddressFieldsetInputFilterFactory::class,
CityFormInputFilter::class => CityFormInputFilterFactory::class,
CityFieldsetInputFilter::class => CityFieldsetInputFilterFactory::class,
CoordinatesFormInputFilter::class => CoordinatesFormInputFilterFactory::class,
CoordinatesFieldsetInputFilter::class => CoordinatesFieldsetInputFilterFactory::class,
],
],
];
Loading please wait ...
Before you can download the PHP files, the dependencies should be resolved. This can take some minutes. Please be patient.