Zend Framework 2 : Create Custom Toolbar for ZendDeveloperTools
ZendDeveloperTools toolbars are great to help us debug our application. However, when we need to have additional toolbar that not yet in it, we need to add it by creating custom toolbar for it. Ok, for example, we want to add a session toolbar that read our current session Container key -> value like this :
To make it easy to learn, let’s apply it into new module, I created a new module for it named SanSessionToolbar like the following :
1. Let’s start with the Collector :
namespace SanSessionToolbar\Collector; use ZendDeveloperTools\Collector\CollectorInterface; use Zend\Mvc\MvcEvent; use Zend\Session\Container; /** * Session Data Collector. */ class SessionCollector implements CollectorInterface { /** * @inheritdoc */ public function getName() { // this name must same with *collectors* name in the configuration return 'session.toolbar'; } /** * {@inheritDoc} */ public function getPriority() { return 10; } /** * @inheritdoc */ public function collect(MvcEvent $mvcEvent) { } public function getSessionData() { $container = new Container; $arraysession = $container->getManager()->getStorage()->toArray(); $data = array(); foreach($arraysession as $key => $row) { if ($row instanceof \Zend\Stdlib\ArrayObject) { $iterator = $row->getIterator(); while($iterator->valid()) { $data[$iterator->key()] = $iterator->current() ; $iterator->next(); } } } return $data; } }
2. Now, create a view to var_dump the SanSessionToolbar\Collector\SessionCollector::getSessionData()
.
<?php /* @var $collector \SanSessionToolbar\Collector\SessionCollector */ ?> <div class="zdt-toolbar-entry"> <div class="zdt-toolbar-preview"> <img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAATxJREFUeNpi/P//PwMhMJuRkRVItQNxKhBzAPFOIM5O/f//MbpaFgbiAMigYiS+LxCDXOKPrpCJSAP1sYiZY1NIrIGHsYhtw6aQWC8vA2IlIM4EYn6oYRXYFDISEylokQOKlG/ACPlLsguBBggAKRUglgbi70B8EWjQS3x6sLoQaFAikLIDYjcglkKSegHEGUBDN+IyEFekeAOxJRBfAeJPSOISQDwZaKEYSS5Ec20KiEITVgW68g65yeYHAwmAGAN90PgPgPgjWQZCw8oOTXgX0LuvyXWhBxBLIvFBaW8zJV52RePfA+LdZBkI9K44kHJAEz4G9O5Pcl3IA8QyaGJHKYllRixiylDXywCxFKkGvgPiG2hiJUCDQHn5PhBbkGQgMKxABsYC8UEg/grFH4D4BBDHA/EebPoAAgwA3RZUHjvT8+IAAAAASUVORK5CYII=" alt="SESSION Data"> <span class="zdt-toolbar-info"> SessionData </span> </div> <div class="zdt-toolbar-detail"> <span class="zdt-toolbar-info zdt-toolbar-info-redundant"> <span class="zdt-detail-label">Session Data</span> </span> <span class="zdt-toolbar-info"> <span class="zdt-detail-pre"> <?php Zend\Debug\Debug::dump($collector->getSessionData()); ?> </span> </span> </div> </div>
3. Great!, Let’s configure the module configuration ( config/module.config.php ), Remember, that the toolbar entries name must same with our SessionCollector::getName()
.
return array( 'service_manager' => array( 'invokables' => array( 'session.toolbar' => 'SanSessionToolbar\Collector\SessionCollector', ), ), 'view_manager' => array( 'template_map' => array( 'zend-developer-tools/toolbar/session-data' => __DIR__ . '/../view/zend-developer-tools/toolbar/session-data.phtml', ), ), 'zenddevelopertools' => array( 'profiler' => array( 'collectors' => array( 'session.toolbar' => 'session.toolbar', ), ), 'toolbar' => array( 'entries' => array( 'session.toolbar' => 'zend-developer-tools/toolbar/session-data', ), ), ), );
The ‘session.toolbar’ must be registered into ServiceManager with an instance of SanSessionToolbar\Collector\SessionCollector
, and registered into ‘zenddevelopertools’ config profiler and toolbar.
4. The Module.php is a usual Module class.
5. Register your new module into config/application.config.php
6. Now, let’s test it by creating session data in our controller :
public function indexAction() { $container = new \Zend\Session\Container; $container->a = 'b'; $container->foo = 'bar'; return new ViewModel(); }
Done ;). You can grab this module from my github account : https://github.com/samsonasik/SanSessionToolbar
Reference :
1. http://stackoverflow.com/questions/20325842/how-to-log-something-to-zend-developer-tools-toolbar
2. Image session icon originally from : http://makemore.info.yorku.ca/files/2012/11/info.png, encoded with base64_encode.
Amazing addition for the toolbar. I did came across with: http://stackoverflow.com/questions/20325842/how-to-log-something-to-zend-developer-tools-toolbar when trying to add view variables on the toolbar as in previous version. Couldnt implement this thou. Thanks for sharing!!!!
you’re welcome 😉