gears/router

This package is abandoned and no longer maintained. No replacement package was suggested.

Laravel Router Standalone

v0.6.6 2014-12-11 02:46 UTC

This package is not auto-updated.

Last update: 2020-01-24 15:23:41 UTC


README

Looking for maintainers, I no longer do much if any PHP dev, I have moved on, mostly work in dotnet core, node.js & golang these days. If anyone is keen to take over these projects, get in touch - brad@bjc.id.au

The Router Gear

Build Status Latest Stable Version Total Downloads License

Laravel Router Standalone

Okay so by now hopefully you have heard of Laravel, the PHP framework that just makes things easy. So first things first full credit goes to Taylor Otwell for the Router API.

How to Install

Installation via composer is easy:

composer require gears/router:*

How to Use

In your legacy - non Laravel application. You can use the Laravel Router API like so:

// Make sure you have composer included
require('vendor/autoload.php');

// Install the gears router component
$router = new Gears\Router();
$router->routesPath = '/file/path/to/my/routes';
$router->dispatch();

// At this point execution will not continue. The router will either output
// the results from a route and exit or it will output a 404 and then exit.

The /file/path/to/my/routes can either be a routes php file. eg: /file/path/to/my/routes.php this file would look just like any routes.php file you would find in any other Laravel App.

OR

The path can be to a folder containing lots of route files. The files will be included automatically for you and added to the router. This is my prefered solution.

A little aside: In my Laravel Apps I place some code, similar to what is in this Router that loops through a routes folder inside my app dir. I place one route definition per file. I rarely use Controllers. I name each route file like search-{postcode}.GET.php which contains: Route::get('/search/{postcode}', function($postcode){}); It makes for a very fast prototyping development life cycle.

An Example Route

So just like a Laravel Route, see: http://laravel.com/docs/routing Here is an example route file.

Route::get('/', function()
{
	return 'I Am Groot';
});

Class Alias Behind the scenes when you call dispatch() we automatically create a new class alias called Route, this sets up the normal public API you are used to. However if the class Route is already in existence. We also alias ourselves to Gears\Route.

The 404 Error

Out of the box we have built in a simple and clean looking 404 error page. Credits go to: http://html5boilerplate.com/ Thank Guys.

However if you wish to overide the 404 content the router returns. The instalation of the router might look like:

$router = new Gears\Router();
$router->routesPath = '/file/path/to/my/routes';
$router->notFound = 'Custom 404 HTML';
$router->dispatch();

The 404 Exception If you set the 404 parameter to a boolean value of false. Then we will simply re-throw the 404 exception, which is an instance of:

Symfony\Component\HttpKernel\Exception\NotFoundHttpException

You can then deal with this yourself. An example use case might be to have multiple routers. Which then could provide a HMVC type setup.

Exit On Complete

For most setups you will probably want the execution of PHP to stop after the router has done it's thing and sent the response. However if for whatever reason you don't want this, perhaps some sort of output buffering or something. The instalation of the router might look like:

$router = new Gears\Router();
$router->routesPath = '/file/path/to/my/routes';
$router->exitOnComplete = false;
$router->dispatch();

So now for the why?

While laravel is so awesomely cool and great. If you want to pull a feature out and use it in another project it can become difficult. Firstly you have to have an innate understanding of the IoC Container.

You then find that this class needs that class which then requires some other config variable that is normally present in the IoC when run inside a normal Laravel App but in your case you haven't defined it and don't really want to define that value because it makes no sense in your lets say legacy application.

Perfect example is when I tried to pull the session API out to use in wordpress. It wanted to know about a booted method, which I think comes from Illuminate\Foundation\Application. At this point in time I already had to add various other things into the IoC to make it happy and it was the last straw that broke the camels back, I chucked a coders tantrum, walked to the fridge, grabbed another Redbull and sat back down with a new approach.

The result is this project.

Developed by Brad Jones - brad@bjc.id.au