Controladores
Os controladores são uma das diferentes maneiras de organizar seu projeto; com eles, você pode centralizar a lógica de tratamento de requisições.
Criar rotas
Para criar um Controlador, crie um arquivo PHP na system/Controllers/ pasta, por exemplo: FooBar.php, e adicione o seguinte conteúdo:
<?php
namespace Controllers;
class FooBar
{
public function hello($app, $params)
{
return 'Hello World';
}
public function hundop($app, $params)
{
return 'Hundo P!';
}
}
Em seguida, system/main.php crie uma rota apontando para o controlador:
<?php
$app->action('GET', '/hello', 'FooBar::hello');
$app->action('GET', '/100', 'FooBar::hundop');
Também é possível adicioná-lo a um subdiretório, por exemplo system/Controllers/Foo/Bar/Baz.php, e adicionar esse subdiretório ao conteúdo (não se esqueça de ajustar o namespace):
<?php
namespace Controllers\Foo\Bar;
class Baz
{
public function say($app, $params)
{
return 'Hello World';
}
}
Em seguida, adicione a rota:
<?php
$app->action('GET', '/say', 'Controllers\Foo\Bar\Baz::say');
Defina o prefixo para os namespaces do controlador.
Para evitar escrever o namespace repetidamente, caso ele seja longo, você pode alterar o prefixo do namespace para rotas subsequentes ou rotas por escopo, por exemplo:
<?php
$app->setNamespace('Controllers\\Foo\\Bar');
// system/Controllers/Foo/Bar/Baz.php
$app->action('GET', '/', 'Baz::index');
$app->action('GET', '/create', 'Baz::create');
$app->action('GET', '/read', 'Baz::read');
$app->action('GET', '/update', 'Baz::update');
$app->action('GET', '/delete', 'Baz::delete');
// system/Controllers/Foo/Bar/Baz.php
$app->setNamespace('Controllers\\Halloween\\Ghost\\');
// system/Controllers/Halloween/Ghost/Boo.php
$app->action('GET', '/halloween/trick', 'Boo::trick');
$app->action('GET', '/halloween/treat', 'Boo::treat');
A pasta Controllers não é obrigatória; você pode alterar completamente o namespace, mas para isso precisará adicionar a entrada "psr-4": em composer.json, que atualmente deve ser:
...
"autoload": {
"psr-4": {
"Commands\\": "system/Commands",
"Controllers\\": "system/Controllers",
"Models\\": "system/Models"
}
},
...
Alterar para:
...
"autoload": {
"psr-4": {
"Commands\\": "system/Commands",
"Controllers\\": "system/Controllers",
"CustomFolder\\": "system/CustomFolder",
"Models\\": "system/Models"
}
},
...
Em seguida, configure-o em system/main.php:
<?php
$app->setNamespace('CustomFolder\\Foo\\Bar');
// system/CustomFolder/Foo/Bar/Baz.php
$app->action('GET', '/', 'Baz::index');
$app->action('GET', '/create', 'Baz::create');
$app->action('GET', '/read', 'Baz::read');
$app->action('GET', '/update', 'Baz::update');
$app->action('GET', '/delete', 'Baz::delete');
// Restores the original prefix
$app->setNamespace('Controllers');
// system/Controllers/Hello.php
$app->action('GET', '/', 'Hello::index');