[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Request
Страницы: 1, 2
twin
Цитата (AllesKlar @ 28.10.2015 - 15:07)
А вот тут можно плавно перейти к горячему вопросу об геттерах и сеттерах

Вот потому и не нравится мне сей подход. В спецификации задекларирован простой синтаксис на грани нативного. А обезличенные геттеры совсем не вписываются в концепцию. Это во-первых сложно для непосвященных, нужно курить доки. Во вторых усложняет логику самого скрипта. Причем снижая функциональность. Я не зря давал ссылку на Yii. Геттеры конечно нужны. Но не в таком виде.

Есть два приемлимых варианта.
1. Синтаксис похож на нативное обращение к переменной:
$request = new Request;
$page = $request->POST('page');

2. Лучше и функциональнее похожий на тернарник:
$request = new Request;
$page = $request->iniGET('page', 'index');


Это в фреймворке будет возможно написать так:
$page = Abc::getService('Request')->iniGET('page', 'index');

Бесит сия веревка конечно, но что поделать, раз каноны. Зато все очень просто. Фреймворк получается SOA, эта комбинация основная, её не забудешь:
Abc::getService('Request')

Есть еще алиас для ленивых
Abc::gs('Request')

Дальше видна принадлежность и действие. Инициализация GET. Можно конечно и классический getGET оставить. Но тавтология, да и не понятно, почему нужно брать оттуда, когда он в воздухе висит. :)

_____________
Если вам недостаточно собственных заблуждений, можно расширить их мнениями экспертов.

Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.

Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.

user posted image
AllesKlar
twin
Ваще согласен.
Тоже сторонник прозрачности.
Каждый раз готов душить нашего яваскриптика, когда он понавешает на всякие там дивы событий и прочих безымянных функций, а потом вылавливай их по всем файлам.
Модно, меньше писанины, но ведь люди же после тебя это в руки берут smile.gif

_____________
[продано копирайтерам]
OleKh
Если понадобятся параметры например в контроллере приложения.

1. Передавать в контроллер приложения объект Request через аргумент

new AppController($request);

///////

$model = new model();
$model->execute($sql, $request->getQuery('id'));


2. Инициализировать новый Request

$request = new Request();
$model->execute($sql, $request->getQuery('id'));


3. На входе FrontControler создать new Request() и передать данные в реестр RequestRegistry и тогда когда понадобятся данные, уже не надо повторно инициализировать Request и вызывать конструктор, а просто юзать RequestRegistry getValue().


RequestRegistry::getRequest()->getValue('get', 'arg');


Если мне правильно понятна суть использования RequestRegistry.

Или почему в ABC до сих пор нет Registry, может быть этот паттерн устарел и Builder, ServiceLocator ... заменили функционал Registry.
twin
Цитата (OleKh @ 28.10.2015 - 16:27)
Или почему в ABC до сих пор нет Registry, может быть этот паттерн устарел и Builder, ServiceLocator ... заменили функционал Registry.

Именно так. Сейчас DI в моде. Не нужен никому реестр давно)

_____________
Если вам недостаточно собственных заблуждений, можно расширить их мнениями экспертов.

Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.

Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.

user posted image
OleKh
Цитата (twin @ 28.10.2015 - 18:32)
Именно так. Сейчас DI в моде. Не нужен никому реестр давно)

Тогда я тупанул, надо было сразу предупредить, что всё по новому)

Пошел учить DI семимильными шагами)
twin
Вот сюда сходи для начала.

_____________
Если вам недостаточно собственных заблуждений, можно расширить их мнениями экспертов.

Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.

Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.

user posted image
twin
Ну что, как говаривал какой-то Зорг (недавно тут процитировали :D ) - сам не зделаешь, никто не сделает.

Вот такой сан-минимум получился. Потом расширим до полноценного компонента. Пока для ядра этого вроде хватает.

Тут я где напортачил? :)
<?php

namespace ABC\Abc\Core;

/**
* Класс BaseRequest
*
* NOTE: Requires PHP version 5.5 or later
*
@author phpforum.su
*
@copyright © 2015
*
@license http://www.wtfpl.net/
*/
class BaseRequest
{
/**
*
@var \ABC\Abc\Core\Router
*/

public $router;

public $GET;
public $uriHash;

/**
* Конструктор
*
*
@param object $router
*/

public function __construct($router)
{
$this->router = $router;

if (!empty($_SERVER['QUERY_STRING'])) {
$this->GET = $this->parseQueryString();
} else {
$this->GET = $this->parseRequestUri();
}
}


/**
* Инициализация GET параметров
*
*
@param string $key
*
@param string $default
*
*
@return string
*/

public function iniGET($key, $default = null)
{
return isset($this->GET[$key]) ? $this->GET[$key] : $default;
}

/**
* Возвращает PATH
*
*
@return srring
*/

public function getPath()
{
if (isset($_SERVER['REQUEST_URI'])) {
return parse_url($_SERVER['REQUEST_URI'])['path'];
}
return '/';
}

/**
* Разбирает в массив QUERY_STRING
*
*
@return array
*/

protected function parseQueryString()
{
$queryString = urldecode($_SERVER['QUERY_STRING']);
mb_parse_str($queryString, $out);
return $out;
}

/**
* Разбирает массив HASH в массив GET по правилам роутинга
*
*
@param
*
*
@return void
*/

protected function parseRequestUri()
{
$uriHash = $this->createUriHash();
return $this->router->convertUri($uriHash);
}

/**
* Преобразует URI в массив
*
*
@param
*
*
@return void
*/

protected function createUriHash()
{
$this->uriHash = explode('/', $this->getPath());
return $this->uriHash;
}
}


_____________
Если вам недостаточно собственных заблуждений, можно расширить их мнениями экспертов.

Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.

Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.

user posted image
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.