IceHawk

IceHawk installation

This documentation shows you how to basically install the IceHawk component.


Interactive installer

We provide an interactive installer package, that can be issued using composer's create project command.

Assuming you already have downloaded the composer.phar, simply run:

php composer.phar create-project icehawk/installer /path/to/new-project

The installer will ask you some basic questions about your namings to set up your new project and lets you optionally choose to install further IceHawk components.

Watch our short video and see how it works: Install IceHawk framework in less than 2 minutes

The installation results in a minimal, ready-to-use web application project setup with one read (GET) and one write (POST) route.

You can help us improve the interactive installer.

Please note: For reasons of automation the installer initially installs some thrid-party dependencies. These will be removed at the end of the installation process.


Manual installation

Step 1 - require icehawk/icehawk

If you already have created a composer.json for your project, then just add the dependency by running:

php composer.phar require icehawk/icehawk:^2.0

or adding it manually:

{
    "require": {
        "icehawk/icehawk": "^2.0"
    }
}

— composer.json

and running:

php composer.phar update

Step 2 - Create a request handler

Assuming your project namespace is YourVendor\YourProject.

<?php declare(strict_types = 1);

namespace YourVendor\YourProject;

use IceHawk\IceHawk\Interfaces\HandlesGetRequest;
use IceHawk\IceHawk\Interfaces\ProvidesReadRequestData;

final class SayHelloRequestHandler implements HandlesGetRequest
{
    public function handle( ProvidesReadRequestData $request ) 
    {
        echo "Hello World!";   
    }   
}

— SayHelloRequestHandler.php

Step 3 - Create a basic config

All you need is at least one read or write route.

<?php declare(strict_types = 1);

namespace YourVendor\YourProject;

use IceHawk\IceHawk\Routing\ReadRoute;
use IceHawk\IceHawk\Routing\Patterns\Literal;
use YourVendor\YourProject\SayHelloRequestHandler;

final class IceHawkConfig extends \IceHawk\IceHawk\Defaults\IceHawkConfig
{
    public function getReadRoutes() 
    {
        return [
            new ReadRoute( new Literal('/'), new SayHelloRequestHandler() ),    
        ];
    }
}

— IceHawkConfig.php

Step 4 - Create a bootstrap script

<?php declare(strict_types = 1);

namespace YourVendor\YourProject;

use IceHawk\IceHawk\IceHawk;
use IceHawk\IceHawk\Defaults\IceHawkDelegate;

require('vendor/autoload.php');

$iceHawk = new IceHawk(new IceHawkConfig(), new IceHawkDelegate());
$iceHawk->init();

$iceHawk->handleRequest();

— index.php


Webserver config

IceHawk is designed to have a bootstrap script (index.php) that receives all requests. So you should configure your webserver to pass all requests to that script. Here is how this is usually done:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule .* /index.php [L,QSA]

— Apache (.htaccess)

location / {
    try_files $uri $uri/ /index.php?$args;
}

— nginx

Now you can visit http://your.domain/ and should see Hello World!.

That's it.