Legato Framework router is a simple implementation of AltoRouter use for routing HTTP Request.

Where to Define Your Application Routes

You should define your routes inside routes.php file which is located in the routes folder when you install a fresh copy of Legato there will be one route defined like so


<?php

# routes/routes.php
/**
 * Your application routes go here
 */

use Legato\Framework\Routing\Route;

/**
    * @param target, 
    * @param handler, fully qualified classname and method or Closure 
    * @param name (optional) must be unique for each route, 
 */

Route::get('/', 'App\Controllers\IndexController@show', 'homepage');

Route::get('/user/{id}', function ($id) {
    echo 'Example route using closure '.$id;
});

Route with Closure or Callback

You can also define a route that uses a Closure or callback as the handler like so


<?php

Route::get('/user/[i:id]', function ($id) {
    echo 'Example route using closure '.$id;
});

Route Controller


<?php

Route::post('/contact', 'App\Controllers\ContactController@save');

When you define a controller route, you should also specify the fully qualified name of a controller and method that will be executed for example for the route /contact the controller is ContactController while the method to be executed is save, App\Controllers\ContactController@save

Defining GET Routes


<?php
/**
    * @param target, 
    * @param handler, fully qualified classname and method or Closure 
    * @param name (optional) must be unique for each route, 
 */

Route::get('/', 'App\Controllers\IndexController@show');

Defining POST Routes


<?php
/**
    * @param target, 
    * @param handler, fully qualified classname and method or Closure 
    * @param name (optional) must be unique for each route, 
 */

Route::post('/contact', 'App\Controllers\ContactController@save', 'contact_use');

The Legato Route class supports all major HTTP Verbs (POST, GET, PUT, PATCH, DELETE) for example to create a route with PATCH HTTP verb simple do the following


<?php 
/**
    * @param target, 
    * @param handler, fully qualified classname and method or Closure 
    * @param name (optional) must be unique for each route, 
 */

Route::patch('/profile', 'App\Controllers\ProfileController@update');

Defining Route Group


<?php

/**
    * @param target, 
    * @param handler, fully qualified classname and method or Closure 
    * @param name (optional) must be unique for each route, 
 */

Route::group('/admin', function (){
    Route::add('GET', '/dashboard', 'controller@stop', 'admin_dashboard');
    Route::add('POST', '/users', 'controller@users', 'admin_users');

    Route::add('GET', '/user/[i:id]', function($id) { 
             echo  'get user with Id: '. $id;
     }, 'admin_view_user');
});

Defining Route Resource

If you are using Legato 1.1.0 you can use the resource method to create RESTFul route

<?php

Route::resource('/profile', 'ProfileController');

this will generate the following routes and expected methods:


Verb       URI                       Method             Route Name

GET        /profile                  index              profile_index
GET        /profile/create           showCreateForm     profile_create_form
POST       /profile                  save               profile_save
GET        /profile/[i:id]           show               profile_display
GET        /profile/[i:id]/edit      showEditForm       profile_edit_form
POST       /profile/[i:id]           update             profile_update
GET        /profile/[i:id]/delete    delete             profile_delete

You should then create all the methods in your controller, this can be done using the Legato commandline tool or manually, if you choose to use the commandline tool then:

php legato add:controller ProfileController --restful=true

The above command will create a ProfileController controller with the content below:


<?php

namespace App\Controllers;

class ProfileController extends BaseController
{
    /**
    * display all profiles
    */
    public function index()
    {
        //
    }

    /**
    * Display the form to create a 
    */
    public function showCreateForm()
    {
        //
    } 

    /**
    * Save the resource  
    */
    public function save()
    {
        //
    }

    /**
    * Display a specific resource 
    *   
    * @param $id
     */
    public function show($id)
    {
        //
    }

    /**
    * Show the form to edit the resource
    * 
    * @param $id
     */
    public function showEditForm($id)
    {

    }

    /**
    * Update the specified resource
    * 
    * @param $id
     */
    public function update($id)
    {

    }

    /**
    * Delete the specified resource
    * 
    * @param $id
     */
    public function delete($id)
    {

    }
}