Ir para o conteúdo principal
Página inicial
Github

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 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() { ... } }