2014-09-15 2 views
2

CMS 모듈이없는 프레임 워크를 처음 사용하고 있습니다. 컨트롤러/액션에 의해 처리되지 않는 URL을 통해 앱을 방문하면 'URL 규칙이 일치하지 않습니다.'라는 텍스트가 포함 된 페이지 만 표시됩니다. 이 결과는 Director :: handleRequest()에서 컨트롤러를 URL 세그먼트에 일치시키지 않은 것입니다. 또는 "Action 'ABC'를 XYZController 클래스에서 사용할 수 없습니다."SilverStripe 프레임 워크 전용 - 처리 방법 404

좋은 404 페이지에 해당하는 컨트롤러에 대한 연결 해제 된 요청을 보내고 싶습니다. 이 작업을 수행하는 가장 올바른 방법은 무엇입니까?

답변

2

오류 템플릿은 CMS에만 포함됩니다. 프레임 워크는 메시지가있는 일반 텍스트로 HTTP 응답 코드를 반환합니다.

내가 너무 내 자신의 프레임 워크 전용 프로젝트를 시작했습니다이 내 솔루션입니다 :

[routes.yml]

--- 
Name: rootroutes 
--- 
Director: 
    rules: 
    '': 'MyController' 
    '$URLSegment': 'MyController' 

[MyController에]

class MyController extends Controller { 

    private static $url_handlers = array(
     '$URLSegment' => 'handleAction', 
    ); 


    public function index() { 
     return $this->httpError(404, "Not Found"); 
    } 


    /** 
    * Creates custom error pages. This will look for a template with the 
    * name ErrorPage_$code (ie ErrorPage_404) or fall back to "ErrorPage". 
    * 
    * @param $code int 
    * @param $message string 
    * 
    * @return SS_HTTPResponse 
    **/ 
    public function httpError($code, $message = null) { 
     // Check for theme with related error code template. 
     if(SSViewer::hasTemplate("ErrorPage_" . $code)) { 
      $this->template = "ErrorPage_" . $code; 
     } else if(SSViewer::hasTemplate("ErrorPage")) { 
      $this->template = "ErrorPage"; 
     } 

     if($this->template) { 
      $this->response->setBody($this->render(array(
       "Code" => $code, 
       "Message" => $message, 
      ))); 
      $message =& $this->response; 
     } 

     return parent::httpError($code, $message); 
    } 

} 

[ ErrorPage.ss]

<h1>$Code</h1> 
<p>$Message</p> 

ErrorPage_404.ss, ErrorPage_500.ss 등을 사용하여보다 구체적인 오류 템플릿을 만들 수도 있습니다.

+0

죄송합니다. 기본적인 예일뿐입니다. 자신의 앱에서 다르게 경로를 지정하려는 경우 404가 handleAction 또는 handleRequest에 표시 될 가능성이 큽니다. – micmania1

0

앞서 언급 한 경로를 업데이트하지 않고 정규 표현식 리디렉션 매핑을 허용하는 모듈을 최근에 만들었습니다. 찾을 수없는 페이지에 연결 (404). 이것은 또는 CMS 존재없이 작동하도록 설계되었습니다 :

https://github.com/nglasl/silverstripe-misdirection

그것은 기본적으로 현재의 요청/응답을 처리 할 수있는 요청 필터를 사용합니다, 적절하게 정의 된 수있는 매핑 방향을 지시.

관련 문제