basecode/route

Component route, componente para criação de projetos mvc com rotas.

2.1.0 2022-03-11 15:48 UTC

This package is auto-updated.

Last update: 2024-04-12 00:30:55 UTC


README

route license GitHub tag (latest by date)

What's the route ?

Summary: Route is a standalone component for creating routes in mvc systems.

Features

  • Creating quick routes.
  • Creating routes with dynamic parameters.
  • Creating routes of type [ get | post | put | patch | delete ].
  • Default route creation.

Getting Started

Installation

You can install the route in your project with composer.

Just run the command below on your terminal:

composer require basecode/route

or in your composer.json require:

"basecode/route": "2.1.*"

Usage

After installing the route, it is very easy to use it, just instantiate a route object in your project's index and start creating your routes.

Recommendation for using the route

The recommendation is to have a .htaccess file that points the URI as parameter GET[route] to the index of your project, where the route will be.

Example .htaccess file:

RewriteEngine On
Options -Indexes

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?route=$1

or you can pass the variable that receives the route as a parameter to the method execute, see the example below.

Example index.php file:

define("DS", DIRECTORY_SEPARATOR);
define("DOMAIN", "https://localhost/project");

require_once dirname(__DIR__).DS."vendor".DS."autoload.php";

use BaseCode\Route\Route;

/*
    domain_url [string] [required]
    separator_controller_method [string] [optional] [default] = ":"

    $route = new Route(domain_url, separator_controller_method);

    # EXAMPLE
    $route = new Route(DOMAIN, ":");

*/

$route = new Route(DOMAIN);

/*
    route [string] [required]
    route_action [string|function] [required]
    route_name [string] [optional]

    $route->get(route, route_action, route_name);
    $route->post(route, route_action, route_name);
    $route->put(route, route_action, route_name);
    $route->delete(route, route_action, route_name);
    
    action [string|function]
    $route->standard(action);


    # EXAMPLE
    $route->get("admin/login", function() {
        echo "<h1>ADMIN LOGIN</h1>";
    }, "admin.login");

*/

$route->get("/", function() {
    echo "<h1>HOME PAGE</h1>";
}, "home");

$route->namespace("Controllers\\Admin")->group("admin");

$route->get("/", "Controller:login", "admin.login");

// get route to namespace: Controllers\Admin\Controller - method: login

$route->execute();
/*
    or
    $route->execute("route"); // route is the name received by $_GET
*/

Creating standard route

The standard route is used when the route requested via the url is not found.

Example standard route:

$route = new Route(DOMAIN);

$route->get("/", function() {
    echo "<h1>HOME PAGE</h1>";
}, "home");

$route->standard(function($error) {
    http_response_code($error["code"]);
    echo "<h1>ERROR: ".$error["message"]."</h1>";
});

$route->execute();

Using the route method

The route method returns the route with the specified name or null if it is not found.

Example route method:

$route = new Route(DOMAIN);

$route->get("/", function() use ($route) {

    $link = $route->route("landing.page");
    echo "<h1>HOME PAGE</h1><br><a href=\"{$link}\">Landing</a>";

}, "home");

$route->get("landing", function() use ($route) {

        $link = $route->route("home");
        echo "<h1>LANDING PAGE</h1><br><a href=\"{$link}\">Back Home</a>";

}, "landing.page");

$route->execute();

Passing parameters to the route

It is possible to define parameters for the routes, thus allowing to receive dynamic values.

Example parameters for route:

$route = new Route(DOMAIN);

$route->get("hello/{name}", function($data) {

    $name = $data["name"];
    echo "<h1>HELLO {$name}</h1>";

}, "hello.page");

$route->execute();

Get url of current route

It is possible to get the url of the current route using the (current) method

Example of current route:

$route = new Route(DOMAIN);

$route->get("product/{id}", function() use ($route) {

    $current = $route->current();
    echo "<p>ROUTE: {$current}</p>";

}, "product.page");

$route->execute();

Route redirection

It is possible to redirect routes using the (redirect) method.

Example of redirect :

$route = new Route(DOMAIN);

// REDIRECT OPTIONS

/* USING NAME

    ROUTES EXAMPLES (
        $route->get("/home", route_action, "page.home");
        $route->get("/product/{id}", route_action, "page.product");
    )

    $route->redirect("page.home"); // redirect to domain/home
    $route->redirect("page.product", ["id" => 10]); // redirect to domain/product/10
*/

/* USING URL
    $route->redirect("https://www.google.com"); // redirect to passed URL
*/

$route->group("admin");

$route->get("/login", function() {

    echo "<h1>ADMIN LOGIN</h1>";

}, "admin.login");

$route->get("/home", function() use ($route) {

    if (!isset($_SESSION["ADMIN_USER"])) {
        $route->redirect("admin.login");
    }

    echo "<h1>ADMIN HOME</h1>";

}, "admin.home");

$route->execute();

To be continued...