akrabat / rka-slim-controller
Dynamically instantiated controller classes for Slim Framework
Installs: 26 397
Dependents: 1
Suggesters: 1
Security: 0
Stars: 48
Watchers: 8
Forks: 4
Open Issues: 1
Requires
- php: >=5.4
- slim/slim: ~2.4
README
An extension to Slim Framework that allows you use to dynamically instantiated controllers with action methods wherever you would use a closure when routing.
The controller can optionally be loaded from Slim's DI container, allowing you to inject dependencies as required.
Installation
composer require akrabat/rka-slim-controller
Usage
Use the string format {controller class name}:{action method name}
wherever you would usually use a closure:
e.g.
$app = new \RKA\Slim();
$app->get('/hello:name', 'App\IndexController:home');
You can also register the controller with Slim's DI container:
$app = new \RKA\Slim();
$app->container->singleton('App\IndexController', function ($container) {
// Retrieve any required dependencies from the container and
// inject into the constructor of the controller
return new \App\IndexController();
});
$app->get('/', 'App\IndexController:index');
Controller class methods
RKA Slim Controller will call the controller's setApp()
, setRequest()
and setResponse()
methods if they exist and populate appropriately. It will
then call the controller's `init()`` method.
Hence, a typical controller may look like:
<?php
namespace App;
class IndexController
{
// Optional properties
protected $app;
protected $request;
protected $response;
public function index()
{
echo "This is the home page";
}
public function hello($name)
{
echo "Hello, $name";
}
// Optional setters
public function setApp($app)
{
$this->app = $app;
}
public function setRequest($request)
{
$this->request = $request;
}
public function setResponse($response)
{
$this->response = $response;
}
// Init
public function init()
{
// do things now that app, request and response are set.
}
}
Example project
Look at slim-di.