무제한Optional segments을 사용하면 각 결과 세그먼트가 예약됨을 의미합니다. /news[/{params:.*}]
에 대한 정의 된 경로에
는 다음 경로 자격 :
/news
/news/foo
/news/foo/bar
/news/foo/bar/...
그래서 당신은 대괄호 후를 추가하는 경우 작동하지 않습니다 여분의 고정 세그먼트
/details
를 추가.
당신은 세부 사항에 대한 작업을 수행하는 대괄호 내의 /details
세그먼트와 /news[/{params:.*}/details]
로 정의 있지만 & 휴식 할 첫 번째 경로와 함께합니다. 당신은 여전히 귀하의 첫 번째 경로로 & 체크 마지막 PARAM을 이동하거나 수 내에서 선택 PARAM과 :
$app->get('/news[/{params:.*}[/details]]', function ($request, $response, $args) {
$params = explode('/', $request->getAttribute('params'));
if (end($params) != 'details') {
$response->write("news!");
} else {
// $params for details;
array_pop($params);
$response->write("news details");
}
// $params is an array of all the optional segments
var_dump($params);
});
업데이트 :
실제 문제는 여기에 경로에 충돌하는 정의처럼 보인다 예를 들어, 무제한의 선택 세그먼트는 항상 두 번째로 정의 된 경로와 일치합니다.
$app->group('/news', function() {
$this->map(['GET'], '', function ($request, $response, $args) {
$response->write("news w/o params");
})->setName('news');
// Unlimited optional parameters not ending with "/details"
$this->get('/{params:[[:alnum:]\/]*[^\/details]}', function ($request, $response, $args) {
$params = explode('/', $request->getAttribute('params'));
var_dump($params);
$response->write("news!");
});
// Unlimited optional parameters ending with "/details"
$this->get('/{params:[[:alnum:]\/]*\/details}', function ($request, $response, $args) {
$params = explode('/', $request->getAttribute('params'));
array_pop($params); // fix $params
var_dump($params);
$response->write("news details");
});
});
당신이 경로에 원하는 경로의 예를 추가 할 수 있습니다 : 그것은 이전에 비 충돌 경기에 루트 그룹에서 그들을 둘러싸는 경로 정규식 &으로 경로를 정의하여 해결할 수있다? – Baumi