2010-11-27 4 views
0

현재 내 프로젝트에서 Zend와 협력하고 있습니다. 이 프로젝트에는 카테고리가 있습니다. 일반적으로 URL의 Zend 경로를 다시 작성하여 http : //site.ext/category/ [category-name] /와 같은 페이지를 볼 수 있습니다. 그러나 SEO 목적을 위해, 나는 뿌리 수준의 URL을 만들고 싶습니다. 즉, http : //site.ext/ [category-name] /.Zend : '루트'수준의 경로

물론, Zend는 [category-name]이라고하는 컨트롤러를 찾으려고합니다. 이 문제를 해결하는 가장 좋은 방법은 무엇입니까? 나는 'fallback 컨트롤러'와 같은 것을 생각해 봤다. 페이지가 발견되지 않으면 콜백 컨트롤러가 요청을 처리하고 카테고리가 존재하는지 확인하십시오. 그렇지 않은 경우 오류 제어기로 진행하십시오.

이것이 최선의 해결책인가요? 내 동료 프로그래머의 의견은 무엇입니까?

안부,

마티

답변

0

나는 당신이 제시 한 내용을 기본적으로 완료했습니다. Zend_Controller_Action을 확장하고 init()에서 런타임에 내 경로를 정의했습니다.

기술적으로는 정상적으로 작동했습니다. 그것이 효율적이든, 최선의 해결책이든, 나는 잘 모르지만 그것은 나에게 잘 맞았습니다.

0

라우터의 기본 경로를 사용하지 마십시오. 라우터의 기본 경로를 제거하고 직접 설정하십시오.

0

마지막으로 프론트 컨트롤러 플러그인을 찾으러 갔는데, 현재 사용하고있는 코드 스 니펫입니다.

<?php 
class App_Controller_Plugin_Seo extends Zend_Controller_Plugin_Abstract 
{ 
    public function preDispatch(Zend_Controller_Request_Abstract $request) 
    { 
    // Retreive request params (module/controller/action/<params>) 
    $params = $request->getParams(); 

    // Initiate categories model 
    $providers = new Application_Model_DbTable_Providers; 

    // Lookup provider 
    $provider = $providers->getProviderByUrl($params[ 'controller' ]); 

    // If the provider exists 
    if (! is_null($provider)) { 

     // Rewrite request 
     $request->setModuleName('default') 
       ->setControllerName('provider') 
       ->setActionName('view') 
       ->setParams(
        array(
         'url' => $params[ 'controller' ] 
        ) 
       ); 

     return; 

    } 

    return; 
} 
} 
?> 
관련 문제