Download the PHP package eftec/routeone without Composer

On this page you can find all versions of the php package eftec/routeone. It is possible to download/install these versions without Composer. Possible dependencies are resolved automatically.

FAQ

After the download, you have to make one include require_once('vendor/autoload.php');. After that you have to import the classes with use statements.

Example:
If you use only one package a project is not needed. But if you use more then one package, without a project it is not possible to import the classes with use statements.

In general, it is recommended to use always a project to download your libraries. In an application normally there is more than one library needed.
Some PHP packages are not free to download and because of that hosted in private repositories. In this case some credentials are needed to access such packages. Please use the auth.json textarea to insert credentials, if a package is coming from a private repository. You can look here for more information.

  • Some hosting areas are not accessible by a terminal or SSH. Then it is not possible to use Composer.
  • To use Composer is sometimes complicated. Especially for beginners.
  • Composer needs much resources. Sometimes they are not available on a simple webspace.
  • If you are using private repositories you don't need to share your credentials. You can set up everything on our site and then you provide a simple download link to your team member.
  • Simplify your Composer build process. Use our own command line tool to download the vendor folder as binary. This makes your build process faster and you don't need to expose your credentials for private repositories.
Please rate this library. Is it a good library?

Informations about the package routeone

RouteOne

It reads the URL route and parses the values of path, so it could be interpreted manually or automatically in the fastest way possible (for example, to implement an MVC system).

Packagist Total Downloads [Maintenance]() [composer]() [php]() [php]() [coverage]() [compatible]()

Unlikely other libraries, this library does not have dependencies, and it is contained in a single class, so it is compatible with any PHP project, for example WordPress, Laravel, Drupal, a custom PHP project, etc.

This library is based in CoC Convention over Configuration. It reduces the boilerplate but it has fixed functionalities. This library does not allow to use custom "routes" but it covers practically all cases, so it increases the performance and usability while it sacrifices flexibility.

Table of contents

Example:

Let's say we have the next URL http://somedomain.dom/Customer/Update/2 This library converts this URL into variables that could be process or directly calling a method.

route.php

controller\CustomerController.php class

What it does?

Let's say we do the next operation:

A user calls the next website http://somedomain.com/Customer/Insert, he wants to show a form to insert a customer

or

This code calls to the method InsertActionGet (GET), InsertActionPost (POST) or InsertAction (GET/POST) inside the class Customer

The method called is written as follows:

What is $id, $idparent and $event?

id

Let's se we want to Update a Customer number 20, then we could call the next page

http://somedomain.com/Customer/Update/20

where 20 is the "$id" of the customer to edit (it could be a number of a string)

idparent

And what if we want to Update a Customer number 20 of the business APPL

http://somedomain.com/Customer/Update/20/APPL

Where APPL is the idparent

event

Now, let's say we click on some button, or we do some action. It could be captured by the field _event, and it is read by the argument $event. This variable could be sent via GET or POST.

http://somedomain.com/Customer/Update/20/APPL?_event=click

Module

Note: Modules are obtained automatically if you use addPath() and fetchPath(), so you don't need to specify it. Now, let's say our system is modular, and we have several customers (internal customers, external, etc.)

or

then

http://somedomain.com/Internal/Customer/Update/20/APPL?_event=click

Then, the first ramification is the name of the module (Internal) and it calls the class somenamespace\Internal\controller\CustomerController

Getting started

Using the cli (recommended)

composer require eftec/routeone

Linux:

Windows:

It will create the file .htaccess and the file route.php and route.php will have a default configuration.

Later, you can add or edit the code in this file.

manual installation

1) Create a .htaccess file in the folder root (Apache)

If your web host doesn't allow the FollowSymlinks option, try replacing it with Options +SymLinksIfOwnerMatch.

The important line is:
RewriteRule ^(.*)$ route.php?req=$1 [L,QSA] # The router to call.

