Skip to content
a minimal event-driven, flexible, portable and micro PHP web application framework
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Type Name Latest commit message Commit time
Failed to load latest commit information.

Horus 15

Horus 15 is a new light and simple version of Horus Framework .

Quick Overview


	// load Horus
	require "Horus.php";

	(new \Horus\App)->on("/", function(){
		// the first param is an array of key => value
		// for the header field => value
		// the value may be an array "will be appended"
		// the second param "optional" to set the response status code .
			"x-powered-by" => "Horus"
		], 200);
		echo "Hello World";

API Summary


	require "Horus.php";

	// Initialize Horus with optional configurations
	$app = new \Horus\App([
		// Force all urls/cookies to be secured "https"
		// Note, Horus will try to detect whether the request is done over 
		// https or not, but this will force it to be yes or no 
		// "just if you need"
		"secure" => true,

		// Force horus to generate routes with "/index.php/" in urls
		// this settings is only if your server doesn't support
		// url rewriting
		"index" => "/index.php/"

	// See the following examples for the usage of the router
	// handle a request that needs the see "Hello GET" to be displayed
	// under only GET method
	$app->on("GET /test", function(){
		echo "Hello GET";
	// Display Hello JSON just for a POST request
	$app->on("POST /json", function(){
		$this->header(["content-type" => "application/json"]);
		echo json_encode([
			"message" => "Hello JSON"

	// named params ?
	$app->on("/post/([a-z]+)/([0-9]+)", function($word, $num){
		echo $word . " : " . $num;

	// execute multiple functions/layers ?
	// each function will be executed after the previous one is ended
	// if a function returned false, the chain will be break,
	// the result of each function will be the last param of the next function in the chain .
	$app->on("/page/([^/]+)", [
			echo "layer 1 <br />";
			return "test"; // or return false to cancel the execution of the next function
		function($page, $result){
			echo $result;
	// access the configs
	// you can also create/access anything inside horus
	// because it extends stdClass and adds __call() to it

	// callback
	$app->func = function(){
		// your can access horus using
		// $this from here too !
		echo "ok";

	// call it

	// check whether the request is under https or not
	// it will consider the request secure if you forced it 
	// from the configurations

	// i need to get full url for "/assets/css/style.css"

	// it will return a url with scheme "http or https" and hostname
	// if you want to change the host ?
	// also if you want to change the scheme from http to https "secure"
	// the last param is for secure or not "https or not"
	// the last param will be automatically set for you using
	// $app->secure()
	$app->url("/assets/css/style.css", "my.domain", false);

	// but if you want to get a url to an internal route ?
	// just change the ->url to ->route
	// also you can change the resulting host and scheme "secure or not"
	$app->route("/post/", "my.domain", false);

	// view some html template(s)
	$app->view(["tpl.php"], ["var" => "val"]);
	$result = $app->view(["tpl.php"], ["var" => "val"], true);

	// get Horus instance ?

	// how about autoloads ?
	// now play with your libraries !
	// or multiples sources:
	$app->autoload(["./vendor", "./components"]);

	// you can create your own object container using horus new stdClass
	// or extending it, by default \Horus\App extends it .
	$app->obj = new \App\stdClass; // or new \App\stdClass(['k' => 'v']); to import some data
	$app->obj->test = function(){
		// ...
You can’t perform that action at this time.