我正在尝试路由到单个类,并在该类中加载不同的方法。现在我只能设法在SearchInquiryHandler类中加载handle()。如何从不同的路由在SearchInquiryHandler中加载loadThisMethod()。我在想,如果我可以检测到路由url,并且通过适当的检查,我可以从我的handle()方法加载loadThisMethod()。任何指导都将非常有帮助。
对于单个路由,此处为routes.php
return static function (Application $app, MiddlewareFactory $factory, ContainerInterface $container) : void {
$app->post('/api/search/inquiry', App\Handler\SearchInquiryHandler::class, 'api.search.inquiry');
}这是我的SearchInquiryHandler.php
class SearchInquiryHandler implements RequestHandlerInterface {
protected $template = null;
private $searchInquiry;
private $containerName;
public function __construct(TemplateRendererInterface $template, SearchInquiryresultForm $form, SearchInquiry $searchInquiry, $containerName) {
$this->template = $template;
$this->searchInquiry= $searchInquiry;
}
public function handle(ServerRequestInterface $request) : ResponseInterface
{
$result = $this->searchInquiry->setInquiryValues();
return new HtmlResponse($this->template->render('app::search-inquiryresult', [
'entry' => $result,
]));
}
<!-- HOW TO LOAD THIS METHOD FROM THE ROUTE -->
public function loadThisMethod(ServerRequestInterface $request) : ResponseInterface
{
return new JsonResponse(['ack' => time()]);
}这是我的SearchInquiryHandlerFactory.php
class SearchInquiryHandlerFactory {
public function __invoke(ContainerInterface $container) : RequestHandlerInterface
{
$dependency = $container->get(SearchInquiry::class);
$template = $container->get(LaminasViewRenderer::class);
$form = $container->get(SearchInquiryresultForm::class);
return new SearchInquiryHandler($template,$form,$dependency,$container);
}
}这是我的ConfigProvider.php
public function getDependencies() : array
{
return [
'invokables' => [
****Some Code here****
],
'factories' => [
Handler\SearchInquiryHandler::class => Handler\SearchInquiryHandlerFactory::class,
],
];
}发布于 2020-11-18 03:53:32
好的,明白了!首先,我没有在handle()中将$request传递给$this->loadthismethod($request);
其次,如果您希望在handle()内使多个路由指向相同的Class SearchInquiryHandler
您可以指定具有唯一名称的路径
$app->post('/api/search/inquiry', App\Handler\SearchInquiryHandler::class, 'api.search.inquiry');
$app->get('/api/search/test', App\Handler\SearchInquiryHandler::class, 'api.search.test');
在handle()中,您可以检查路由地址,并根据需要加载不同的方法
$uri = $request->getUri();
$path = $uri->getPath();
if($path!='/api/search/inquiry'){
return $this->postAjax($request);
}else{
return new HtmlResponse($this->template->render('app::search-inquiryresult', [
'entry' => $somedata,
]));
}或者,如果对于单个类的所有方法只有一个http请求方法,如GET或POST,则可以这样做
$app->get('/api/search[/{action:inquiry|test}[/{id}]]', App\Handler\SearchInquiryHandler::class, 'api.search.inquiry',['GET']);
我相信有更好的方法来处理这件事
https://stackoverflow.com/questions/64875814
复制相似问题