Правила     Закладки     Карма    Календарь    Журналы    Помощь    Поиск    PDA    Чат   
        СМС-ки
   
Пейджер выключен!
Страницы: (2) [1] 2  ( Перейти к первому непрочитанному сообщению )  
Фильтр авторов:    показать 
  скрыть
  Ответ в темуСоздание новой темыСоздание опроса

> Request
OleKh  
 ۩  [x] Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 753
Пользователь №: 32032
На форуме: 5 лет, 4 месяца, 19 дней
Карма: 18




Было предложение использовать для выполнения задания пример реализации Yii, но у меня реализовано на книжном примере с моими доработками.

Есть сомнения по поводу надежности, т.к. открывается доступ к глобальным переменным, может быть использование секретного ключа закроет "дыру" в безопасности приложения.

index.php

require_once('Request.php');

new Request;

$request = RequestRegistry::getRequest();

//http://HTTP_HOST/index.php?arg=value&id=123
//http://HTTP_HOST/index.php?arg=value&id=ddd


e($request->getValue('get', 'arg'));

e($request->getValue('server', 'REQUEST_URI', 123));

$request->setValue('get', 'arg', 'newValue');

e($request->getValue('get', 'arg'));


function e($val)
{
echo "<pre>" . print_r($val, 1) . "</pre>";
}


Request.php
require_once('registry/Registry.php');
require_once('registry/RequestRegistry.php');

class Request
{

private $_variables;

function __construct()
{

$this->init();

$this->validateInput();

RequestRegistry::setRequest($this);

}

function init()
{

$this->_variables['server'] = $_SERVER;

if($_GET) {
$this->_variables['get'] = $_GET;
}

if($_POST) {
$this->_variables['post'] = $_POST;
}

if($_COOKIE) {
$this->_variables['cookie'] = $_COOKIE;
}

if($_FILES) {
$this->_variables['files'] = $_FILES;
}

}


function getValue($regKey, $valKey, $secKey = null)
{
$this->secKey($regKey, $secKey);
if (isset($this->_variables[$regKey])) {
return $this->_variables[$regKey][$valKey];
}
}


function setValue($regKey, $valKey, $val, $secKey = null)
{
$this->secKey($regKey, $secKey);
$this->_variables[$regKey][$valKey] = $val;
}

private function secKey($regKey, $secKey)
{
if(in_array($regKey, array('server', 'cookie')) ){
if ($secKey != '123') {
throw new Exception('Secret key is missing');
}
}
}


private function validateInput(){

foreach ($this->_variables as $regKey=>$vars) {

if(in_array($regKey, array('get', 'post'))) {

foreach ($vars as $key=>$val){
if (!$this->validateValue($key, $val)) {
throw new Exception('Input is not valid');
};
}

}

}
}


private function validateValue($key, $val){

switch ($key){
case 'id':
if(!is_numeric($val)) {
return false;
}
break;
default:
break;
}

return true;

}
}


Registry.php
abstract class Registry
{

abstract protected function get($key);

abstract protected function set($key, $val);

}


RequestRegistry.php
require_once('Registry.php');

class RequestRegistry extends Registry
{

private $_values = array();

private static $_instance;

private function __construct(){}

static function instance(){
if(!isset(self::$_instance)){
self::$_instance = new self();
}
return self::$_instance;
}

protected function get ($key){
if (isset($this->_values[$key])){
return $this->_values[$key];
}
return null;
}

protected function set ($key, $val){
$this->_values[$key] = $val;
}

static function getRequest (){
return self::instance()->get('request');
}

static function setRequest (Request $request){
self::instance()->set('request', $request);
}

}
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Bolik  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 363
Пользователь №: 35724
На форуме: 4 года, 9 месяцев, 4 дня
Карма: 6




можешь посмотреть еще как на Симфони реализовано.

https://github.com/symfony/http-foundation

юзаю этот компонент в своем фреймворке, очень удобно
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
twin  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Глухой нуб
******

Профиль
Группа: Администратор
Почтальон группы
Сообщений: 16220
Пользователь №: 6543
На форуме: 8 лет, 10 месяцев, 20 дней
Карма: 304

