Zend_Controller_Router_Route_Hostname 과 포트

3379 단어 ZendPHPF#
더 읽 기
최근 zend 의 경 로 를 설정 하려 면 2 급 도 메 인 이름 에 따라 권한 을 제어 해 야 합 니 다.그 중 Zend 를 사 용 했 습 니 다.Controller_Router_Route_Hostname 이라는 경로.그리고 루트 체인 을 사 용 했 습 니 다.설정 코드 는 다음 과 같 습 니 다.
routes.hostname.type  = "Zend_Controller_Router_Route_Hostname"
routes.hostname.route = ":instance"

routes.hostname.chains.static.route = ":action"
routes.hostname.chains.static.defaults.controller = index

routes.hostname.chains.objects.type = "Zend_Controller_Router_Route_Regex"
routes.hostname.chains.objects.route = "([a-z]+(?:-[a-z]+)?)s(?:/([a-z]+)?)?"
routes.hostname.chains.objects.defaults.action = list
routes.hostname.chains.objects.map.1 = "controller"
routes.hostname.chains.objects.map.2 = "action"
routes.hostname.chains.objects.reverse = "%ss/%s"

routes.hostname.chains.object.type = "Zend_Controller_Router_Route_Regex"
routes.hostname.chains.object.route = "([a-z]+(?:-[a-z]+)?)s/([0-9a-f]{32})(?:/([a-z]+))?"
routes.hostname.chains.object.defaults.action = view
routes.hostname.chains.object.map.1 = "controller"
routes.hostname.chains.object.map.2 = "id"
routes.hostname.chains.object.map.3 = "action"
routes.hostname.chains.object.reverse = "%ss/%s/%s"

routes.hostname.chains.children.type = "Zend_Controller_Router_Route_Regex"
routes.hostname.chains.children.route = "((?:[a-z]+s/[1-9]\d*/)*)([a-z]+(?:-[a-z]+)?)s/([0-9a-f]{32})/([a-z]+(?:-[a-z]+)?)s(?:/([a-z]+))?"
routes.hostname.chains.children.defaults.action = list
routes.hostname.chains.children.map.1 = "ancestors"
routes.hostname.chains.children.map.2 = "parent_cls"
routes.hostname.chains.children.map.3 = "parent_id"
routes.hostname.chains.children.map.4 = "controller"
routes.hostname.chains.children.map.5 = "action"
routes.hostname.chains.children.reverse = "%s%ss/%s/%ss/%s"

 프로그램 에서 생 성 된 url 포트 번 호 를 모두 잃 어 버 렸 습 니 다.코드 원본 을 자세히 보 니 ZendController_Router_Route_Chain 의 assemble 방법
   public function assemble($data = array(), $reset = false, $encode = false)
    {
        $value = '';

        foreach ($this->_routes as $key => $route) {
            if ($key > 0) {
                $value .= $this->_separators[$key];
            }
            
            $value .= $route->assemble($data, $reset, $encode);
            
            if (method_exists($route, 'getVariables')) {
                $variables = $route->getVariables();
                
                foreach ($variables as $variable) {
                    $data[$variable] = null;
                }
            }
        }

        return $value;
    }

 순환 호출 루트,하지만 ZendController_Router_Route_Hostname 의 match 방법 중
 // Get the host and remove unnecessary port information
        $host = $request->getHttpHost();
        if (preg_match('#:\d+$#', $host, $result) === 1) {
            $host = substr($host, 0, -strlen($result[0]));
        }

 이 단락 은 포트 번 호 를 지 웠 고 ZendController_Router_Route_Chain 에 서 는 이곳 을 되 돌려 주 는 url 과 뒤의 url 을 연결 하여 발생 하 는 url 포트 를 자 연 스 럽 게 잃 어 버 렸 습 니 다.당시 작가 가 왜 이렇게 썼 는 지 다른 이유 가 있 었 기 때 문 일 까?포트 가 있 는 url 을 되 돌려 주 는 것 이 어 떻 습 니까?PHP 에 익숙 한 사람들 에 게 설명 을 해 주 길 바란다.

좋은 웹페이지 즐겨찾기