2017-01-26 5 views
0

컨트롤러의 $ url_handlers가 작동하지 않습니다. 정의 된 메소드가 성공적으로 호출되지만 404도 트리거됩니다.

편집 : 컨텍스트 (감사 wmk)에 $ allowed_actions가 추가되었습니다.

예 번호 :

class MyPage_Controller extends Page_Controller { 

    . . . 

    private static $allowed_actions = array(
     'test' 
    ); 

    private static $url_handlers = array(
     'view/$ID/test/' => 'test' 
    ); 

    . . . 

참고

이 404 템플릿 결과
class MyPage_Controller extends Page_Controller { 

    . . . 

    public function test() { 
     var_dump($this->getRequest()->param('ID'), $this->getAction()); 
     return $this; 
    } 

    . . . 

을 위해서 var_dump 출력 아래에 표시되고 : /test

액션 URL의 스태틱 파트 (URL //view/2/test/ 사용) :

string(1) "2" string(4) "test" 

0 URL 패턴에서 후행 /를 제거

+2

은 $ allowed_actions 배열의 "test"동작입니까? https://docs.silverstripe.org/en/3.4/developer_guides/controllers/access_control/#allowed-actions – wmk

답변

1

Silverstripe 3.5.1에서 테스트.

private static $url_handlers = array(
    'view/$ID/test' => 'test' 
); 

HTTPRequest::match() 체크 패턴, 그것은 explode('/', $pattern)로 분리한다. 추가 /은 나중에 RequestHandler::handleRequest()이 패턴의 모든 부분이 (HTTPRequest::allParsed()을 호출하여) URL에서 발생했음을 확인하면 일치하지 않으므로 404을 반환합니다.

+4

도 참조하십시오.'$ this를 반환하지 마십시오. '- 컨트롤러 동작은'SS_HTTPResponse'를 반환해야합니다. –

+0

문서 라우팅에 대한 후행 슬래시 허용, SilverStripe 정말 themfor $ url_handlers와 문제가 있을까요? 문서의 예는 다음과 같습니다. https://docs.silverstripe.org/en/3.4/developer_guides/controllers/routing/ – wmk