Controladores de rota implícitos

Aprenda como criar rotas implícitas dentro dos métodos de um controlador para criar caminhos usando métodos HTTP.

Criar controlador

Os nomes dos métodos representam os métodos e caminhos HTTP exigidos pelas rotas, por exemplo:

Método do controlador Método de rota Percurso Equivalente
getInfo() GET /info $app->action('GET', '/info')
putInfo() PUT /info $app->action('PUT', '/info')
putfooBar() PUT /foo-bar $app->action('PUT', '/foo-bar')
postPing() POST /ping $app->action('POST', '/ping')
anyFooBarBaz() ANY /foo-bar-baz $app->action('ANY', '/foo-bar-baz')
getIndex() GET / $app->action('GET', '/')
headIndex() HEAD / $app->action('HEAD', '/')
deleteSomething() DELETE /something $app->action('DELETE', '/something')

Para testar, crie o arquivo system/Controllers/ImplicitController.php e adicione o seguinte conteúdo a ele:

<?php namespace Controller; class ImplicitController extends \Inphinit\Routing\Treaty { public function getIndex() { return 'Home'; } public function getInfo() { phpinfo(); } public function postPing() { error_log($_SERVER['REMOTE_ADDR']); } public function anyFooBarBaz() { phpinfo(); } }

Em seguida, adicione isto a main.php ou dev.php:

\Controller\ImplicitController::action($app);

É equivalente a:

$app->action('GET', '/', 'ImplicitController::getIndex'); $app->action('GET', '/info', 'ImplicitController::getInfo'); $app->action('POST', '/ping', 'ImplicitController::postPing'); $app->action('ANY', '/foo-bar-baz', 'ImplicitController::anyFooBarBaz');

Limitações

A diferença em relação aos controladores que criam rotas implicitamente é que apenas ANY um método HTTP pode ser usado por rota, enquanto que em declarações de rotas normais é possível adicionar mais de um método HTTP. O exemplo a seguir não pode ser escrito na forma de um controlador que cria rotas implicitamente:

$app->action(['GET', 'HEAD'], '/', 'FooBar::home'); $app->action(['POST', 'PUT', 'PATCH'], '/test', 'FooBar::test');

Em rotas implicitamente criadas para terem métodos diferentes para o mesmo caminho, será sempre necessário criar um método de classe para cada método de um caminho, resultando assim em rotas diferentes:

<?php namespace Controller; class FooBar extends \Inphinit\Routing\Treaty { public function getIndex() { ... } public function headIndex() { ... } public function postTest() { ... } public function putTest() { ... } public function patchTest() { ... } }
Página inicial
Apoie com uma estrela no GitHub