Or configure nginx.conf (Nginx) Linux (not tested)

The important line is:
try_files $uri $uri/ /router.php?req=$document_uri&$query_string;

Or configure nginx.conf (Nginx) Windows

The important line is:
try_files $uri $uri/ /router.php?req=$document_uri&$query_string;

where router.php is the file that it will work as router. ?req=$1 is important because the system will read the route from "req"

Note:

If you want to use an argument different as "req", then you can change it using the next code:

$route->argumentName='newargument';

Using Paths

Since 1.21, it is possible to use a custom path instead of a pre-defined path. It is the recommended way. The other method is still present.

clearPath()

Syntax:

clearPath()

It clears all the paths defined

addPath()

Syntax:

addPath($path, $name = null,callable $middleWare=null)

It adds a paths that could be evaluated using fetchPath()
Example:

Note:
The first part of the path, before the "{" is used to determine which path will be used.
Example "path/{controller}" and "path/{controller}/{id}", the system will consider that are the same path

Example:

You can define different paths, however it only uses the first part of the path that matches some URL. 'path/somepath/{id}' will work 'path/{id}/other' will not work

fetchPath()

Syntax:

fetchPath()

It fetches the path previously defined by addPath, and it returns the name(or number) of the path. If not found, then it returns false

Example:

Methods

__construct($base='', $forcedType=null, $isModule=false)

getQuery($key,$valueIfNotFound=null)

It gets a query value (URL).

Note: This query does not include the values "req","_event" and "_extra"

Example:

setQuery($key,$value)

It sets a query value

Example:

fetch

Sintax:

fetchPath()

Fetch the values from the route, and the values are processed.

callObjectEx

Sintax

callObjectEx($classStructure, $throwOnError, $method, $methodGet, $methodPost,$arguments,$injectArguments)

It creates a new instance of an object (for example, a Controller object) and calls the method.
Note: It is an advanced version of this::callObject()
This method uses {} to replace values based in the next variables:

Tag Description
{controller} The name of the controller
{action} The current action
{event} The current event
{type} The current type of path (ws,controller,front,api)
{module} The current module (if module is active)
{id} The current id
{idparent} The current idparent
{category} The current category
{subcategory} The current subcategory
{subsubcategory} The current subsubcategory

Example:

Call a method inside an object using the current route.

Example:

Router:

Controller:

Results:

url method called
http://localhost/Customer/Green (GET) GreenAction
http://localhost/Customer/Green/20/30?_event=click (GET) GreenAction($id=20, $idparent=30, $event='click')
http://localhost/Customer/Green (POST) GreenAction
http://localhost/Customer/Blue (GET) BlueActionGET
http://localhost/Customer/Blue (POST) ERROR
http://localhost/Customer/Yellow (GET) ERROR
http://localhost/Customer/Yellow (POST) YellowActionPOST
http://localhost/Customer/Red (GET) RedActionGET (It has priority over RedAction)
http://localhost/Customer/Red (POST) RedAction
http://localhost/Customer/Orange ERROR

callFile($fileStructure='%s.php',$throwOnError=true)

It calls (include) a php file using the current name of the controller

getHeader()

Syntax:

getHeader($key, $valueIfNotFound = null)

It gets the current header (if any). If the value is not found, then it returns $valueIfNotFound. Note, the $key is always converted to uppercase.

Example:

getBody()

Syntax:

getBody($jsonDeserialize = false, $asAssociative = true)

It gets the body of a request.

Example:

getCurrentUrl($withoutFilename = true)

Returns the current base url without traling space, paremters or queries

Note: this function relies on $_SERVER['SERVER_NAME'], and it could be modified by the end-user

getCurrentServer()

It returns the current server without trailing slash.

setCurrentServer($serverName)

It sets the current server name. It is used by getCurrentUrl() and getCurrentServer().
Note: If $this->setCurrentServer() is not set, then it uses $_SERVER['SERVER_NAME'], and it could be modified by the user.

