2017 © Pedro Peláez
 

project phreak

Phreak! the ultimate development tool for lamez :)

image

webdevlabs/phreak

Phreak! the ultimate development tool for lamez :)

  • Saturday, March 24, 2018
  • by webdevlabs
  • Repository
  • 2 Watchers
  • 2 Stars
  • 29 Installations
  • PHP
  • 0 Dependents
  • 0 Suggesters
  • 1 Forks
  • 2 Open issues
  • 7 Versions
  • 0 % Grown

The README.md

Phreak!

Build Status Codacy Badge SymfonyInsight StyleCI, (*1)

ultra-light fast php framework powered by:

Installation

composer create-project webdevlabs/phreak, (*2)

Serve app localy with the built-in PHP web server

php -S localhost:8000 -t public, (*3)

Autoloader

Very simple and understandable using the Namespace as file path. All directory names are converted to lowercase, file cases are kept as written. Example:, (*4)

<?php
use App\Controllers\Front;

will autoload the file \app\controllers\Front.php, (*5)

Simple Routing

Calls the App\Controllers\User::displayUser($id) method with {id} parameter as an argument, (*6)

$router->get('/users/{id}', ['App\Controllers\User','displayUser']);

Controller Routing

Calls the App\Controllers\Front.php with the proper request method., (*7)

$router->controller('/', 'App\Controllers\Front');    
  • GET request on http://host/login will call the App\Controllers\Front::getLogin() method.
  • POST request on http://host/login will call the App\Controllers\Front::postLogin() method.
  • GET request on http://host/article/some-article-uri will call the App\Controllers\Front::getArticle($uri) method with $uri parameter as an argument.

Advanced Routing

Filters

Calls class App\Models\Auth with method checkLogin() and break on return false., (*8)

$router->filter('auth', ['App\Models\Auth','checkLogin']);

Group all requests under http://host/profile/ through filter, (*9)

$router->group([
        'prefix'=>'profile', 
        'before'=>'auth'
    ], 
    function ($router) {
        $router->controller('/', 'App\Controllers\Account\Profile');    
    });

More advanced routings can be found at Phroute's page., (*10)

Validation

    public function postComment () 
    {
        $input  = filter_input_array(INPUT_POST, FILTER_SANITIZE_STRING);
        $val = new \System\Validation($input);
        $val->addRule('name', 'Empty name field', ['required']);
        $val->addRule('comment', 'Empty comment field', ['required','minLength=5']);
        $val->addRule('comment', 'Comment too big', ['maxLength=500']);
        if ($val->validate()) {
            echo 'Comment post ok';
        } else {
            $this->template->assign('errors',$val->getErrors());
            $this->template->display("errors.tpl");
        }        
    }

Simple controller

<?php

namespace App\Controllers;

use System\Template;
use System\Language;

class Front
{
    private $template;
    private $language;

    public function __construct (Template $template, Language $language) 
    {
        $this->template = $template;
        $this->language = $language;
    }

   public function getIndex()
    {
        $this->template->assign('title', 'Phreak!');
        $this->template->assign('languages', $this->language->available_languages);  
        $this->template->display('layout.tpl');
    }    
}

More advanced examples can be found in the 'modules' directory., (*11)

Events

use System\Event;
class ... {
    public function __construct (Event $event) 
    {
        $this->event = $event;
        $this->event->bind('someEventName', function () { echo "stay foolish"; });
    }
    public function getSome () {
        $this->event->trigger('someEventName');
    }
}

Database

You now have different options for managing your database. There are 2 existing database drivers. Sample database wrapper class DB:: and the well known database mapper Eloquent., (*12)

You control what database driver to load directly from config/database.php, (*13)

Example PDO driver fetch queries:, (*14)

 * Result: single column
 * $count = DB::column('SELECT COUNT(*) FROM `user`);

 * Result: an array(key => value) results (i.e. for making a selectbox)
 * $pairs = DB::pairs('SELECT `id`, `username` FROM `user`);

 * Result: a single row result
 * $user = DB::row('SELECT * FROM `user` WHERE `id` = ?', array($user_id));

 * Result: a single row result
 * $user = DB::row('SELECT * FROM `user` WHERE `id` = :varname', array(":varname"=>"some variable"));

 * Result: an array of results
 * $banned_users = DB::fetch('SELECT * FROM `user` WHERE `banned` = ?', array(TRUE));

 * Result: any query
 * $dosql = DB::query('UPDATE `settigs` WHERE `setid`=?', ['somesetid']);

 * Result: insert user
 * DB::insert('users', ['username'=>'test','password'=>'testpass']);

 * Result: update user password where user_id = 1
 * DB::update('users', ['password'=>'testpass'], '1', 'user_id');
 ```

 The new available method for managing your database is Eloquent (from the Laravel framework).

 The *Eloquent ORM* provides a beautiful, simple ActiveRecord implementation for working with your database. Each database table has a corresponding "Model" which is used to interact with that table. Models allow you to query for data in your tables, as well as insert new records into the table.

*Examples of phreak eloquent usage can be found at the '**modules/eloq**' made for demonstration.*

Full documentation can be found at [Eloquent's](https://laravel.com/docs/5.7/eloquent) page.


### Console Commands
You can also execute phreak controllers from your console/crontab by calling the console.php file where the parameters are the filename of the controller.

**Calls the App\Commands\SomeController.php with the proper request method.**

php console.php SomeController ``` All console controllers are located in the "app/commands" folder. The folder location is defined in the 'app/ConsoleController.php' and can be changed., (*15)

The Versions