Трезвый :
6 лет, 7 месяцев, 30 дней


Цитата (OleKh @ 28.10.2015 - 10:27)
Было предложение использовать для выполнения задания пример реализации Yii

Ты не так понял. Я просто показал один из вариантов, что нужно получить в итоге. smile.gif

Сейчас позябаем.


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

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

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

user posted image
PMСайт пользователяICQ
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
OleKh  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 753
Пользователь №: 32032
На форуме: 5 лет, 4 месяца, 19 дней
Карма: 18




Я в курсе где есть готовые решения)

twin
Мне не удалось запустить у себя ABC чтобы интегрировать Registry и Request. Слишком много уже всего, много ошибок выдает. Дебаггеры, компоненты, базы данных ... а ядра фреймворка так и нет до сих пор. Порог вхождения в проект для новичков усложняется. Или надо откатать до разработки FrontController и продолжать, или придется уже приглашать знатоков)
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
twin  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Глухой нуб
******

Профиль
Группа: Администратор
Почтальон группы
Сообщений: 16220
Пользователь №: 6543
На форуме: 8 лет, 10 месяцев, 20 дней
Карма: 304

Трезвый :
6 лет, 7 месяцев, 30 дней


Не, такой Request мне совсем не нравицо. sad.gif С секретными ключами тем паче. Вообще сам принцип не нравится. Какая книжка кстати использовалась?


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

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

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

user posted image
PMСайт пользователяICQ
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
AllesKlar  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 3708
Пользователь №: 38635
На форуме: 3 года, 7 месяцев, 27 дней
Карма: 199




С этим ясно
function init()
{

$this->_variables['server'] = $_SERVER;

if($_GET) {
$this->_variables['get'] = $_GET;
}

if($_POST) {
$this->_variables['post'] = $_POST;
}

if($_COOKIE) {
$this->_variables['cookie'] = $_COOKIE;
}

if($_FILES) {
$this->_variables['files'] = $_FILES;
}

}



А это как понимать?
$request->setValue('get', 'arg', 'newValue');

Переписать суперглобальные переменные, конечно можно, но:
- зачем?
- их логика существования подразумевает, что они readonly


--------------------
[продано копирайтерам]
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
OleKh  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 753
Пользователь №: 32032
На форуме: 5 лет, 4 месяца, 19 дней
Карма: 18




Цитата (AllesKlar @ 28.10.2015 - 15:55)
С этим ясно


Как раз с этим не закончено, нет PUT, DELETE ...

Цитата (AllesKlar @ 28.10.2015 - 15:55)
А это как понимать?


Цитата (AllesKlar @ 28.10.2015 - 15:55)
Переписать суперглобальные переменные, конечно можно, но:
- зачем?
- их логика существования подразумевает, что они readonly


- задачи могут быть и нестандартные
- метод setValue не переписывает суперглобальные переменные, а позволяет изменять их значения в Request и да, тут ошибка, в Registry значение не обновляется
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
OleKh  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 753
Пользователь №: 32032
На форуме: 5 лет, 4 месяца, 19 дней
Карма: 18




Цитата (Bolik @ 28.10.2015 - 13:11)
юзаю этот компонент в своем фреймворке, очень удобно


в Симфони есть класс ServerBag
$this->server = new ServerBag($server);


это реестр Registry?
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
AllesKlar  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 3708
Пользователь №: 38635
На форуме: 3 года, 7 месяцев, 27 дней
Карма: 199




Цитата (OleKh @ 28.10.2015 - 16:29)
Как раз с этим не закончено, нет PUT, DELETE ...

Ну это только для гурманов, причем ОЧЕНЬ хорошо понимающих, что происходит.
Не думаю, в данном фреймворке имеет смысл это реализовывать, он был задуман для новичков, им про DELETE и PUT еще очень рано знать, это из категории 21+ smile.gif

Цитата (OleKh @ 28.10.2015 - 16:29)
задачи могут быть и нестандартные
- метод setValue не переписывает суперглобальные переменные, а позволяет изменять их значения в Request и да, тут ошибка, в Registry значение не обновляется

