2013-12-02 1 views

ответ

7

Ну, я создал коллекционер, чтобы добавить личную информацию о ZendDevelopersTool. Вам нужна информация от Контролера, и это я никогда не пытался сделать. :)

Я покажу вам, как я создал Collector, и, возможно, вы можете найти способ получить информацию от Контроллера.

В вашей MyModule\module.config.php

/* ZendDeveloperTools Configuration */ 
'invokables' => array(
    'MyModule\ConfigCollector' => 'MyModule\Collector\ConfigCollector', 
), 

'view_manager' => array(
    'template_map' => array(
     'zend-developer-tools/toolbar/mymodule-configs' => __DIR__ . '/../view/zend-developer-tools/toolbar/mymodule-configs.phtml', 
    ), 
), 

'zenddevelopertools' => array(
    'profiler' => array(
     'collectors' => array(
      'mymodule_configs' => 'MyModule\ConfigCollector', 
     ), 
    ), 
    'toolbar' => array(
     'entries' => array(
      'mymodule_configs' => 'zend-developer-tools/toolbar/mymodule-configs', 
     ), 
    ), 
), 

На MyModule\Module.php, вам необходимо загрузить свои invokables, я делаю это, добавив следующий метод:

public function getServiceConfig() 
{ 
    return include __DIR__ . '/config/module.config.php'; 
} 

Добавить .phtml файл на на вашем просмотров:

MyModule/view/zend-developer-tools/toolbar/mymodule-configs.phtml 

И добавить, f или пример:

<?php /* @var $collector \DoctrineORMModule\Collector\MappingCollector */ ?> 
<div class="zdt-toolbar-entry"> 
    <div class="zdt-toolbar-preview"> 
     <img src="data:image/png;base64,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" alt="VnsDesenvolvimento"> 
     <span class="zdt-toolbar-info"> 
      Configurações Gerais 
     </span> 
    </div> 
    <div class="zdt-toolbar-detail"> 
     <span class="zdt-toolbar-info"> 
      <span class="zdt-detail-label">Environment</span> 
      <span class="zdt-detail-value"> 
       <?php echo $this->collector->getEnvironment(); ?> 
      </span> 
     </span> 

     <span class="zdt-toolbar-info"> 
      <span class="zdt-detail-label">Default Locale</span> 
      <span class="zdt-detail-value"> 
       <?php echo $this->collector->getDefaultLocale(); ?> 
      </span> 
     </span> 

     <span class="zdt-toolbar-info"> 
      <span class="zdt-detail-label">Time Zone</span> 
      <span class="zdt-detail-value"> 
       <?php echo $this->collector->getTimeZone(); ?> 
      </span> 
     </span> 

    </div> 
</div> 

Теперь, заключительная часть! Нам необходимо создать коллектор, который собирается захватить всю информацию, которую мы дэ хотим дисплей:

<?php 
namespace MyModule\Collector; 

use ZendDeveloperTools\Collector; 

use Zend\Mvc\MvcEvent; 

/** 
* Collector to be used in ZendDeveloperTools to record and display personal information 
* 
* @license MIT 
* @author Vinicius Garcia <vinigar[...].com> 
*/ 
class ConfigCollector extends \ZendDeveloperTools\Collector\AbstractCollector 
{ 

    /** 
    * {@inheritDoc} 
    */ 
    public function getName() 
    { 
     return 'mymodule_configs'; 
    } 

    /** 
    * {@inheritDoc} 
    */ 
    public function getPriority() 
    { 
     return 10; 
    } 

    /** 
    * {@inheritDoc} 
    */ 
    public function collect(MvcEvent $mvcEvent) 
    { 
     $date = new \DateTime(); 

     $this->data = array(
      'environment' => ucfirst(getenv('APPLICATION_ENV') ?: 'production'), 
      'timezone' => $date->getTimezone()->getName(), 
      'defaultlocale' => \Locale::getDefault(), 
     ); 
    } 

