Controllers

Controllers are one of the different ways to organize your project, with controllers you can centralize the request handling logic.

Create routes

To create a Controller, create a PHP file in the system/Controllers/ folder, for example: FooBar.php, then add the following content:

<?php namespace Controllers; class FooBar { public function hello($app, $params) { return 'Hello World'; } public function hundop($app, $params) { return 'Hundo P!'; } }

Then in system/main.php create a route pointing to the controller:

<?php $app->action('GET', '/hello', 'FooBar::hello'); $app->action('GET', '/100', 'FooBar::hundop');

It's also possible to add it to a subdirectory, for example system/Controllers/Foo/Bar/Baz.php, and add that to the content (don't forget to adjust the namespace):

<?php namespace Controllers\Foo\Bar; class Baz { public function say($app, $params) { return 'Hello World'; } }

Then add the route:

<?php $app->action('GET', '/say', 'Controllers\Foo\Bar\Baz::say');

Define the prefix for the controller namespaces

To avoid repeatedly writing the namespace if you have a long namespace, you can change the namespace prefix for subsequent routes, or routes by scope, example:

<?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');

The Controllers folder is not mandatory; you can completely change the namespace, but to do so you will need to add the entry "psr-4": to composer.json, which currently should be:

... "autoload": { "psr-4": { "Commands\\": "system/Commands", "Controllers\\": "system/Controllers", "Models\\": "system/Models" } }, ...

Change it to:

... "autoload": { "psr-4": { "Commands\\": "system/Commands", "Controllers\\": "system/Controllers", "CustomFolder\\": "system/CustomFolder", "Models\\": "system/Models" } }, ...

Then configure it in 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');
Go to homepage
Star us on Github