Вход Регистрация
Файл: Neiron/Kernel/Request.php
Строк: 173
<?php
/**
 * PHP 5x framework с открытым иходным кодом
 */
namespace NeironKernel;

use 
NeironAPIKernelRequestInterface;
use 
NeironAPIKernelDIContainerInterface;
use 
NeironAPIKernelRequestControllerResolverInterface;

/**
 * Обработчик запросов к серверу
 * @author KpuTuK
 * @version 1.0.0
 * @package Neiron framework
 * @category Kernel
 * @link
 */
class Request implements RequestInterface
{
    
/**
     * @var NeironAPIKernelRequestControllerResolverInterface
     */
    
private $resolver;
    
/**
     * Обьект класса для работы с cookie
     * @var NeironAPIKernelCookieInterface
     */
    
public $cookies;
    
/**
     * Обьект Dependency injection контейнера
     * @var NeironAPIKernelDIContainerInteface
     */
    
private $container;
    private 
$globals = array();
    private 
$uri null;
    
/**
     * Конструктор класса
     * @param NeironAPIKernelDIContainerInterface $container
     */
    
public function __construct(
        
DIContainerInterface $container
        
ControllerResolverInterface $resolver
    
) {
        
$this->container $container;
        
$this->globals($GLOBALS);
        
$this->cookies $container['cookie'];
        
$this->cookies->setAll(
            
$this->globals('_COOKIE') ? $this->globals('_COOKIE') : array()
        );
        
$this->resolver $resolver;
    }
    
/**
     * Создает и обрабатывает запрос к серверу
     * @todo разобраться с cookies
     * @param mixed  $uri URI запроса
     * @param mixed  $method Метод запроса
     * @param mixed  $get Массив данных для переменной $_GET
     * @param mixed  $post Массив данных для переменной $_POST
     * @param mixed  $server Массив данных для переменной $_SERVER
     * @param mixed  $files Массив данных для переменной $_FILES
     * @return NeironKernelRequestControllerResolver
     */
    
public function create(
        
$uri null
        
$method null
        
$get null$post null
        
$server null
        
$files null
    
){
        
$this->get($get);
        
$this->post($post);
        
$this->server($server);
        
$this->globals($filesnull'_FILES');
        return 
$this->resolver->resolve(
                
$this->container['routing']->match(
                        
$this->decodeDetectUri($uri), $this->method($method)
                ), 
$this->container
        
);
    }
    
/**
     * Возвращает или определяет и декодирует строку uri
     * @param mixed $uri URI строка
     * @return string  Декодированная строка
     */
    
private function decodeDetectUri($uri null)
    {
        if (
$uri === null) {
            if (!empty(
$this->server('PATH_INFO'))) {
                
$uri $this->server('PATH_INFO');
            } elseif (!empty(
$this->server('REQUEST_URI'))) {
                
$uri explode('?'$this->server('REQUEST_URI'))[0];
            }
        }
        
$this->uri(rawurldecode(rtrim($uri'/')));
    }
    
/**
     * Задает/выдает (если есть) адрес страницы, которая привела браузер пользователя на эту страницу
     * @param string $refer Адрес страницы
     * @return mixed Если есть (или указан) адрес страницы то выдает его или возвращает false
     */
    
public function referer($refer null)
    {
        if (
$refer != null) {
            
$this->server('HTTP_REFERER'$refer);
        }
        if (
$this->server('HTTP_REFERER') !== null) {
            return 
$this->server('HTTP_REFERER');
        }
        return 
false;
    }
    
/**
     * Сохраняет/выводит данные пременной $GLOBALS
     * @param mixed $name Имя переменной
     * @param mixed $value Значение переменной
     * @param mixed $var Индех переменной
     * @return mixed
     */
    
public function globals($name null$value null$var false)
    {
        
$glob $var $this->globals[$var] : $this->globals;
        
// Слияние массивов с заменой
        
if (is_array($name)) {
            return 
$this->globals array_merge($glob$name);
        }
        
// Передача всего содержимого
        
if ($name === null && $value === null) {
            return 
$glob;
        }
        
// Проверка на наличие и передача переменной из массива
        
if ($name !== null && $value === null) {
            if (
array_key_exists($name$glob)) {
                return 
$glob[$name];
            }
            return 
false;
        }
        
// Запись переменной
        
if ($name !== null && $value !== null) {
            return 
$glob[$name] = $value;
        }
    }
    
/**
     * Сохраняет/выводит метод запроса
     * @param mixed $method Метод запроса
     * @return string Метод запроса
     */
    
public function method($method null)
    {
        if (
$method !== null) {
            
$this->server('REQUEST_METHOD'$method);
        }
        return 
$this->server('REQUEST_METHOD');
    }
    
/**
     * Сохраняет/выводит URI запроса
     * @param mixed $uri URI запроса
     * @return string URI запроса
     */
    
public function uri($uri null)
    {
        return isset(
$uri) ? $this->uri $uri $this->uri;
    }
    
/**
     * Сохраняет/выводит данные пременной $_SERVER
     * @param mixed $name Имя переменной
     * @param mixed $value Значение переменной
     * @return mixed
     */
    
public function server($name null$value null)
    {
        return 
$this->globals($name$value'_SERVER');
    }
    
/**
     * Сохраняет/выводит данные пременной $_GET
     * @param mixed $name Имя переменной
     * @param mixed $value Значение переменной
     * @return mixed
     */
    
public function get($name null$value null)
    {
        return 
$this->globals($name$value'_GET');
    }
    
/**
     * Сохраняет/выводит данные пременной $_POST
     * @param mixed $name Имя переменной
     * @param mixed $value Значение переменной
     * @return mixed
     */
    
public function post($name null$value null)
    {
        return 
$this->globals($name$value'_POST');
    }
    
/**
     * Сохраняет/выводит данные пременной $_FILES
     * @param mixed $name Имя переменной
     * @param mixed $value Значение переменной
     * @return mixed
     */
    
public function files($name null$value null)
    {
        return 
$this->globals($name$value'_FILES');
    }
}
Онлайн: 0
Реклама