Многоязычный коммутатор cakephp 2 пропускает второй параметр - PullRequest
0 голосов
/ 29 марта 2019

У меня есть мультиязычное приложение cakephp2
оно работало с трехбуквенной языковой строкой, но я изменил 3 буквы на 2 буквы (от англ до ан, до ар).

теперь не получается третий параметр при переключении языка, как
localhost/project1/posts/index работает нормально
localhost/project1/posts/add работает нормально
localhost/project1/posts/edit/1 не работает
localhost/project1/posts/view/1 не работает
при переключении языка на последних 2 ссылках он пропускает 1 из URL.означает, что он пропускает любой параметр, кроме контроллера и действия.
мой код такой

MyHtmlHelper

<?php 
App::uses('HtmlHelper', 'View/Helper');
class MyHtmlHelper extends HtmlHelper {
    public function url($url = null, $full = false){ 
        if(!isset($url['language']) && isset($this->params['multilengual'])){
            $url['language'] = $this->params['multilengual'];
        }
        return parent::url($url, $full);
  } 
}

AppController.php

    class AppController extends Controller {
        public $components = array('Cookie','Session');
        public $helpers = array('Html' => array('className' => 'MyHtml'));

        private function _setLanguage(){ 
            if ($this->Cookie->read('lang') && !$this->Session->check('Config.language')){ 
                $this->Session->write('Config.language', $this->Cookie->read('lang')); 
            }
            else if (isset($this->params['language'])){ 
                if ($this->params['language'] != $this->Session->read('Config.language')){  
                    *****Added this for 2 letter lang string in url*********
                    switch( $this->params['language'] ) {
                        case 'ar':
                            $lang = 'are';
                            break;
                        case 'en':
                        default:
                            $lang = 'eng';
                            break;
                    }
                    *******
                    $this->Session->write('Config.language', $lang);
                    $this->Cookie->write('lang', $lang, false, '20 days');
                } 
            } 
        }
        public function beforeFilter(){ 
            $this->_setLanguage(); 
        }
    }

Routs.php

    Router::connect('/', array('controller' => 'posts', 'action' => 'index'));
    Router::connect('/:language/:controller/:action/*', array(), array('language' => 'en|ar'));
    Router::connect('/:language/:controller', array('action' => 'index'), array('language' => 'en|ar'));
    Router::connect('/:language', array('controller' => 'posts', 'action' => 'index'), array('language' => 'en|ar')) ;


    Router::connect('/pages/*', array('controller' => 'pages', 'action' => 'index'));
    CakePlugin::routes();
...