    /** 
    * Returns the environment 
    * 
    * @return string 
    */ 
    public function getEnvironment() 
    { 
     return $this->data['environment']; 
    } 

    /** 
    * Returns the timezone 
    * 
    * @return string 
    */ 
    public function getTimeZone() 
    { 
     return $this->data['timezone']; 
    } 

    /** 
    * Returns the default locale 
    * 
    * @return string 
    */ 
    public function getDefaultLocale() 
    { 
     return $this->data['defaultlocale']; 
    } 
} 

этого класса имеют методы, такие как getDefaultLocale(), и мы используем их на zend-developer-tools/toolbar/mymodule-configs.phtml.

Он должен выглядеть следующим образом:

My Configs on ZendDeveloperTool

Вы можете попытаться адаптировать этот кусок кода, чтобы соответствовать вашим потребностям. И, пожалуйста, если вы узнаете, как получить информацию от своего контроллера, поделитесь с нами!

Редактировать

В ConfigCollector классе, обратите внимание на метод collect(MvcEvent $mvcEvent).

Как вы можете видеть, у вас есть объект MvcEvent. Возможно, вы можете передать свою личную информацию, используя ее.

+0

Важно заметить, я на основе этого решения ищет на DoctrineORMModule ... грустно нет места где мы можем найти хорошие инструкции о том, как создавать AddOns для ZendDeveloperTools ... :( – vinigarcia87

+0

Спасибо, это полезно. Я проведу DoctrineORMModule, чтобы посмотреть, что там происходит. Я прошу проголосовать за ваши предложения, но я не могу принять его как правильный ответ. –

+0

Итак, я попробовал ваш пример, и он не работает. Вероятно, я что-то пропустил, или вы забыли упомянуть о каком-то шаге. Проблема в том, что $ this-> collector имеет нулевой вид (.phtml). Если у вас есть идея, где моя ошибка, сообщите мне. –

2

Короче, это возможно:) Я не горжусь тем, как я это сделал, но - хорошо известное оправдание - оно работает. И если у вас есть предложения, я не буду рад, но рад их услышать.

Как создать пользовательский сборщик @ vinigarcia87, описанный выше.

Чтобы зарегистрировать что-то в контроллере (и в любом другом месте), а затем захватить эти данные в коллекторе, я создал новый класс в своем модуле со статическим полем и статическим getter/setter, который я использую в качестве прокси.Вот код:

namespace MyModule\Log; 

class MyLogger { 
    private static $messages = array(); 

    public static function log($message) 
    { 
     self::$messages[] = $message; 
    } 
    public static function getMessages() 
    { 
     return self::$messages; 
    } 
} 

В действии представления контроллера:

MyModule\Log\Logger::log('Informational message'); 

И в коллектор сбора метод:

public function collect(MvcEvent $mvcEvent) 
{ 
    $this->data = array(
     'messages'  => MyModule\Log\Logger::getMessages(), 
    ); 
} 
public function getMessages() 
{ 
    return $this->data['messages']; 
} 

Эти сообщения теперь доступны в записи на панели инструментов .pthml подать этот путь : <?php \Zend\Debug\Debug::dump($this->collector->getMessages()); ?>

Ваши мнения ...

2

Вы также можете использовать мой пакет, который может записывать любые данные в панель и использовать Tracy/Debugger для выделения и добавления дерева к вашим сбрасываемым данным.

renat-magadiev/zf3-bar-logger

так что вы можете просто написать:

<?php 

\BarLogger\Collector\DebugCollector::barDump(['testing dump' => ['asd', 'asdad', 'fdgfdsg', 'gfgsd']], 'testing dump'); 

?> 

или просто с помощью глобальной функции в ярлыках:

<?php 

barDump(['testing dump' => ['asd', 'asdad', 'fdgfdsg', 'gfgsd']], 'testing dump'); 

?> 

preview