Created
February 18, 2018 15:02
-
-
Save kevin2244/5ef80d019b0cc3711d45003a42d9e0fa to your computer and use it in GitHub Desktop.
Using Zend Form View Helpers in a Plates template in a Zend Expressive app.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
namespace App\Action; | |
use Interop\Http\ServerMiddleware\DelegateInterface; | |
use Interop\Http\ServerMiddleware\MiddlewareInterface; | |
use Psr\Http\Message\ServerRequestInterface; | |
use Zend\Diactoros\Response\HtmlResponse; | |
use Zend\Expressive\Template\TemplateRendererInterface; | |
use App\Model\Repository\TruckRepository; | |
use App\Model\Truck; | |
use Zend\Hydrator\ArraySerializable; | |
use Zend\View\Renderer\PhpRenderer; | |
class AddAmericanTruckAction implements MiddlewareInterface | |
{ | |
private $renderer; | |
private $form; | |
private $truckRepository; | |
private $zvphprenderer; | |
public function __construct(TemplateRendererInterface $renderer, $form, $repository, $zvphprenderer) | |
{ | |
$this->renderer = $renderer; | |
$this->form = $form; | |
$this->truckRepository = $repository; | |
$this->zvphprenderer = $zvphprenderer; | |
} | |
public function process(ServerRequestInterface $request, DelegateInterface $delegate) | |
{ | |
$data = []; | |
if ($request->getMethod() == 'POST') { | |
$postData = $request->getParsedBody(); | |
$this->form->setData($postData); | |
if ($this->form->isValid()) { | |
$data['success'] = 'success'; | |
$truck = new Truck; | |
$hydrator = new ArraySerializable(); | |
$hydrator->hydrate($this->form->getData(), $truck); | |
//save the new truck | |
$this->truckRepository->saveTruck($truck); | |
} | |
else { | |
$data['success'] = 'Not Valid'; | |
$data['messages'] = $this->form->getMessages(); | |
} | |
} | |
$data['form'] = $this->form; | |
$data['zendviewphprenderer'] = $this->zvphprenderer; | |
//render form | |
return new HtmlResponse( | |
$this->renderer->render('truck::addamericantruckform',$data) | |
); | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
namespace App\Action; | |
use Interop\Container\ContainerInterface; | |
use Zend\ServiceManager\Factory\FactoryInterface; | |
use App\Action\AddTruckAction; | |
use App\Form\AddAmericanTruckForm; | |
use App\Model\Repository\TruckRepositoryInterface; | |
use Zend\View\HelperPluginManager; | |
use Zend\View\Renderer\PhpRenderer; | |
class AddAmericanTruckActionFactory implements FactoryInterface | |
{ | |
/** | |
* @param ContainerInterface $container | |
* @param string $requestedName | |
* @param null|array $options | |
* @return AddTruckAction | |
*/ | |
public function __invoke(ContainerInterface $container, $requestedName, array $options = null) | |
{ | |
$form = new AddAmericanTruckForm; | |
$repo = $container->get(TruckRepositoryInterface::class); | |
$helpers = $container->get(HelperPluginManager::class); | |
$zvphprenderer = new PhpRenderer; | |
$zvphprenderer->setHelperPluginManager($helpers); | |
return new AddAmericanTruckAction($container->get(\Zend\Expressive\Template\TemplateRendererInterface::class), $form, $repo,$zvphprenderer); | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
$form->prepare(); | |
$form->setAttribute('method', 'post'); | |
$formLabel = $zendviewphprenderer->plugin('formLabel'); | |
$pl = $zendviewphprenderer->placeholder('foo')->set('some random text'); | |
?> | |
<?php $this->layout('layout::default', ['title' => 'Add Truck']); ?> | |
<div class="jumbotron"> | |
<h1>Add American Truck</h1> | |
</div> | |
<?php | |
echo "<br />Result: <br />"; | |
$fresult = ''; | |
if (isset($success)) { | |
$fresult = $success; | |
} | |
if(!empty($fresult)) { | |
echo "<br />Submission Result: $fresult<br />"; | |
} | |
?> | |
<table class="table table-bordered table-striped"> | |
<?php echo $zendviewphprenderer->form()->openTag($form); ?> | |
<div> | |
<?php | |
foreach ($form->getElements() as $name => $element) { | |
echo "<br />$name"; | |
if (!empty($element->getLabel())) { | |
echo $zendviewphprenderer->formLabel($element); | |
} | |
echo $zendviewphprenderer->formElement($element); | |
echo $zendviewphprenderer->formElementErrors($element); | |
} | |
echo $zendviewphprenderer->form()->closeTag($form); | |
?> | |
</div> | |
<?php | |
if (isset($messages)) { | |
if (count($messages) > 0) { | |
foreach ($messages as $key => $mess) { | |
echo "<br />$key "; | |
foreach ($mess as $name => $mes) { | |
echo "$name $mes<br />"; | |
} | |
} | |
} | |
} | |
echo $zendviewphprenderer->placeholder('foo'); | |
?> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
namespace App; | |
use Psr\Container\ContainerInterface; | |
use Zend\ServiceManager\Config; | |
use Zend\ServiceManager\DelegatorFactoryInterface; | |
use Zend\ServiceManager\ServiceLocatorInterface; | |
class FormHelpersDelegatorFactory | |
{ | |
/** | |
* zend-servicemanager v3 support | |
*/ | |
public function __invoke( | |
ContainerInterface $container, | |
$name, | |
callable $callback, | |
array $options = null | |
) { | |
$helpers = $callback(); | |
$config = $container->has('config') ? $container->get('config') : []; | |
$config = new Config($config['view_helpers']); | |
$config->configureServiceManager($helpers); | |
return $helpers; | |
} | |
/** | |
* zend-servicemanager v2 support | |
*/ | |
public function createDelegatorWithName( | |
ServiceLocatorInterface $container, | |
$name, | |
$requestedName, | |
$callback | |
) { | |
return $this($container, $name, $callback); | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
use Zend\Expressive\Plates\PlatesRendererFactory; | |
use Zend\Expressive\Template\TemplateRendererInterface; | |
use Zend\Expressive\ZendView\ZendViewRenderer; | |
use Zend\Expressive\ZendView\ZendViewRendererFactory; | |
return [ | |
'dependencies' => [ | |
'factories' => [ | |
TemplateRendererInterface::class => PlatesRendererFactory::class, | |
ZendViewRenderer::class => ZendViewRendererFactory::class, | |
Zend\View\HelperPluginManager::class => Zend\Expressive\ZendView\HelperPluginManagerFactory::class | |
], | |
'invokables' => [ | |
], | |
'delegators' => [ | |
Zend\View\HelperPluginManager::class => [ | |
App\FormHelpersDelegatorFactory::class, | |
] | |
] | |
], | |
'templates' => [ | |
'extension' => 'phtml', | |
], | |
]; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
use Zend\Form\ConfigProvider; | |
$provider = new ConfigProvider(); | |
return $provider(); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment