- Notifications
You must be signed in to change notification settings - Fork2
frozeeen/PHP-file-based-routing
Folders and files
| Name | Name | Last commit message | Last commit date | |
|---|---|---|---|---|
Repository files navigation
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.
Well, here you go
https://yourawesome.web/post?id=ABCDEFG12345tohttps://yourawesome.web/post/ABCDEFG12345
- Simply clone this project into your machine.
- Update the config inside the
config/app.php. - and presto! all set.
The structure is very simple
config# A folder contains some of the configurationspages# This is where your pages will livepublic# Maybe robots.txt, sitemap, some of your CSS, JS and other assetsrouter# And, this is where some tiny-little-bit magic polynomial time happens, it's the routertemplates# Collections of shared components, requiring .php just like old timesindex.php# entry or fallback php file.htaccess# We don't talk about .htaccess -Dani
To use this, let's head intopages folder and make some files.
Path: pages/your-awesome-page.phpURL: http://website.com/your-awesome-page
To create a dynamic url likehttps://website.com/post?id=YOURPOSTID we're going to do it like this.
# Create a filePath: pages/post/[id].get.php# To accessURL: https://website.com/post/YOURPOSTID
and to access theid inside our code, it's just like normal$_GET, the name between the brackets[] is the parameter or key (they call thisslug).
Showing postID:<?phpecho$_GET['id'];?>
We can also create a folder to become our slug.
Path:pages/post/[id]/edit.get.phpURL: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.phpThe following endpoints correspond to the files in the structure above:
GET /post/123DELETE /post/123GET /post/123/edit
This is heavily inspired by theNitro 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.phpYet 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.phpIn 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 thethrow404() inside yourmiddleware.php to send a 404 error, this will return the404.php inside thepages folder.
The+middleware.global.php file is executedbefore 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
Uh oh!
There was an error while loading.Please reload this page.
Stars
Watchers
Forks
Releases
Packages0
Contributors2
Uh oh!
There was an error while loading.Please reload this page.