1. Go to this page and download the library: Download eftec/routeone library. Choose the download type require.
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
namespace cocacola\controller\;
class CustomerController {
public function updateAction($id=null,$idparent=null,$event=null) {
echo "We want to update the customer $id";
}
}
use \eftec\routeone\RouteOne;
$route=new RouteOne('.',null,null); // Create the RouteOneClass
$route->fetch(); // fetch all the input values (from the route, get, post and such).
$route->callObject('somenamespace\\controller\\%sController'); // where it will call the class CustomerController*
use eftec\routeone\RouteOne;
$route=new RouteOne('.',null,null); // Create the RouteOneClass
$route->fetch(); // fetch all the input values (from the route, get, post and such).
$route->callObjectEx('somenamespace\\controller\\{controller}Controller'); // where it will call the class CustomerController*
class Customer {
public function insertAction($id="",$idparent="",$event="") {
// here we do our operation.
}
}
$route=new RouteOne('.',null,true); // true indicates it is modular.
$route=new RouteOne('.',null,['Internal']); // or we determine the module automatically. In this case, every url that starts with Internal
const BASEURL="http://localhost"; // Base url edit this value.
const BASEWEBNS="eftec\\controller"; // Base namespace (web) edit this value
const BASEAPINS="eftec\\api"; // Base namespace (api) edit this value
// router.php
$route=new RouteOne(); // Create the RouteOneClass
$route->fetch(); // fetch all the input values (from the route, get, post and such).
$route->callObject('somenamespace\\controller\\%sController'); // where it will call the class \somenamespace\controller\CustomerController
$this->addPath('api/{controller}/{action}/{id:0}','apipath');
$this->addPath('/api/{controller}/{action}/{id:0}/','apipath'); // "/" at the beginner and end are trimmed.
$this->addPath('{controller}/{action}/{id:0}','webpath');
$this->addPath('{controller:root}/{action}/{id:0}','webpath'); // root path using default
$this->addPath('somepath','namepath',
function(callable $next,$id=null,$idparent=null,$event=null) {
echo "middleware\n";
$result=$next($id,$idparent,$event); // calling the controller
echo "endmiddleware\n";
return $result;
});
$route=new RouteOne('http://www.example.dom');
$route->addPath('{controller}/{id}/{idparent}','optionalname');
// if the url is : http://www.example.dom/customer/1/200 then it will return
echo $route->fetchPath(); // optionalname
echo $route->controller; // customer
echo $route->id; // 1
echo $route->idparent; // 200
// http://localhost/..../?id=hi
$id=$router->getQuery("id"); // hi
$nf=$router->getQuery("something","not found"); // not found
$route->setQuery("id","hi");
$id=$router->getQuery("id"); // hi
// controller example http://somedomain/Customer/Insert/23
$this->callObjectEx('cocacola\controller\{controller}Controller');
// it calls the method cocacola\controller\Customer::InsertAction(23,'','');
// front example: http://somedomain/product/coffee/nescafe/1
$this->callObjectEx('cocacola\controller\{category}Controller' // the class to call
,false // if error then it throw an error
,'{subcategory}' // the method to call (get, post or any other method)
,null // the method to call (method get)
,null // the method to call (method post)
,['subsubcategory','id'] // the arguments to call the method
,['arg1','arg2']); // arguments that will be passed to the constructor of the instance
// it calls the method cocacola\controller\product::coffee('nescafe','1');
$databaseService=new SomeDatabaseService();
$route=new RouteOne();
$route->callObjectEx('cocacola\controller\{controller}Controller' // the class to call
,false // if error then it throw an error
,'{action}Action' // the method to call (get, post or any other method)
,'{action}Action{verb}' // the method to call (method get)
,'{action}Action{verb}' // the method to call (method post)
,['id', 'idparent', 'event'] // the arguments to call the method
,[$databaseService,$route]); // (optional)arguments that will be passed to the constructor of the instance
namespace cocacola\controller;
class CustomerController {
protected $databaseService;
protected $route;
public function __construct($databaseService,$route) {
// optional: injecting services
$this->databaseService=$databaseService;
$this->route=$route;
}
// any action GET or POST
public function GreenAction($id="",$idparent="",$event="") {
}
// GET only action (optional)
public function BlueActionGET($id="",$idparent="",$event="") {
// **my code goes here.**
}
// POST only action (optional)
public function YellowActionPOST($id="",$idparent="",$event="") {
// **my code goes here.**
}
// GET only action (optional)
public function RedActionGET($id="",$idparent="",$event="") {
// **my code goes here.**
}
// any action GET or POST
public function RedAction($id="",$idparent="",$event="") {
// **my code goes here.**
}
}
$token=$this->getHeader('token','TOKEN NOT FOUND');
$route->alwaysWWW(); // if the domain is somedomain.dom/url, then it redirects to www.somedomain.dom/url
$route->alwaysWWW(true); // if the domain is http: somedomain.dom/url, then it redirects to https: www.somedomain.dom/url
$route->alwaysNakedDomain(); // if the domain is www.somedomain.dom/url, then it redirects to somedomain.dom/url
$route->alwaysNakedDomain(true); // if the domain is http: www.somedomain.dom/url, then it redirects to https: somedomain.dom/url
$this->addPath('portal/web/{controller}/{action:list}');
$this->fetchPath();
var_dump($this-action); // it shows the current action or the default value "list" if none.
// Example, value not in the whitelist: someweb.dom/customer/list
$this->setWhiteList('controller',['Product','Client']);
$this->fetch();
var_dump($this->controller); // null or the default value
var_dump($this->notAllowed); // true (whitelist error)
// Example, value in the whitelist but with the wrong case: someweb.dom/customer/list
$this->setWhiteList('controller',['Customer']);
$this->fetch();
var_dump($this->controller); // it shows "Customer" instead of "customer"
var_dump($this->notAllowed); // false (not error with the validation of the whitelist)
// reset whitelist for controllers
$this->setWhiteList('controller',null);
<IfModule mod_rewrite.c>
<IfModule mod_negotiation.c>
Options -MultiViews -Indexes
</IfModule>
RewriteEngine On
DirectoryIndex route.php
# Handle Authorization Header
RewriteCond %{HTTP:Authorization} .
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
# Redirect Trailing Slashes If Not A Folder...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} (.+)/$
RewriteRule ^ %1 [L,R=301]
# Send Requests To Front Controller...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ route.php?req=$1 [L,QSA]
</IfModule>
Loading please wait ...
Before you can download the PHP files, the dependencies should be resolved. This can take some minutes. Please be patient.