mezon PHP Application: Create applications from configuration files

Recommend this page to a friend!
  Info   View files Documentation   View files View files (24)   DownloadInstall with Composer Download .zip   Reputation   Support forum   Blog    
Last Updated Ratings Unique User Downloads Download Rankings
2020-05-21 (1 month ago) RSS 2.0 feedNot yet rated by the usersTotal: 32 All time: 9,914 This week: 313Up
Version License PHP version Categories
mezon-application 1.0MIT/X Consortium ...5HTTP, PHP 5, Design Patterns
Description Author

This package can create applications from configuration files.

It provides an application class that loads a PHP configuration scripts with the definition of the routes that the application will handle for different request URL patterns, as well the respective functions that will be called to process the requests.

Applications should create sub-classes of the application to define the callback functions that will process the requests according to the routes defined in the configuration file.

Name: Alexey Dodonov <contact>
Classes: 7 packages by
Country: Russian Federation Russian Federation
Age: ???
All time rank: 3672101 in Russian Federation Russian Federation
Week rank: 24 Up3 in Russian Federation Russian Federation Up
Innovation award
Innovation award
Nominee: 1x

Details

Base application class Build Status codecov

Intro

All your applications will be derived from this class or will be using classes wich are siblings of this Application class.

Functionality

This class provieds:

  • routing
  • transformation actionActionName methods into static routes /action-name/ wich handles GET and POST methods
  • loading routes from config file (php or json)

Loading routes from config file

With time your application will grow and number of routes will increase. So we have provided convinient way to store all routes in a standalone config file. So it is not necessary to initialize all routes in an Application (or any derived class) object's constructor.

Let's find out how you can use it.

First of all create config file ./conf/routes.php in your projects directory. It must look like this:

$callbackProvider = new SomeCallbackClass();

return 
    [
        [
            'route' => '/news/' , // your route
            'callback' => 'displayNewsLine' // this must be the method name of your 
                                              // Application derived class
        ] , 
        [
            'route' => '/news/[i:news_id]/' ,    // your route
            'callback' => 'displayExactNews' , // this must be the method name of your 
            'method' => 'POST'                   // Application derived class
        ] , 
        [
        	'route' => '/some-route/' , 
        	'method' => 'GET' , 
        	'callback' => [ // here we specify callback as pair [object, method]
        		callbackProvider , 
        		'someMethod'
        	]        	
        ]
    ];

Note that the 'method' field is not set then it will be defaulted to GET.

You can also specify your own config file.

Then just call Application::loadRoutesFromConfig()

$app->loadRoutesFromConfig( './conf/my-config.php' );

Common application class

Intro

This class provides simple aplication routine. Using this class you can create veri simple applications with the basic template wich looks like black text on white background.

It can be simply used for prototyping.

Extended routes processing

In Application class routes may return only strings. But CommonApplication class allows you to return arrays of string wich will be placed in the template placeholders.

Simple example:

class           ExampleApplication extends CommonApplication
{
	/
	 * Constructor.
	 */
	function			__construct( $template )
	{
		parent::__construct( $template );
	}

    function            actionSimplePage()
    {
        return [ 
            'title' => 'Route title' , 
            'main' => 'Route main'
        ];
    }
}

Here route's handler generates two parts of the page /simple-page/ - 'title' and 'main'. These two part will be inserted into {title} and {main} placeholders respectively.

More complex example:

class           ExampleApplication extends CommonApplication
{
	/
	 * Constructor.
	 */
	function			__construct($template)
	{
		parent::__construct($template);
	}

    function            actionSimplePage()
    {
        return [ 
            'title' => 'Route title' , 
            'main' => new View('Generated main content')
        ];
    }
}

Here we pass instance of the class View (or any class derived from View) to the application page compilator. It will call View::render method wich must return compiled html content.

Routes config

You can also keep al routes in configs. You can use json configs:

[
	{
		"route": "/route1/",
		"callback": "route1",
		"method": "GET"
	},
	{
		"route": "/route2/",
		"callback": "route2",
		"method": ["GET","POST"]
	}
]

This data must be stored in the './conf/' dir of your project. Or load configs explicitly as shown below (using method loadRoutesFromConfig).

And we also need these methods in the application class.

class           ExampleApplication extends CommonApplication
{
	/
	 * Constructor.
	 */
	function			__construct($template)
	{
		parent::__construct($template);

		// loading config on custom path
		$this->loadRoutesFromConfig('./my-routes.json');
	}

    function            route1()
    {
        return [ 
            // here result
        ];
    }

    function            route2()
    {
        return [ 
            // here result
        ];
    }
}

Note that you can load multiple configs with one call of the method loadRoutesFromConfigs

function			__construct($template)
	{
		parent::__construct($template);

		$this->loadRoutesFromConfigs(['./conf/my/routes.json', './conf/my-routes.php']);
	}

Or the same:

function			__construct($template)
	{
		parent::__construct($template);

		$this->loadRoutesFromDirectory('./conf');
	}
  Files folder image Files  
File Role Description
Files folder imageconf (2 files)
Files folder imageTests (8 files, 1 directory)
Accessible without login Plain text file .travis.yml Data Auxiliary data
Plain text file AjaxApplication.php Class Class source
Plain text file AjaxMethodsTrait.php Class Class source
Plain text file Application.php Class Class source
Plain text file CommonApplication.php Class Class source
Accessible without login Plain text file composer.json Data Auxiliary data
Accessible without login Plain text file composer.lock Data Auxiliary data
Plain text file Controller.php Class Class source
Plain text file ControllerInterface.php Class Class source
Accessible without login Plain text file phpunit.xml Data Auxiliary data
Accessible without login Plain text file README.md Doc. Documentation
Plain text file View.php Class Class source
Plain text file ViewInterface.php Class Class source

  Files folder image Files  /  conf  
File Role Description
  Accessible without login Plain text file routes.json Data Auxiliary data
  Accessible without login Plain text file routes.php Aux. Auxiliary script

  Files folder image Files  /  Tests  
File Role Description
Files folder imageres (1 directory)
  Plain text file ApplicationUnitTest.php Class Class source
  Plain text file CommonApplicationUnitTest.php Class Class source
  Plain text file ControllerUnitTest.php Class Class source
  Accessible without login Plain text file TestInvalidRoutes1.php Aux. Auxiliary script
  Accessible without login Plain text file TestInvalidRoutes2.php Aux. Auxiliary script
  Accessible without login Plain text file TestRoutes.json Data Auxiliary data
  Accessible without login Plain text file TestRoutes.php Aux. Auxiliary script
  Plain text file ViewUnitTest.php Class Class source

  Files folder image Files  /  Tests  /  res  
File Role Description
Files folder imagetemplates (1 file)

  Files folder image Files  /  Tests  /  res  /  templates  
File Role Description
  Accessible without login HTML file index.html Doc. Documentation

 Version Control Unique User Downloads Download Rankings  
 100%
Total:32
This week:0
All time:9,914
This week:313Up

For more information send a message to info at phpclasses dot org.