akrabat/rka-slim-controller

Dynamically instantiated controller classes for Slim Framework

2.0.1 2015-01-07 09:54 UTC

This package is auto-updated.

Last update: 2021-10-05 13:51:29 UTC


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.