그렇게 쉽지는 않을 것입니다. 경로가 일치하지 않는 이유에 대한 정확한 세부 정보를 찾으려면 자체 기능을 구축해야합니다.
해당 클래스의 방법을 사용하여 경로 일치를 확인합니다. 예를 들어 세그먼트 경로의 경우이 방법은 in the Zend\Router\Http\Segment
class on line 359-404입니다.
일치하는 항목이 없으면 클래스는 null/void를 반환합니다. 경로가 일치하지 않는 이유에 대한 세부 정보는 응답의 일부가 아니므로 직접 깊이 분석해야하며 사용자 정의 오류 응답을 작성해야합니다. 솔루션을 수동으로 할 (요청 URL에서 분리하여, 예를 들어) 사람 번호를 확인 디스패치 오류 이벤트가 트리거 될 때 기본 404 응답하기 전에 사용자 정의 응답을 반환 할 수
같은.
<?php
namespace Application;
use Zend\Http\Response;
use Zend\Mvc\MvcEvent;
use Zend\Router\Http\RouteMatch;
class Module{
public function onBootstrap(MvcEvent $event)
{
$eventManager = $event->getApplication()->getEventManager();
$eventManager->attach(MvcEvent::EVENT_DISPATCH_ERROR, array($this, 'validatePersonNumber'), 1000);
}
public function validatePersonNumber(MvcEvent $event)
{
if ($event->getError() !== Application::ERROR_ROUTER_NO_MATCH) {
// Not a 404 error
return;
}
$request = $event->getRequest();
$controller = $event->getController();
if($controller !== 'Application\Expected\ControllerName'){
// not a controller for person number route
return;
}
$url = $request->getRequestUri();
$personNumber = ''; //...manually isolate the person number from the request...
/** @var Response $response */
$response = $event->getResponse();
$response->setStatusCode(404);
$viewModel = $event->getViewModel();
$viewModel->setTemplate('error/404');
$event->setViewModel($viewModel);
$event->stopPropagation(true);
if (strlen($personNumber) !== 12) {
$viewModel->setVariable('message', 'A person number should have 12 characters');
}
if(...additional check...){
$viewModel->setVariable('message', 'Some other message');
}
}
}
상황이 당신이 리스너 클래스로 모든 이동 (대신 당신의
module.php
파일을 오염) 고려할 수 예쁘게 만들려면 당신은 또한 여기에
404
코드를 고려할 수 있습니다. 그럴 가능성이 가장 높은 곳은
is a more suitable status code입니다.
참고 : 이것은 완전히 완료된 예는 아니며 더 많은 작업이 필요합니다!
멋진 idear이지만 $ event-> getController()); null – stefen
@stefen, 이해할 수 있고, 지금은 확인할 수 없습니다. 나는 나중에 이것으로 돌아온다 ... – Wilt
고마워 :) 이것은 지원되지 않는다면 수입이 아니지만 ZF2에 또 다른 문제가있다. 나를 도울 수있다 : http://stackoverflow.com/questions/42859322/ zend-2-sqlsrv-prepareparams-not-setted – stefen