Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

frozeeen/PHP-file-based-routing

Folders and files

NameName
Last commit message
Last commit date

Latest commit

History

18 Commits

Repository files navigation

PHP File-based routing

This is my unstable version of file-based routing, inspired by Javascript Libraries/Frameworks, to make my project's URL tiny-little-bit-beautiful even my backend is an instant legacy code.

Sooo @frozeeen, again what's this?

Well, here you go

https://yourawesome.web/post?id=ABCDEFG12345
to
https://yourawesome.web/post/ABCDEFG12345

Installation

  1. Simply clone this project into your machine.
  2. Update the config inside the config/app.php.
  3. and presto! all set.

Structure

The structure is very simple

config # A folder contains some of the configurations
pages # This is where your pages will live
public # Maybe robots.txt, sitemap, some of your CSS, JS and other assets
router # And, this is where some tiny-little-bit magic polynomial time happens, it's the router
templates # Collections of shared components, requiring .php just like old times
index.php # entry or fallback php file
.htaccess # We don't talk about .htaccess -Dani

How to use this?

To use this, let's head into pages folder and make some files.

Static routing

Path: pages/your-awesome-page.php
URL: http://website.com/your-awesome-page

Dynamic routing

To create a dynamic url like https://website.com/post?id=YOURPOSTID we're going to do it like this.

# Create a file
Path: pages/post/[id].get.php
# To access
URL: https://website.com/post/YOURPOSTID

and to access the id inside our code, it's just like normal $_GET, the name between the brackets [] is the parameter or key (they call this slug).

Showing post ID: <?php echo $_GET['id']; ?>

Nested Dynamic routing

We can also create a folder to become our slug.

Path: pages/post/[id]/edit.get.php
URL: pages/post/YOURPOSTID/edit

So the file structure will look like this and let's add some additional files.

/pages
├── post
│ └── [id]
│ ├── index.get.php
│ ├── index.delete.php
│ ├── edit.get.php

The following endpoints correspond to the files in the structure above:

GET /post/123
DELETE /post/123
GET /post/123/edit

Request method per file

This is heavily inspired by the Nitro for mapping the request method per file.

Each file is prefixed with the request method and has a .php file extension. For example, if we are creating CRUD functionality, the structure would look like this:

/[id]
├── index.get.php
├── index.post.php
├── index.put.php
├── index.delete.php

Middleware

Yet another very simple middleware.

Middleware is a script that runs before the page script is loaded; it can be used to check authentication or execute high-level intergalactic computations prior to producing the page.

To create a middleware, create a file named +middleware.php.

/pages
├── auth
│ ├── +middleware.php
│ ├── profile.get.php
│ ├── index.get.php

In the file structure above when we try to access /auth/profile or any page inside the /auth folder, it will first run the +middleware.php script.

In addition, if a given user is not authorized to visit a specific endpoint, you can use the throw404() inside your middleware.php to send a 404 error, this will return the 404.php inside the pages folder.

Global Middlewares

The +middleware.global.php file is executed before the actual page file (index.php, etc.). If there are multiple levels of nested directories, all +middleware.global.php files in the hierarchy are applied in order, from the root to the current directory.

/pages
├── +middleware.global.php # Applies to all pages under "pages/"
├── auth
│ ├── +middleware.global.php # Applies to all files under "auth/"
│ ├── index.php # Inherits "auth" middleware
│ ├── nested
│ │ ├── index.php # Inherits "auth" middleware
│ │ └── deep
│ │ ├── index.php # Inherits "auth" middleware
├── index.php # Inherits global middleware from "pages/"

PS: If there are multiple levels of nested directories, all +middleware.global.php files in the hierarchy are applied in order, from the root to the current directory.

About

My simple PHP file-based-routing project template

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 2

AltStyle によって変換されたページ (->オリジナル) /