Считаю это костылем и необходимостью жестко бить по рукам.
$_GET, $_POST, $_FILES - это то, что пришло из браузера, и в любом месте оно должно оставаться неизменным.
Если есть необходимость записи в эти переменные, значит присутствует ошибка логики у программиста.
Будет убедительный пример, готов обсудить.


--------------------
[продано копирайтерам]
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
twin  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Глухой нуб
******

Профиль
Группа: Администратор
Почтальон группы
Сообщений: 16220
Пользователь №: 6543
На форуме: 8 лет, 10 месяцев, 20 дней
Карма: 304

Трезвый :
6 лет, 7 месяцев, 30 дней


Цитата (AllesKlar @ 28.10.2015 - 14:46)
Будет убедительный пример, готов обсудить.

Пример скорее всего из устаревшей книжки. В старых версиях PHP действительно полезно было обработать сразу весь набор GPC на предмет магических кавычек. Сейчас я тоже пока не представляю такой потребности.


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

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

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

user posted image
PMСайт пользователяICQ
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
OleKh  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 753
Пользователь №: 32032
На форуме: 5 лет, 4 месяца, 19 дней
Карма: 18




Цитата (AllesKlar @ 28.10.2015 - 16:46)
Если есть необходимость записи в эти переменные, значит присутствует ошибка логики у программиста.
Будет убедительный пример, готов обсудить.


Согласен, проверил в Симфони, тоже нет set для параметров, в книге был get и set в Request, в данном классе лишний функционал. Но все равно, даже если убрать метод set из Request, $_GET записывается в реесстр, в классе реестра есть возможность изменять значения в реестре... но уже protected)

Короче, непросто это даже по книжке написать фреймворк, а копипастить из других фреймворков неинтересно. Хорошо, что есть хоть где посмотреть.
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Invis1ble  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме




******

Профиль
Группа: Эксперт
Группа переписки
Сообщений: 11976
Пользователь №: 23195
На форуме: 7 лет, 1 месяц
Карма: 436

Трезвый :
7 лет, 11 месяцев, 30 дней




--------------------
PMПисьмо на e-mail пользователюСайт пользователя
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
AllesKlar  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 3708
Пользователь №: 38635
На форуме: 3 года, 7 месяцев, 27 дней
Карма: 199




Цитата (OleKh @ 28.10.2015 - 17:03)
Но все равно, даже если убрать метод set из Request, $_GET записывается в реесстр, в классе реестра есть возможность изменять значения в реестре

А вот тут можно плавно перейти к горячему вопросу об геттерах и сеттерах biggrin.gif


--------------------
[продано копирайтерам]
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
OleKh  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 753
Пользователь №: 32032
На форуме: 5 лет, 4 месяца, 19 дней
Карма: 18




Цитата (AllesKlar @ 28.10.2015 - 17:07)
А вот тут можно плавно перейти к горячему вопросу об геттерах и сеттерах


магические методы, тоже интересно, но в этой теме Николаю было бы интересно пообщаться на тему как организовать реестр в АВС и наладить механизм обмена данными в т.ч. и с Request
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
OleKh  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 753
Пользователь №: 32032
На форуме: 5 лет, 4 месяца, 19 дней
Карма: 18




Цитата (twin @ 28.10.2015 - 15:40)
Не, такой Request мне совсем не нравицо. sad.gif С секретными ключами тем паче. Вообще сам принцип не нравится. Какая книжка кстати использовалась?

Пропустил это сообщение, только заметил.

PHP Objects, Patterns, and Practice, 4th edition
Matt Zandstra
книга PHP: объекты, шаблоны и методики программирования, 4-е издание
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
  Быстрый ответ
Информация о Госте
Введите Ваше имя
Кнопки кодов
Для вставки цитаты, выделите нужный текст и
НАЖМИТЕ СЮДА
Введите сообщение
Смайлики
:huh:  :o  ;) 
:P  :D  :lol: 
B)  :rolleyes:  <_< 
:)  :angry:  :( 
:unsure:  :blink:  :ph34r: 
     
Показать всё

Опции сообщения  Включить смайлики?
 Включить подпись?
 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:

Опции темыСтраницы: (2) [1] 2  Ответ в темуСоздание новой темыСоздание опроса