2017-02-13 15 views
1

나는 기본 캡처 값 경로가 :Mojolicious route 매개 변수가 렌더링되지 않는 이유는 무엇입니까?

my $api = $r->under('/api/v:api', [ api => qr/\d+/ ], { api => 1 })->name('api'); 

내가이 길 내가 /api/v 얻을 render 경우 :

$api->render; # /api/v 

그것은 OK,하지만 난 그것을 렌더링되지 않습니다 렌더링 버전을 강제로 할 때 :

$api->render({ api => 1 }); # RESULT: /api/v EXPECT: /api/v1 

나는 1 값을

를 기본으로 동일 심지어이 기대하고 있지 않다

Mojolicious 라우트 매개 변수가 강제로 렌더링되지 않는 이유는 무엇입니까?

답변

0

텍스트와 자리 표시자를 동일한 경로 세그먼트 (슬래시 사이)에 섞기를 원할 때 에서 볼 수 있듯이 자리 표시자를 괄호로 묶어야합니다.

$r->under('/api/v(:api)', ...) 

는하지만, 당신이 괄호가 형성 일단 당신이 : 그렇게

$r->under('/api/v(api)', ...) 

너무 작업을해야 생략 할 수 있다는 말을 더 나아가, 작동합니다.

+0

당신이 옳지 않습니다. 괄호 안에는 아무런 문제가 없습니다. 문제는 [여기] (https://metacpan.org/source/SRI/Mojolicious-7.28/lib/Mojolicious/Routes/Pattern.pm#L72)입니다. palaceholder 값이 다음 번 검사를 통해 렌더링되어야하는지 확인해야합니다 :'|| $ values ​​-> {$ value}' –

+0

이 수정 테스트가 실패하더라도 우리는 실패합니다. 이 버그로 인해 캐싱에 더 심각한 문제가 발생하기 때문입니다. 버전이 렌더링되지 않아'/ api/v1/index.html'을 상상해보십시오.이 페이지의 이미지는'/ api/v/image.jpg'로 렌더링됩니다. 다음에 우리는 백엔드를 업그레이드하고 버전 2를 구현할 것입니다. 응용 프로그램은'/ api/v2/index.html'을 쿼리 할 것이지만 이미지 링크는'/ api/v/image.jpg'가 될 것입니다. 따라서 예상되는 버전 2 대신에 이미지 버전 1을 표시하게됩니다. –

+0

'/ api/v '요청이 왔을 때에도'/ api/v1/image.jpg'가 렌더링 될 것입니다. –