getUrl($extraQuery = '',$includeQuery=false)

It gets the (full) url based in the information in the class.

url($module,$controller,$action,$id,$idparent)

It builds an url based in custom values

urlFront($module,$category,$subcategory,$subsubcategory,$id)

It builds an url (front) based in custom values

alwaysWWW($https = false)

If the subdomain is empty or different to www, then it redirect to www.domain.com.
Note: It doesn't work with localhost, domain without TLD (netbios) or ip domains. It is on purpose.
Note: If this code needs to redirect, then it stops the execution of the code. Usually it must be called at the top of the code

alwaysHTTPS()

If the page is loaded as http, then it redirects to https.
Note: It doesn't work with localhost, domain without TLD (netbios) or ip domains. It is on purpose.
Note: If this code needs to redirect, then it stops the execution of the code. Usually it must be called at the top of the code

alwaysNakedDomain($https = false)

If the subdomain is www (example www.domain.dom) then it redirect to a naked domain domain.dom

Note: It doesn't work with localhost, domain without TLD (netbios) or ip domains. It is on purpose.

Note: If this code needs to redirect, then it stops the execution of the code. Usually, it must be called at the top of the code

fields

Field path Description Example
$argumentName The name of the argument used by Apache .Htaccess and nginx $this-argumentName='req';
$base It is the base url. $this->base=0;
$type It is the type of url (api,ws,controller or front) echo $this->type; // api
$module {module} It's the current module echo $this->module;
$controller {controller} It's the controller. echo $this->controller;
$action {action} It's the action. echo $this->action;
$id {id} It's the identifier echo $this->id;
$event {event} It's the event (such as "click on button). echo$this->event;
$idparent {idparent} It is the current parent id (if any) echo $this->idparent;
$extra {extra} It's the event (such as "click on button) echo $this->extra;
$category {category} The current category. It is useful for the type 'front' echo $this->category;
$subcategory {subcategory} The current sub-category. It is useful for the type 'front' echo $this->subcategory;
$subsubcategory {subsubcategory} The current sub-sub-category. It is useful for the type 'front' echo $this->subsubcategory;
$identify It is an associative array that helps to identify the api and ws route. $this->identify=['api'=>'apiurl','ws'=>'webservices','controller'=>''];
$isPostBack its true if the page is POST, otherwise false. if ($this->isPostBack) { ... };
$verb {verb} The current verb, it could be GET,POST,PUT and DELETE. if ($this->verb) { ... };

Example:

Whitelist

Field Description Example
$allowedVerbs A list with allowed verbs $this->allowedVerbs=['GET', 'POST', 'PUT', 'DELETE'];
$allowedFields A list with allowed fields used by callObjectEx() $this->allowedFields=['controller', 'action', 'verb', 'event', 'type', 'module', 'id'
, 'idparent','category', 'subcategory', 'subsubcategory'];
setWhitelist() It sets an associative array with the whitelist to controller, action, category, subcategory, subsubcategory and module.
If not set (null default value), then it allows any entry.
Currently it only work with controller and category
$this->setWhitelist('controller','Purchase','Invoice','Customer');
$this->setWhitelist('controller',null) // allows any controller;

Whitelist input.

Whitelisting a method allows two operations:

For example:

CLI

Routeone contains a basic CLI to create and initialize the configuration. The binary routeonecli is located in the vendor/bin folder

Pending means that the operation is pending to do, or it requires something to configure.

Once done, configure will be marked as "ok"

Now, lets configure the paths

Changelog


All versions of routeone with dependencies

PHP Build Version
Package Version
Requires php Version >=7.4
ext-json Version *
eftec/clione Version ^1.32
Composer command for our command line client (download client) This client runs in each environment. You don't need a specific PHP version etc. The first 20 API calls are free. Standard composer command

The package eftec/routeone contains the following files

Loading the files please wait ....