Skip to content

Instantly share code, notes, and snippets.

@kevin2244
Created February 18, 2018 15:02
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save kevin2244/5ef80d019b0cc3711d45003a42d9e0fa to your computer and use it in GitHub Desktop.
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.
<?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)
);
}
}
<?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);
}
}
<?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');
?>
<?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);
}
}
<?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',
],
];
<?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