2013-08-28 4 views
1

Zend 2 Framework, layout.phtml.Не могу понять, почему я не могу назвать метод

Здесь я могу перевести строки с помощью $ this-> translate ('key'), но я не могу получить локаль с $ this-> getLocale(). Зачем? Это оба метода из одного и того же класса Переводчик! Все, что я получаю это исключение:

Fatal error: Uncaught exception 'Zend\ServiceManager\Exception\ServiceNotFoundException' with message 'Zend\View\HelperPluginManager::get was unable to fetch or create an instance for getLocale' in D:\Dropbox\Projects\www\linksync\vendor\zendframework\zendframework\library\Zend\ServiceManager\ServiceManager.php on line 496

Вот мой module.config.php (модуль Application)

<?php 
return array(
    'router' => array(
     'routes' => array(
      'home' => array(
       'type' => 'Segment', 
       'options' => array(
        'route' => '/[:lang]', 
        'constraints' => array(
         'lang'  => '[a-zA-Z]{2}', 
        ), 
        'defaults' => array(
         'controller' => 'Application\Controller\Index', 
         'action'  => 'index', 
         'lang'  => 'en', 
        ), 
       ), 
      ), 
      // The following is a route to simplify getting started creating 
      // new controllers and actions without needing to create a new 
      // module. Simply drop new controllers in, and you can access them 
      // using the path /application/:lang/:controller/:action 
      'application' => array(
       'type' => 'Literal', 
       'options' => array(
        'route' => '/application', 
        'defaults' => array(
         '__NAMESPACE__' => 'Application\Controller', 
         'controller' => 'Index', 
         'action'  => 'index', 
        ), 
       ), 
       'may_terminate' => true, 
       'child_routes' => array(
        'default' => array(
         'type' => 'Segment', 
         'options' => array(
          'route' => '/[:lang[/:controller[/:action[/:id]]]]', 
          'constraints' => array(
           'lang'  => '[a-zA-Z]{2}', 
           'controller' => '[a-zA-Z][a-zA-Z0-9_-]*', 
           'action'  => '[a-zA-Z][a-zA-Z0-9_-]*', 
           'id'   => '[0-9]+', 
          ), 
          'defaults' => array(
          ), 
         ), 
        ), 
       ), 
      ), 
     ), 
    ), 
    'service_manager' => array(
     'abstract_factories' => array(
      'Zend\Cache\Service\StorageCacheAbstractServiceFactory', 
      'Zend\Log\LoggerAbstractServiceFactory', 
     ), 
     'aliases' => array(
      'translatorMvc' => 'MvcTranslator', 
     ), 
     'factories' => array(
      'navigation' => 'Zend\Navigation\Service\DefaultNavigationFactory', 
      'translator' => 'Zend\I18n\Translator\TranslatorServiceFactory', 
     ), 
    ), 
    'translator' => array(
     'locale' => 'en_US', 
     'translation_file_patterns' => array(
      array(
       'type'  => 'gettext', 
       'base_dir' => __DIR__ . '/../language', 
       'pattern' => '%s.mo', 
      ), 
     ), 
    ), 
    'controllers' => array(
     'invokables' => array(
      'Application\Controller\Index' => 'Application\Controller\IndexController' 
     ), 
    ), 
    'view_manager' => array(
     'display_not_found_reason' => true, 
     'display_exceptions'  => true, 
     'doctype'     => 'HTML5', 
     'not_found_template'  => 'error/404', 
     'exception_template'  => 'error/index', 
     'template_map' => array(
      'layout/layout'   => __DIR__ . '/../view/layout/layout.phtml', 
      'application/index/index' => __DIR__ . '/../view/application/index/index.phtml', 
      'error/404'    => __DIR__ . '/../view/error/404.phtml', 
      'error/index'    => __DIR__ . '/../view/error/index.phtml', 
     ), 
     'template_path_stack' => array(
      __DIR__ . '/../view', 
     ), 
    ), 
    // Placeholder for console routes 
    'console' => array(
     'router' => array(
      'routes' => array(
      ), 
     ), 
    ), 
); 
+0

Скорее всего, это где-то локали, однако он не доступен через '$ this-> GetLocale()'. Можете ли вы предоставить любую ссылку, которая показывает, что она должна быть там? – hakre

+0

Я не могу! Все написанные выше - мои предположения, потому что я не знаю другого способа доступа к текущему языку. Есть ли другой способ? Я искал, но я не нашел ничего полезного: \ –

+0

Я тоже не знаю *, я могу только догадываться, и я бы сказал, что сначала должен получить перевод, а затем заглянуть в перевод для языкового стандарта , – hakre

ответ

2

Причина заключается в том, что Перевести является помощник вида (See Reference), что делает его доступным через $this-> , Вам нужно будет использовать Zend_Locale объект в представлении/макете, как это:

<?php 
$locale = new Zend_Locale(); 

// Actual locale 
print $locale->toString(); 

// if locale is 'de_AT' then 'de' will be returned as language 
print $locale->getLanguage(); 

// if locale is 'de_AT' then 'AT' will be returned as region 
print $locale->getRegion(); 
+0

Zend_Locale больше не поддерживается в Zend Framework 2! Он был заменен классом Translator. Во всяком случае, большое спасибо за пояснения о помощнике по просмотру, вы подтвердили моих подозреваемых. На этом этапе я попытаюсь реализовать пользовательский помощник вида для достижения моей цели. –

Смежные вопросы