aeberdinelli / express-php
A clone of the ExpressJS Framework for PHP
Requires
- mustache/mustache: ^2.12
- oyejorge/less.php: ~1.7.0.9
This package is not auto-updated.
Last update: 2021-08-20 12:18:51 UTC
README
This framework tries to clone the NodeJS ExpressJS framework writing style. It does not have an event loop, it just mimics the method and helpers names that ExpressJS offers.
Install
Note: To run ExpressPHP you need PHP >= 7.0 and Apache.
The preferred installation is using Composer:
composer require aeberdinelli/express-php v1.1.0
Then, move the .htaccess to the root of your site and you're done:
mv vendor/aeberdinelli/express-php/.htaccess ./.htaccess
Usage
If you installed using composer, you can just do:
<?php include __DIR__.'/vendor/autoload.php'; use Express\Express; use Express\Router; $express = new Express(); $router = new Router(); $router->get('/', function($req, $res) { $res->send('hello world!'); }); $express->listen($router); ?>
Routes
Routes are handled using a Router instance, for example:
$router = new Router(); $router->get('/', function($req, $res) { // This will be called when someone goes to the main page using GET method. });
You can handle post requests as well using post() instead of get(). Same for put() and delete().
Route with dynamic parameters
You can route dynamic URL using parameters, for example:
$router = new Router(); $router->get('/:something/:else', function($req, $res) { /** * Now let's imagine someone enters to URL: /hello/bye, then: * * $req->params->something will contain 'hello' * $req->params->else will contain 'bye' */ });
Responses
If you're developing an API for example, you can send json simply doing:
$router->post('/', function($req, $res) { $res->json(array( 'error' => false, 'message' => 'Hello' )); });
You can also send a custom http response code using:
$router->post('/', function($req, $res) { $res->status(201)->json({ 'error' => false, 'message' => 'Created!' }); });
TIP: There are a few more examples in the index.php
file in this repository.
Static files
If you wish to serve static files (likes images, html only) you can use:
// If you visit /static/image.png, this will return the file views/public/image.png $router->use('/static', $express->static('views/public'));
Template engines
You have avaible Pug (ex Jade) and Mustache. Here's an example:
// Configure the engine to Pug $express->set('view engine','pug'); // Jade was renamed to Pug, but we recognize it ;) $express->set('view engine','jade'); // Or Mustache $express->set('view engine','mustache'); // Set the path to the template files $express->set('views','./views/pug'); // Now you can do something like this $router->get('/', function($req, $res) { $res->render('index.jade'); }); // Or this $router->get('/users/:username', function($req, $res) { $res->render('index.jade', array( 'name' => $req->params->username )); // Now in jade, you can use #{name} to get that variable! });
CSS Precompilers
You can use Less instead of CSS if you want. An example:
use \Express\ExpressLess; /** * Let's say you have a /less folder on your project * And you want every request that goes into /css to load the less file within that folder instead * * In this example /css/global.css will load the compiled version of /less/global.less * Same for /css/something.css -> /less/something.less */ $less = new ExpressLess($express, array( 'source' => __DIR__.'/less', 'dest' => '/css' )); // Yes, it's that simple.
Request info
- You have the body of the request in $res->body no matter if you re handling POST or PUT.
- You have the query string under $req->query
- You have the cookies in $req->cookies
- You have all the request headers in $req->headers