<?php 
 
/** 
 * Request.php 
 * @author SzpaQ <[email protected]> 
 * @license I DON'T CARE - do whatever you want 
 * */ 
 
namespace App; 
 
class Request 
{ 
    /** 
     * return $_GET or $_POST value 
     * values give in _POST request has higher priority 
     * @param string key 
     * @param string type 
     * Types: 
     * - INT 
     * - STRING 
     * - ARRAY 
     * @return mixed value or false if key doesnt exists 
     * */ 
    public function get(string $key, string $type = null) 
    { 
        $value = isset($_POST[$key]) ? $_POST[$key] : (isset($_GET[$key]) ? $_GET[$key] : false); 
        if ($value === false) { 
            return false; 
        } 
        if ($type === null) { 
            return $value; 
        } 
        switch (strtolower($type)) { 
            case 'string': 
                return (string) $value; 
            break; 
            case 'int': 
                return is_numeric($value) ? (int) $value : false; 
            break; 
            case 'array': 
                if (is_object($value) || is_array($value)) { 
                    return (array) $value; 
                } 
                $value = json_decode($value); 
                if (json_last_error() == JSON_ERROR_NONE) { 
                    return (array) $value; 
                } else { 
                    return array(); 
                } 
            break; 
            case 'object': 
                if (is_object($value) || is_array($value)) { 
                    return (object) $value; 
                } 
                $value = json_decode($value); 
                if (json_last_error() == JSON_ERROR_NONE) { 
                    return (object) $value; 
                } else { 
                    return (object) array(); 
                } 
            break; 
        } 
        return $value; 
    } 
 
    /** 
     * checks if is post request 
     * @return bool true if is post request or false 
     * */ 
    public function isPost() 
    { 
        return (bool) ($_SERVER['REQUEST_METHOD'] === 'POST'); 
    } 
 
    /** 
     * get post value 
     * @param string _POST key 
     * @param string type 
     * Types: 
     * - INT 
     * - STRING 
     * - ARRAY 
     * @example $request->getPost('key', 'STRING'); 
     */ 
    public function getPost(string $key, string $type = null) 
    { 
        $value =  isset($_POST[$key]) ? $_POST[$key] : false; 
 
        if ($value === false) { 
            return false; 
        } 
        if ($type === null) { 
            return $value; 
        } 
        $result = $value; 
        switch (strtolower($type)) { 
            case 'string': 
               return (string) $value; 
            break; 
            case 'int': 
                if (is_numeric($value)) { 
                    return (int) $value; 
                } else { 
                    return false; 
                } 
            break; 
            case 'array': 
                if (is_object($value) || is_array($value)) { 
                    return (array) $value; 
                } else { 
                    return array(); 
                } 
            break; 
            case 'object': 
                if (is_object($value) || is_array($value)) { 
                    return (object) $value; 
                } else { 
                    return (object) array(); 
                } 
            break; 
        } 
    } 
 
    /** 
     * Detect an AJAX request 
     * @return bool true if is ajax request or false 
     * */ 
    public function isAjax() 
    { 
        return ( 
            !empty($_SERVER['HTTP_X_REQUESTED_WITH']) && 
            strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest' 
        ) 
            ? true 
            : false; 
    } 
 
    /** 
     * Check if form includes files 
     * @param string $name file input name 
     * @return boolean 
     * */ 
    public function hasFiles(string $name = null) 
    { 
        return $name !== null 
            ? ( 
                isset($_FILES[$name]) && $_FILES[$name] 
                ? true 
                : false 
            ) 
            : isset($_FILES) && $_FILES 
                ? true 
                : false; 
    } 
 
    /** 
     * get uploaded files 
     * @param string $name file input name 
     * @return array each file as object \App\Request\File 
     * */ 
 
    public function getFiles(string $name = null) 
    { 
        $array = array(); 
        $files = $_FILES; 
        foreach ($files as $k => $v) { 
            if (is_array($v['name'])) { 
                $file = array(); 
                foreach ($v as $ku => $f) { 
                    foreach ($f as $i => $s) { 
                        $file[$i][$ku] = $s; 
                    } 
                } 
                foreach ($file as $ff) { 
                    $array[] =  new \App\Request\File($ff); 
                } 
                continue; 
            } 
            if ((isset($v['error']) && $v['error'] !== UPLOAD_ERR_OK) || ($name && $k != $name)) { 
                continue; 
            } 
            $array[] = new \App\Request\File($v); 
        } 
        return $array; 
    } 
} 
 
 |