2

次のルーティング定義があります。

'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' => '/' 
             ), 
        ), 
    ), 
), 

そのため、URL文字列のセグメント [/:lang] を取り除くことができません

例えば:

URL ビュー ヘルパー$this->url('admin_default', array('module' => 'albums'))は、次の URL 文字列を返します。

/administrator/albums 

while を$this->url('admin_default/wildcard', array('module' => 'albums', 'action' => 'edit', 'id' => album_id_here))返します:

/ru/administrator/albums/edit/id/album_id_here 

2 番目のケースで URL 文字列から [/:lang] セグメントを削除するにはどうすればよいですか?

4

1 に答える 1

0

それで、その「ru」はどうしたの?

現在のロケールを URL に挿入するには、zend ビュー ヘルパー 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);

    }

}

?>
于 2013-04-03T12:54:05.733 に答える