Commit 09583662 authored by Bertrand Gauthier's avatar Bertrand Gauthier
Browse files

Passage à ZF 2.x ; modifications minimales pour le supporter.

parent 9dd896a0
Pipeline #3783 passed with stage
in 17 seconds
...@@ -11,7 +11,7 @@ use Zend\Permissions\Acl\Acl; ...@@ -11,7 +11,7 @@ use Zend\Permissions\Acl\Acl;
use Zend\Permissions\Acl\Assertion\AssertionInterface; use Zend\Permissions\Acl\Assertion\AssertionInterface;
use Zend\Permissions\Acl\Resource\ResourceInterface; use Zend\Permissions\Acl\Resource\ResourceInterface;
use Zend\Permissions\Acl\Role\RoleInterface; use Zend\Permissions\Acl\Role\RoleInterface;
use Zend\ServiceManager\ServiceLocatorAwareInterface; use UnicaenApp\ServiceManager\ServiceLocatorAwareInterface;
use Zend\ServiceManager\ServiceLocatorAwareTrait; use Zend\ServiceManager\ServiceLocatorAwareTrait;
/** /**
......
...@@ -4,6 +4,7 @@ namespace UnicaenAuth\Authentication\Adapter; ...@@ -4,6 +4,7 @@ namespace UnicaenAuth\Authentication\Adapter;
use phpCAS; use phpCAS;
use UnicaenApp\Mapper\Ldap\People as LdapPeopleMapper; use UnicaenApp\Mapper\Ldap\People as LdapPeopleMapper;
use UnicaenApp\ServiceManager\ServiceLocatorAwareInterface;
use UnicaenAuth\Options\ModuleOptions; use UnicaenAuth\Options\ModuleOptions;
use UnicaenAuth\Service\User; use UnicaenAuth\Service\User;
use Zend\Authentication\Exception\UnexpectedValueException; use Zend\Authentication\Exception\UnexpectedValueException;
...@@ -12,8 +13,7 @@ use Zend\EventManager\EventManager; ...@@ -12,8 +13,7 @@ use Zend\EventManager\EventManager;
use Zend\EventManager\EventManagerAwareInterface; use Zend\EventManager\EventManagerAwareInterface;
use Zend\EventManager\EventManagerInterface; use Zend\EventManager\EventManagerInterface;
use Zend\Mvc\Router\Http\TreeRouteStack; use Zend\Mvc\Router\Http\TreeRouteStack;
use Zend\ServiceManager\ServiceManager; use Zend\ServiceManager\ServiceLocatorAwareTrait;
use Zend\ServiceManager\ServiceManagerAwareInterface;
use ZfcUser\Authentication\Adapter\AbstractAdapter; use ZfcUser\Authentication\Adapter\AbstractAdapter;
use ZfcUser\Authentication\Adapter\AdapterChainEvent as AuthEvent; use ZfcUser\Authentication\Adapter\AdapterChainEvent as AuthEvent;
use ZfcUser\Authentication\Adapter\ChainableAdapter; use ZfcUser\Authentication\Adapter\ChainableAdapter;
...@@ -23,12 +23,9 @@ use ZfcUser\Authentication\Adapter\ChainableAdapter; ...@@ -23,12 +23,9 @@ use ZfcUser\Authentication\Adapter\ChainableAdapter;
* *
* @author Bertrand GAUTHIER <bertrand.gauthier@unicaen.fr> * @author Bertrand GAUTHIER <bertrand.gauthier@unicaen.fr>
*/ */
class Cas extends AbstractAdapter implements ServiceManagerAwareInterface, EventManagerAwareInterface class Cas extends AbstractAdapter implements EventManagerAwareInterface, ServiceLocatorAwareInterface
{ {
/** use ServiceLocatorAwareTrait;
* @var ServiceManager
*/
protected $serviceManager;
/** /**
* @var EventManager * @var EventManager
...@@ -105,7 +102,7 @@ class Cas extends AbstractAdapter implements ServiceManagerAwareInterface, Event ...@@ -105,7 +102,7 @@ class Cas extends AbstractAdapter implements ServiceManagerAwareInterface, Event
$ldapPeople = $this->getLdapPeopleMapper()->findOneByUsername($identity); $ldapPeople = $this->getLdapPeopleMapper()->findOneByUsername($identity);
/* @var $userService User */ /* @var $userService User */
$userService = $this->getServiceManager()->get('unicaen-auth_user_service'); $userService = $this->serviceLocator->get('unicaen-auth_user_service');
$userService->userAuthenticated($ldapPeople); $userService->userAuthenticated($ldapPeople);
} }
...@@ -120,7 +117,7 @@ class Cas extends AbstractAdapter implements ServiceManagerAwareInterface, Event ...@@ -120,7 +117,7 @@ class Cas extends AbstractAdapter implements ServiceManagerAwareInterface, Event
return; // NB: l'authentification CAS est désactivée ssi le tableau des options est vide return; // NB: l'authentification CAS est désactivée ssi le tableau des options est vide
} }
$router = $this->getServiceManager()->get('router'); /* @var $router TreeRouteStack */ $router = $this->serviceLocator->get('router'); /* @var $router TreeRouteStack */
$returnUrl = $router->getRequestUri()->setPath($router->getBaseUrl())->toString(); $returnUrl = $router->getRequestUri()->setPath($router->getBaseUrl())->toString();
$this->getCasClient()->logoutWithRedirectService($returnUrl); $this->getCasClient()->logoutWithRedirectService($returnUrl);
} }
...@@ -191,8 +188,8 @@ class Cas extends AbstractAdapter implements ServiceManagerAwareInterface, Event ...@@ -191,8 +188,8 @@ class Cas extends AbstractAdapter implements ServiceManagerAwareInterface, Event
{ {
if (!$this->options instanceof ModuleOptions) { if (!$this->options instanceof ModuleOptions) {
$options = array_merge( $options = array_merge(
$this->getServiceManager()->get('zfcuser_module_options')->toArray(), $this->serviceLocator->get('zfcuser_module_options')->toArray(),
$this->getServiceManager()->get('unicaen-auth_module_options')->toArray()); $this->serviceLocator->get('unicaen-auth_module_options')->toArray());
$this->setOptions(new ModuleOptions($options)); $this->setOptions(new ModuleOptions($options));
} }
return $this->options; return $this->options;
...@@ -206,7 +203,7 @@ class Cas extends AbstractAdapter implements ServiceManagerAwareInterface, Event ...@@ -206,7 +203,7 @@ class Cas extends AbstractAdapter implements ServiceManagerAwareInterface, Event
public function getLdapPeopleMapper() public function getLdapPeopleMapper()
{ {
if (null === $this->ldapPeopleMapper) { if (null === $this->ldapPeopleMapper) {
$this->ldapPeopleMapper = $this->getServiceManager()->get('ldap_people_mapper'); $this->ldapPeopleMapper = $this->serviceLocator->get('ldap_people_mapper');
} }
return $this->ldapPeopleMapper; return $this->ldapPeopleMapper;
} }
...@@ -223,28 +220,6 @@ class Cas extends AbstractAdapter implements ServiceManagerAwareInterface, Event ...@@ -223,28 +220,6 @@ class Cas extends AbstractAdapter implements ServiceManagerAwareInterface, Event
return $this; return $this;
} }
/**
* Get service manager
*
* @return ServiceManager
*/
public function getServiceManager()
{
return $this->serviceManager;
}
/**
* Set service manager
*
* @param ServiceManager $serviceManager
* @return self
*/
public function setServiceManager(ServiceManager $serviceManager)
{
$this->serviceManager = $serviceManager;
return $this;
}
/** /**
* Retrieve EventManager instance * Retrieve EventManager instance
* *
......
...@@ -2,10 +2,11 @@ ...@@ -2,10 +2,11 @@
namespace UnicaenAuth\Authentication\Adapter; namespace UnicaenAuth\Authentication\Adapter;
use UnicaenApp\ServiceManager\ServiceLocatorAwareInterface;
use UnicaenAuth\Options\ModuleOptions; use UnicaenAuth\Options\ModuleOptions;
use Zend\ServiceManager\Exception\ServiceNotFoundException; use Zend\ServiceManager\Exception\ServiceNotFoundException;
use Zend\ServiceManager\ServiceManager; use Zend\ServiceManager\ServiceLocatorAwareTrait;
use Zend\ServiceManager\ServiceManagerAwareInterface; use Zend\ServiceManager\ServiceLocatorInterface;
use ZfcUser\Authentication\Adapter\AdapterChainEvent as AuthEvent; use ZfcUser\Authentication\Adapter\AdapterChainEvent as AuthEvent;
use ZfcUser\Options\AuthenticationOptionsInterface; use ZfcUser\Options\AuthenticationOptionsInterface;
...@@ -17,12 +18,24 @@ use ZfcUser\Options\AuthenticationOptionsInterface; ...@@ -17,12 +18,24 @@ use ZfcUser\Options\AuthenticationOptionsInterface;
* *
* @author Bertrand GAUTHIER <bertrand.gauthier@unicaen.fr> * @author Bertrand GAUTHIER <bertrand.gauthier@unicaen.fr>
*/ */
class Db extends \ZfcUser\Authentication\Adapter\Db implements ServiceManagerAwareInterface class Db extends \ZfcUser\Authentication\Adapter\Db implements ServiceLocatorAwareInterface
{ {
use ServiceLocatorAwareTrait;
/** /**
* @var ServiceManager * Set service locator
*
* @param ServiceLocatorInterface $serviceLocator
* @return self
* @deprecated Abandonnez l'injection du service locator, svp
*/ */
protected $serviceManager; public function setServiceLocator(ServiceLocatorInterface $serviceLocator)
{
$this->serviceLocator = $serviceLocator;
$this->serviceManager = $serviceLocator;
return $this;
}
/** /**
* Authentification. * Authentification.
...@@ -66,26 +79,4 @@ class Db extends \ZfcUser\Authentication\Adapter\Db implements ServiceManagerAwa ...@@ -66,26 +79,4 @@ class Db extends \ZfcUser\Authentication\Adapter\Db implements ServiceManagerAwa
} }
return $this->options; return $this->options;
} }
/**
* Get service manager
*
* @return ServiceManager
*/
public function getServiceManager()
{
return $this->serviceManager;
}
/**
* Set service manager
*
* @param ServiceManager $serviceManager
* @return self
*/
public function setServiceManager(ServiceManager $serviceManager)
{
$this->serviceManager = $serviceManager;
return $this;
}
} }
\ No newline at end of file
...@@ -4,6 +4,7 @@ namespace UnicaenAuth\Authentication\Adapter; ...@@ -4,6 +4,7 @@ namespace UnicaenAuth\Authentication\Adapter;
use UnicaenApp\Exception\RuntimeException; use UnicaenApp\Exception\RuntimeException;
use UnicaenApp\Mapper\Ldap\People as LdapPeopleMapper; use UnicaenApp\Mapper\Ldap\People as LdapPeopleMapper;
use UnicaenApp\ServiceManager\ServiceLocatorAwareInterface;
use UnicaenAuth\Options\ModuleOptions; use UnicaenAuth\Options\ModuleOptions;
use UnicaenAuth\Service\User; use UnicaenAuth\Service\User;
use Zend\Authentication\Adapter\Ldap as LdapAuthAdapter; use Zend\Authentication\Adapter\Ldap as LdapAuthAdapter;
...@@ -13,8 +14,7 @@ use Zend\EventManager\Event; ...@@ -13,8 +14,7 @@ use Zend\EventManager\Event;
use Zend\EventManager\EventManager; use Zend\EventManager\EventManager;
use Zend\EventManager\EventManagerAwareInterface; use Zend\EventManager\EventManagerAwareInterface;
use Zend\EventManager\EventManagerInterface; use Zend\EventManager\EventManagerInterface;
use Zend\ServiceManager\ServiceManager; use Zend\ServiceManager\ServiceLocatorAwareTrait;
use Zend\ServiceManager\ServiceManagerAwareInterface;
use ZfcUser\Authentication\Adapter\AbstractAdapter; use ZfcUser\Authentication\Adapter\AbstractAdapter;
use ZfcUser\Authentication\Adapter\AdapterChainEvent as AuthEvent; use ZfcUser\Authentication\Adapter\AdapterChainEvent as AuthEvent;
use ZfcUser\Authentication\Adapter\ChainableAdapter; use ZfcUser\Authentication\Adapter\ChainableAdapter;
...@@ -24,14 +24,11 @@ use ZfcUser\Authentication\Adapter\ChainableAdapter; ...@@ -24,14 +24,11 @@ use ZfcUser\Authentication\Adapter\ChainableAdapter;
* *
* @author Bertrand GAUTHIER <bertrand.gauthier@unicaen.fr> * @author Bertrand GAUTHIER <bertrand.gauthier@unicaen.fr>
*/ */
class Ldap extends AbstractAdapter implements ServiceManagerAwareInterface, EventManagerAwareInterface class Ldap extends AbstractAdapter implements ServiceLocatorAwareInterface, EventManagerAwareInterface
{ {
const USURPATION_USERNAMES_SEP = '='; use ServiceLocatorAwareTrait;
/** const USURPATION_USERNAMES_SEP = '=';
* @var ServiceManager
*/
protected $serviceManager;
/** /**
* @var EventManager * @var EventManager
...@@ -122,7 +119,7 @@ class Ldap extends AbstractAdapter implements ServiceManagerAwareInterface, Even ...@@ -122,7 +119,7 @@ class Ldap extends AbstractAdapter implements ServiceManagerAwareInterface, Even
->setMessages(['Authentication successful.']); ->setMessages(['Authentication successful.']);
/* @var $userService User */ /* @var $userService User */
$userService = $this->getServiceManager()->get('unicaen-auth_user_service'); $userService = $this->serviceLocator->get('unicaen-auth_user_service');
$userService->userAuthenticated($ldapPeople); $userService->userAuthenticated($ldapPeople);
} }
...@@ -207,7 +204,7 @@ class Ldap extends AbstractAdapter implements ServiceManagerAwareInterface, Even ...@@ -207,7 +204,7 @@ class Ldap extends AbstractAdapter implements ServiceManagerAwareInterface, Even
public function getLdapPeopleMapper() public function getLdapPeopleMapper()
{ {
if (null === $this->ldapPeopleMapper) { if (null === $this->ldapPeopleMapper) {
$this->ldapPeopleMapper = $this->getServiceManager()->get('ldap_people_mapper'); $this->ldapPeopleMapper = $this->serviceLocator->get('ldap_people_mapper');
} }
return $this->ldapPeopleMapper; return $this->ldapPeopleMapper;
} }
...@@ -239,8 +236,8 @@ class Ldap extends AbstractAdapter implements ServiceManagerAwareInterface, Even ...@@ -239,8 +236,8 @@ class Ldap extends AbstractAdapter implements ServiceManagerAwareInterface, Even
{ {
if (!$this->options instanceof ModuleOptions) { if (!$this->options instanceof ModuleOptions) {
$options = array_merge( $options = array_merge(
$this->getServiceManager()->get('zfcuser_module_options')->toArray(), $this->serviceLocator->get('zfcuser_module_options')->toArray(),
$this->getServiceManager()->get('unicaen-auth_module_options')->toArray()); $this->serviceLocator->get('unicaen-auth_module_options')->toArray());
$this->setOptions(new ModuleOptions($options)); $this->setOptions(new ModuleOptions($options));
} }
return $this->options; return $this->options;
...@@ -251,7 +248,7 @@ class Ldap extends AbstractAdapter implements ServiceManagerAwareInterface, Even ...@@ -251,7 +248,7 @@ class Ldap extends AbstractAdapter implements ServiceManagerAwareInterface, Even
*/ */
public function getAppModuleOptions() public function getAppModuleOptions()
{ {
return $this->getServiceManager()->get('unicaen-app_module_options'); return $this->serviceLocator->get('unicaen-app_module_options');
} }
/** /**
...@@ -285,28 +282,6 @@ class Ldap extends AbstractAdapter implements ServiceManagerAwareInterface, Even ...@@ -285,28 +282,6 @@ class Ldap extends AbstractAdapter implements ServiceManagerAwareInterface, Even
return $this; return $this;
} }
/**
* Get service manager
*
* @return ServiceManager
*/
public function getServiceManager()
{
return $this->serviceManager;
}
/**
* Set service manager
*
* @param ServiceManager $serviceManager
* @return Ldap
*/
public function setServiceManager(ServiceManager $serviceManager)
{
$this->serviceManager = $serviceManager;
return $this;
}
/** /**
* Retrieve EventManager instance * Retrieve EventManager instance
* *
......
...@@ -3,11 +3,11 @@ ...@@ -3,11 +3,11 @@
namespace UnicaenAuth\Authentication\Storage; namespace UnicaenAuth\Authentication\Storage;
use Doctrine\DBAL\DBALException; use Doctrine\DBAL\DBALException;
use UnicaenApp\ServiceManager\ServiceLocatorAwareInterface;
use Zend\Authentication\Storage\Session; use Zend\Authentication\Storage\Session;
use Zend\Authentication\Storage\StorageInterface; use Zend\Authentication\Storage\StorageInterface;
use Zend\ServiceManager\Exception\ServiceNotFoundException; use Zend\ServiceManager\Exception\ServiceNotFoundException;
use Zend\ServiceManager\ServiceManager; use Zend\ServiceManager\ServiceLocatorAwareTrait;
use Zend\ServiceManager\ServiceManagerAwareInterface;
use ZfcUser\Mapper\UserInterface as UserMapper; use ZfcUser\Mapper\UserInterface as UserMapper;
/** /**
...@@ -15,8 +15,10 @@ use ZfcUser\Mapper\UserInterface as UserMapper; ...@@ -15,8 +15,10 @@ use ZfcUser\Mapper\UserInterface as UserMapper;
* *
* @author Bertrand GAUTHIER <bertrand.gauthier at unicaen.fr> * @author Bertrand GAUTHIER <bertrand.gauthier at unicaen.fr>
*/ */
class Db implements ChainableStorage, ServiceManagerAwareInterface class Db implements ChainableStorage, ServiceLocatorAwareInterface
{ {
use ServiceLocatorAwareTrait;
/** /**
* @var StorageInterface * @var StorageInterface
*/ */
...@@ -32,11 +34,6 @@ class Db implements ChainableStorage, ServiceManagerAwareInterface ...@@ -32,11 +34,6 @@ class Db implements ChainableStorage, ServiceManagerAwareInterface
*/ */
protected $resolvedIdentity; protected $resolvedIdentity;
/**
* @var ServiceManager
*/
protected $serviceManager;
/** /**
* Returns the contents of storage * Returns the contents of storage
* *
...@@ -177,7 +174,7 @@ class Db implements ChainableStorage, ServiceManagerAwareInterface ...@@ -177,7 +174,7 @@ class Db implements ChainableStorage, ServiceManagerAwareInterface
public function getMapper() public function getMapper()
{ {
if (null === $this->mapper) { if (null === $this->mapper) {
$this->mapper = $this->getServiceManager()->get('zfcuser_user_mapper'); $this->mapper = $this->serviceLocator->get('zfcuser_user_mapper');
} }
return $this->mapper; return $this->mapper;
} }
...@@ -193,26 +190,4 @@ class Db implements ChainableStorage, ServiceManagerAwareInterface ...@@ -193,26 +190,4 @@ class Db implements ChainableStorage, ServiceManagerAwareInterface
$this->mapper = $mapper; $this->mapper = $mapper;
return $this; return $this;
} }
/**
* Retrieve service manager instance
*
* @return ServiceManager
*/
public function getServiceManager()
{
return $this->serviceManager;
}
/**
* Set service manager instance
*
* @param ServiceManager $serviceManager
* @return self
*/
public function setServiceManager(ServiceManager $serviceManager)
{
$this->serviceManager = $serviceManager;
return $this;
}
} }
\ No newline at end of file
...@@ -2,22 +2,25 @@ ...@@ -2,22 +2,25 @@
namespace UnicaenAuth\Authentication\Storage; namespace UnicaenAuth\Authentication\Storage;
use UnicaenAuth\Entity\Ldap\People;
use UnicaenApp\Mapper\Ldap\People as LdapPeopleMapper; use UnicaenApp\Mapper\Ldap\People as LdapPeopleMapper;
use UnicaenApp\ServiceManager\ServiceLocatorAwareInterface;
use UnicaenAuth\Entity\Ldap\People;
use UnicaenAuth\Options\ModuleOptions; use UnicaenAuth\Options\ModuleOptions;
use Zend\Authentication\Exception\InvalidArgumentException; use Zend\Authentication\Exception\InvalidArgumentException;
use Zend\Authentication\Storage\Session;
use Zend\Authentication\Storage\StorageInterface; use Zend\Authentication\Storage\StorageInterface;
use Zend\ServiceManager\ServiceLocatorAwareTrait;
use Zend\ServiceManager\ServiceManager; use Zend\ServiceManager\ServiceManager;
use Zend\ServiceManager\ServiceManagerAwareInterface;
use Zend\Authentication\Storage\Session;
/** /**
* Ldap authentication storage. * Ldap authentication storage.
* *
* @author Bertrand GAUTHIER <bertrand.gauthier at unicaen.fr> * @author Bertrand GAUTHIER <bertrand.gauthier at unicaen.fr>
*/ */
class Ldap implements ChainableStorage, ServiceManagerAwareInterface class Ldap implements ChainableStorage, ServiceLocatorAwareInterface
{ {
use ServiceLocatorAwareTrait;
/** /**
* @var StorageInterface * @var StorageInterface
*/ */
...@@ -38,11 +41,6 @@ class Ldap implements ChainableStorage, ServiceManagerAwareInterface ...@@ -38,11 +41,6 @@ class Ldap implements ChainableStorage, ServiceManagerAwareInterface
*/ */
protected $resolvedIdentity; protected $resolvedIdentity;
/**
* @var ServiceManager
*/
protected $serviceManager;
/** /**
* Returns the contents of storage * Returns the contents of storage
* *
...@@ -154,7 +152,7 @@ class Ldap implements ChainableStorage, ServiceManagerAwareInterface ...@@ -154,7 +152,7 @@ class Ldap implements ChainableStorage, ServiceManagerAwareInterface
public function getMapper() public function getMapper()
{ {
if (null === $this->mapper) { if (null === $this->mapper) {
$this->mapper = $this->getServiceManager()->get('ldap_people_mapper'); $this->mapper = $this->serviceLocator->get('ldap_people_mapper');
} }
return $this->mapper; return $this->mapper;
} }
...@@ -171,28 +169,6 @@ class Ldap implements ChainableStorage, ServiceManagerAwareInterface ...@@ -171,28 +169,6 @@ class Ldap implements ChainableStorage, ServiceManagerAwareInterface
return $this; return $this;
} }
/**
* Retrieve service manager instance
*
* @return ServiceManager
*/
public function getServiceManager()
{
return $this->serviceManager;
}
/**
* Set service manager instance
*
* @param ServiceManager $locator
* @return self
*/
public function setServiceManager(ServiceManager $serviceManager)
{
$this->serviceManager = $serviceManager;
return $this;
}
/** /**
* @param ModuleOptions $options * @param ModuleOptions $options
*/ */
...@@ -208,7 +184,7 @@ class Ldap implements ChainableStorage, ServiceManagerAwareInterface ...@@ -208,7 +184,7 @@ class Ldap implements ChainableStorage, ServiceManagerAwareInterface
public function getOptions() public function getOptions()
{ {
if (!$this->options instanceof ModuleOptions) { if (!$this->options instanceof ModuleOptions) {
$this->setOptions($this->getServiceManager()->get('unicaen-auth_module_options')); $this->setOptions($this->serviceLocator->get('unicaen-auth_module_options'));
} }
return $this->options; return $this->options;
} }
......
...@@ -6,7 +6,7 @@ use UnicaenAuth\Entity\Shibboleth\ShibUser; ...@@ -6,7 +6,7 @@ use UnicaenAuth\Entity\Shibboleth\ShibUser;
use UnicaenAuth\Service\ShibService; use UnicaenAuth\Service\ShibService;
use Zend\Authentication\Storage\Session; use Zend\Authentication\Storage\Session;
use Zend\Authentication\Storage\StorageInterface; use Zend\Authentication\Storage\StorageInterface;
use Zend\ServiceManager\ServiceLocatorAwareInterface; use UnicaenApp\ServiceManager\ServiceLocatorAwareInterface;
use Zend\ServiceManager\ServiceLocatorAwareTrait; use Zend\ServiceManager\ServiceLocatorAwareTrait;
use Zend\ServiceManager\ServiceManager; use Zend\ServiceManager\ServiceManager;
......
...@@ -6,7 +6,7 @@ use UnicaenAuth\Entity\Db\Role; ...@@ -6,7 +6,7 @@ use UnicaenAuth\Entity\Db\Role;
use UnicaenAuth\Service\Traits\RoleServiceAwareTrait; use UnicaenAuth\Service\Traits\RoleServiceAwareTrait;
use Zend\Form\Form; use Zend\Form\Form;