Первый необязательный сегмент маршрутизации действует как обязательный для дочерних маршрутов.
У меня есть следующее определение маршрутизации:
'admin_default' => array(
'type' => 'segment',
'options' => array(
'route' => '[/:lang]/administrator[/:module][/:action]',
'constraints' => array(
'lang' => '[a-zA-Z]{2}',
'module' => '[a-zA-Z0-9_-]*',
'action' => '[a-zA-Z0-9_-]*',
),
'defaults' => array(
'module' => 'Application',
'controller' => 'Admin',
'action' => 'index',
'lang' => 'ru'
),
),
'may_terminate' => true,
'child_routes' => array(
'wildcard' => array(
'type' => 'wildcard',
'may_terminate' => true,
'options' => array(
'key_value_delimiter' => '/',
'param_delimiter' => '/'
),
),
),
),
Итак, я не могу избавиться от сегмента [/:lang] в строке URL
Например:
Помощник просмотра URL $this->url('admin_default', array('module' => 'albums'))
возвращает следующую строку URL:
/administrator/albums
в то время как $this->url('admin_default/wildcard', array('module' => 'albums', 'action' => 'edit', 'id' => album_id_here))
возвращает:
/ru/administrator/albums/edit/id/album_id_here
Как я могу удалить сегмент [/:lang] из строки URL во втором случае?
1 ответ
Так что случилось с этим "ру"?
Вы должны расширить URL помощника Zend View, чтобы вставить текущую локаль в URL
посмотрите, что я сделал для моего текущего проекта:
<?php
namespace PatrickCore\View\Helper;
use Doctrine\ORM\EntityManager;
use Zend\View\Helper\Url;
class I18nUrl extends Url {
/**
* @var String
*/
protected $lang;
protected $router;
public function __construct($locale,$router) {
$arraylanguagemapping = array(
'en_US' => 'en',
'fa_IR' => 'fa'
);
$this->lang = $arraylanguagemapping[$locale];
$this->router = $router;
}
public function __invoke($name = null, array $params = array(), $options = array(), $reuseMatchedParams = false) {
$this->setRouter($this->router);
if (!array_key_exists('lang', $params)) {
$params['lang'] = $this->lang;
}
return parent::__invoke($name,$params,$options,$reuseMatchedParams);
}
}
?>