What are the steps to build a basic PHP router?
Tags: webdev, php, router, beginners
Published: 2024-06-13 09:14:27

In my last project, I have a direct mapping between a file path , address bar and a controller. If I visit contact well, I have contact.php in address bar and sure enough contact.php in controller directory. But I want to change all of that. 
Instead I want a single point of entry where I can be responsible for mapping whatever is in URI to the corresponding controller.

## what is router in PHP?

In PHP, a router is a component that plays a crucial role in handling HTTP requests and routing them to the appropriate controllers or handlers. It acts as a central dispatcher, directing incoming requests to the relevant code that processes the request and generates a response.

## Basic steps to build router

- Firstly you have to make a directory named `controller` and then grab the previous project files about,index and control.php
and then paste these in it. 

- Next you have to create a file `functions.php` that stores information about different functions working stored inside it .
In this a function `dd();` dump and die is used. Dump in PHP is used to get multiple outputs of single variable and  is in human readable form.












```php
<?php

function dd($value)
{
    echo "<pre>";
    var_dump($value);
    echo "</pre>";

    die();
}

function urlIs($value) {
    return $_SERVER['REQUEST_URI'] === $value;
}

```









As the dd(); function is completed then next function is checked according to the value that is given to it. It checks the equality of value and request  URL and then passes to superglobal variable `$_SERVER.
 The next step is to check the route of desired value and move the user to its destination.

## Routes corresponding to the value 
Here is to initialise the routes for the desired URLs in code. As when user taps contact in menu bar move user to contact screen, show output there. Different routes are available here for router to locate and go to desired one.
                                    



         
```php
<?php
$uri = parse_url($_SERVER['REQUEST_URI'])['path'];
$routes = ['/' => 'controllers/index.php',
    '/about' => 'controllers/about.php',
    '/contact' => 'controllers/contact.php',
];
function routeToController($uri, $routes) {
    if (array_key_exists($uri, $routes)) 
{require $routes[$uri];
    } else {
        abort();
    }
}
function abort($code = 404) {
http_response_code($code);
require "views/{$code}.php";
    die();
}
routeToController($uri, $routes);


```

 
- If the user enters a wrong value or hits the tab whose data is not present in main file then it moves the user to file `404.php` which shows 404 error page to user with text link in blue colour "Go to Home Page". 
                                                   






      



```php
<?php require('partials/head.php') ?>
<?php require('partials/nav.php') ?>
<main>
  <div class="mx-auto max-w-7xl py-6 sm:px-6 lg:px-8">
    <h1 class="text-2xl font-bold">Sorry. Page Not Found.</h1>
    <p class="mt-4">
      <a href="/" class="text-blue-500 underline">Go back home.</a>
    </p>
  </div>
</main>
```                  

 While the remaining code of last project will remain same to show an output screen that contains a TabBar with icon, button, logo and profile picture etc. 
Routers typically performs the task of route mapping and generates the url to move user to the corresponding controller page or screen.
I hope that you have understand it.