Форум русской поддержки Joomla!® CMS
17.08.2017, 21:35:48 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
   
   Начало   Поиск Joomla 3.0 FAQ Joomla 2.5 FAQ Joomla 1.5 FAQ Правила форума Новости Joomla Реклама Войти Регистрация Помощь  
Основной курс по Joomla
Страниц: [1] 2  Все   Вниз
  Добавить закладку  |  Печать  
Автор

Чем JFactory::getApplication()->input лучше JRequest::getVar()?

 (Прочитано 8665 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Shustry
Группа развития
*****

Репутация: +736/-3
Offline Offline

Пол: Мужской
Сообщений: 6707


Рисую дизайны


« : 15.02.2014, 18:24:58 »

Неоднократно на форуме читал, что…

Код
$option = JRequest::getVar('option');

…устарело. И принято так:

Код
$input = JFactory::getApplication()->input;
$option = $input->getCmd('option', '');

Можете популярно объяснить, почему?
Записан
Arkadiy
Группа развития
*****

Репутация: +440/-0
Offline Offline

Пол: Мужской
Сообщений: 5426


Крепитесь, други.


« Ответ #1 : 15.02.2014, 19:04:11 »

Первое скоро уберут из фреймворка, придется переделывать. По функционалу ничем не отличаются.
Записан
Shustry
Группа развития
*****

Репутация: +736/-3
Offline Offline

Пол: Мужской
Сообщений: 6707


Рисую дизайны


« Ответ #2 : 15.02.2014, 19:24:34 »

Спасибо. Там и предполагал.
Записан
Fedor Vlasenko
Профи
********

Репутация: +704/-6
Offline Offline

Пол: Мужской
Сообщений: 3833


Все начинается с Value


« Ответ #3 : 15.02.2014, 21:19:06 »

И то и другое - это сахар. Причем умереть оба должны за ненадобностью.
Функции фильтрации уже встроены в язык
Фильтрация данных
Записан
b2z
Support Team
*****

Репутация: +739/-0
Offline Offline

Пол: Мужской
Сообщений: 7740


Разраблю понемногу


« Ответ #4 : 15.02.2014, 21:23:50 »

Федор, а причем тут фильтры. Тут речь о Запросе.
Записан
Fedor Vlasenko
Профи
********

Репутация: +704/-6
Offline Offline

Пол: Мужской
Сообщений: 3833


Все начинается с Value


« Ответ #5 : 15.02.2014, 21:27:51 »

Федор, а причем тут фильтры. Тут речь о Запросе.
Потому как все уже включено http://www.php.net/manual/ru/function.filter-input.php
Записан
b2z
Support Team
*****

Репутация: +739/-0
Offline Offline

Пол: Мужской
Сообщений: 7740


Разраблю понемногу


« Ответ #6 : 15.02.2014, 21:31:01 »

Все равно, не думаю что от этого откажутся. Практически во всех фреймворках есть свой класс, который отвечает за окружение.
Записан
Fedor Vlasenko
Профи
********

Репутация: +704/-6
Offline Offline

Пол: Мужской
Сообщений: 3833


Все начинается с Value


« Ответ #7 : 15.02.2014, 21:38:36 »

Код
$id = filter_input(INPUT_GET, 'id', FILTER_VALIDATE_INT);
var_dump($id);
твой сайт?id=5
это уже встроено в язык, значит работает быстрее и лучше
« Последнее редактирование: 15.02.2014, 22:01:41 от Fedor Vlasenko » Записан
Aleks.Denezh
Практически профи
*******

Репутация: +376/-4
Offline Offline

Пол: Мужской
Сообщений: 2822



« Ответ #8 : 15.02.2014, 22:16:38 »

Код
$id = filter_input(INPUT_GET, 'id', FILTER_VALIDATE_INT);
var_dump($id);
твой сайт?id=5
это уже встроено в язык, значит работает быстрее и лучше
Федь в тех сайтах где нужна будет такая скорость думаю не будут вообще юзать Joomla )
Записан
Arkadiy
Группа развития
*****

Репутация: +440/-0
Offline Offline

Пол: Мужской
Сообщений: 5426


Крепитесь, други.


« Ответ #9 : 16.02.2014, 06:49:34 »

И то и другое - это сахар. Причем умереть оба должны за ненадобностью.
Функции фильтрации уже встроены в язык
Фильтрация данных
Прикольное заявление, давайте откажемся от классов работы с базой данных, ведь это все есть в пыхе, давайте откажемся от фреймворков и cms, ведь все это можно написать на пыхе.
Записан
Fedor Vlasenko
Профи
********

Репутация: +704/-6
Offline Offline

Пол: Мужской
Сообщений: 3833


Все начинается с Value


« Ответ #10 : 16.02.2014, 07:52:54 »

Цитировать
давайте откажемся от классов работы с базой данных
причем здесь это. Вы пишите все так и не разобравшись. Встроенные в рhp функции и методы фильтрации более продвинуты чем в Joomla
Так как это встроено в сам язык, то соответственно должно работать быстрее и меньше потреблять ресурсов.
и если этот код
Код
$input = JFactory::getApplication()->input;
$option = $input->getCmd('option', '');
можно смело заменить на
Код
$option = filter_input(INPUT_GET, 'option', FILTER_SANITIZE_STRING);
то почему бы и не заменить. Зачем учить кучу синтаксиса для разных фреймворков и систем если нативного php достаточно.
Да язык развивается и включает в себя лучшие разработки
http://www.php.net/manual/ru/appendices.php
Вы столкнулись с новыми возможностями языка
Записан
Arkadiy
Группа развития
*****

Репутация: +440/-0
Offline Offline

Пол: Мужской
Сообщений: 5426


Крепитесь, други.


« Ответ #11 : 16.02.2014, 08:32:36 »

Вот и я о том-же, зачем учить способы общения с базой данных разных фреймворков когда можно просто и гораздо более производительно
Код:
mysql_connect('localhost', 'mysql_user', 'mysql_password')
и дальше в том-же духе.
Я не думаю что разработчики Joomla глупы и не используюь очевидное, скорее наоборот, я допущу, вы чего-то недопонимаете, иначе вы бы писали cms, а разработчики Joomla флеймили на форумах т.к. ваш ответ в рамках заданного в топике вопроса кроме как флеймом никак не назвать.
Записан
Fedor Vlasenko
Профи
********

Репутация: +704/-6
Offline Offline

Пол: Мужской
Сообщений: 3833


Все начинается с Value


« Ответ #12 : 16.02.2014, 13:21:32 »

Arkadiy, изучайте документацию php. Приведенный вами код 2раза используется в Joomla.
Еще раз при проектировании движка данных функций может и не было или не рассматривались.
Когда "сахар" дает меньше возможностей языка от этого сахара нужно избавляться.
И да я пишу свой маленький велосипед вот тут вы да угадали. В данном случае время нас рассудит
И почему вы считаете показ альтернативных подходов флеймом.
Многие этого не знали, пропустили, да и не всегда успеваешь гнаться за новыми подходами в программировании
« Последнее редактирование: 16.02.2014, 14:13:02 от Fedor Vlasenko » Записан
varX
Живу я здесь
******

Репутация: +108/-4
Offline Offline

Сообщений: 1594


разработка компонентов


« Ответ #13 : 16.02.2014, 14:17:57 »

Я всегда отдаю предпочтение стандарту php, чем функциям Joomla. Элементарно, чтобы улучшить совместимость расширений в нестабильном фреймворке. Просто нужно понимать, когда нужно писать JRequest::getVar('option');, а когда можно $_GET['option'];.

По теме, основных различий два:
1. Количество символов в записи, соответственно 33 против 18;
2. Шансы, на то что первая функция проживет дольше выше.
Записан
Aleks.Denezh
Практически профи
*******

Репутация: +376/-4
Offline Offline

Пол: Мужской
Сообщений: 2822



« Ответ #14 : 16.02.2014, 14:36:21 »

Я всегда отдаю предпочтение стандарту php, чем функциям Joomla. Элементарно, чтобы улучшить совместимость расширений в нестабильном фреймворке. Просто нужно понимать, когда нужно писать JRequest::getVar('option');, а когда можно $_GET['option'];.
Что бы улучшить совместимость расширений в нестабильном фреймворке лучше уж писать под разные ветки, разный расширения, либо писать апдейты сразу, ато как посмотришь порой код таких расширений где такой подход как вы используют и хочется взять и сделать так:
Записан
varX
Живу я здесь
******

Репутация: +108/-4
Offline Offline

Сообщений: 1594


разработка компонентов


« Ответ #15 : 16.02.2014, 14:49:50 »

Вы какую-то ерунду написали про какой-то подход.  Подход существует только один и определяется общепринятыми нормами составления кода. А вот чрезмерное использование классов Joomla, там где они не нужны, это плохие нормы кодирования, кроме того программисты, не знакомые с CMC Joomla, вообще в восторге.
Записан
Aleks.Denezh
Практически профи
*******

Репутация: +376/-4
Offline Offline

Пол: Мужской
Сообщений: 2822



« Ответ #16 : 16.02.2014, 14:55:29 »

Вы какую-то ерунду написали про какой-то подход.  Подход существует только один и определяется общепринятыми нормами составления кода. А вот чрезмерное использование классов Joomla, там где они не нужны, это плохие нормы кодирования, кроме того программисты, не знакомые с CMC Joomla, вообще в восторге.
В тоже время есть стандарты кодирования для системы, и когда видишь в компоненте собственную реализацию кучу  плюшек которая есть в стандартном пакете системы, когда пишут свой класс для вывода списка записей и притуливают свою пагинацию, это вообще фейспалм.. А программисты незнакомые с Joomla пусть с ней познакомятся или сидят на другой системе! Потому что уже видел сайты после таких программистов, когда главку определяют на 40 строк кода...
Записан
varX
Живу я здесь
******

Репутация: +108/-4
Offline Offline

Сообщений: 1594


разработка компонентов


« Ответ #17 : 16.02.2014, 15:02:48 »

В тоже время есть стандарты кодирования для системы, и когда видишь в компоненте собственную реализацию кучу  плюшек которая есть в стандартном пакете системы, когда пишут свой класс для вывода списка записей и притуливают свою пагинацию, это вообще фейспалм.. А программисты незнакомые с Joomla пусть с ней познакомятся или сидят на другой системе! Потому что уже видел сайты после таких программистов, когда главку определяют на 40 строк кода...

Напишите несколько популярных компонентов, попробуйте их поддерживать, погоняйтесь за всеми новыми релизами Joomla. По другому, не поймете.
Записан
Aleks.Denezh
Практически профи
*******

Репутация: +376/-4
Offline Offline

Пол: Мужской
Сообщений: 2822



« Ответ #18 : 16.02.2014, 15:15:53 »

Напишите несколько популярных компонентов, попробуйте их поддерживать, погоняйтесь за всеми новыми релизами Joomla. По другому, не поймете.
В ветках 1.7-3.x это не проблема, изменения будут в основном косметические!
Но они не будут вызывать панику и программиста который решит выполнить наработку в этом компоненте, когда разраб пытается в одном компоненте впихнуть все что бы работало в 1.0-3.х
Записан
Shustry
Группа развития
*****

Репутация: +736/-3
Offline Offline

Пол: Мужской
Сообщений: 6707


Рисую дизайны


« Ответ #19 : 16.02.2014, 17:48:31 »

Фигасе холивар развернулся. Мне всегда такая форма записи нравилась, чисто из эстетических соображений: $option = JRequest::getVar('option'); Почему её убирают из Joomla? Из соображений безопасности?
Записан
varX
Живу я здесь
******

Репутация: +108/-4
Offline Offline

Сообщений: 1594


разработка компонентов


« Ответ #20 : 16.02.2014, 18:56:15 »

Фигасе холивар развернулся. Мне всегда такая форма записи нравилась, чисто из эстетических соображений: $option = JRequest::getVar('option'); Почему её убирают из Joomla? Из соображений безопасности?


Думаю, просто избавляются от дублирующего содержимого, и пытаются привести код к одинаковому написанию.
Записан
b2z
Support Team
*****

Репутация: +739/-0
Offline Offline

Пол: Мужской
Сообщений: 7740


Разраблю понемногу


« Ответ #21 : 16.02.2014, 19:36:35 »

Фигасе холивар развернулся. Мне всегда такая форма записи нравилась, чисто из эстетических соображений: $option = JRequest::getVar('option'); Почему её убирают из Joomla? Из соображений безопасности?
Новые классы в Joomla 2.5 CMS
Записан
Fedor Vlasenko
Профи
********

Репутация: +704/-6
Offline Offline

Пол: Мужской
Сообщений: 3833


Все начинается с Value


« Ответ #22 : 16.02.2014, 20:56:46 »

Мне всегда такая форма записи нравилась, чисто из эстетических соображений: $option = JRequest::getVar('option');
Выпиливать дерьмо трудно ибо на него все мухи слетаются
Что видно из JRequest::getVar('option');
какая то статическая функция класса JRequest,.
Более понятнее здесь
Код
$option = filter_input(INPUT_GET, 'option', FILTER_SANITIZE_STRING);
я четко беру переменную из GET   'option' и фильтрую ее как строковую.
Все понятно в синтаксисе, не надо никаких догадок
Это должно однозначно войти в новые версии Joomla
И да об этом я уже написал, думаю через пол-года год дойдет
https://groups.google.com/forum/#!topic/joomla-dev-general/_R-PNIu6cCk
Кому синтаксис не нравится и непонятен?
Ведь это красиво. Это пример здесь используются регулярные выражения поэтому решение данной задачи можно написать лучше.
Код
$data = filter_input_array(INPUT_GET,
array(
'option'=> array(
'filter' => FILTER_VALIDATE_REGEXP,
'flags'  => FILTER_NULL_ON_FAILURE,
'options'=> array('regexp'=>'/^com_content$/i')
),
'view' => array(
'filter' => FILTER_VALIDATE_REGEXP,
'flags'  => FILTER_NULL_ON_FAILURE,
'options'=> array('regexp'=>'/^category$/i')
),
'layout'=> array(
'filter' => FILTER_VALIDATE_REGEXP,
'flags'  => FILTER_NULL_ON_FAILURE,
'options'=> array('regexp'=>'/^blog$/i')
)
)
);
$showBlog = in_array(NULL, $data) === false;
 
if($showBlog):
//Код будет исполнятся в блоге категории
endif;
 
Mark Dexter
Цитировать
That's an interesting idea...
« Последнее редактирование: 17.02.2014, 02:54:47 от Fedor Vlasenko » Записан
b2z
Support Team
*****

Репутация: +739/-0
Offline Offline

Пол: Мужской
Сообщений: 7740


Разраблю понемногу


« Ответ #23 : 17.02.2014, 10:47:17 »

Федор, предложить одно, но кто это будет делать? Не хочешь попробовать? Как раз в Joomla 4 можно будет нарушить обратную совместимость. Кстати Марк пишет об JFilterInput, а не о JRequest/JInput.
Записан
b2z
Support Team
*****

Репутация: +739/-0
Offline Offline

Пол: Мужской
Сообщений: 7740


Разраблю понемногу


« Ответ #24 : 18.02.2014, 12:39:23 »

Кстати, завязалось обсуждение. Don Gilbert пытается объяснить Федору в чем минус использования JInput.

Вкратце - filter_input не работает с измененными значениями в $_GET, $_POST, $_REQUEST, $_SERVER и $_ENV.
Записан
Fedor Vlasenko
Профи
********

Репутация: +704/-6
Offline Offline

Пол: Мужской
Сообщений: 3833


Все начинается с Value


« Ответ #25 : 18.02.2014, 13:39:54 »

Вкратце - filter_input не работает с измененными значениями в $_GET, $_POST, $_REQUEST, $_SERVER и $_ENV.
Именно так. Потому как JInput также не делает этого
Единственно что он записывает так это
Код
$app->input->get->set('task', 'add'); //мне одному кажется что эта строка длинная и воняет
//записывает в $_REQUEST
// и это эквивалентно
$_REQUEST['task'] = 'add';
Код
$inp = new JInput();
$inp->set('test', 100);
echo '<pre>';
echo '<h2>GET</h2>';
print_r($_GET);
echo '<h2>POST</h2>';
print_r($_POST);
echo '<h2>REQUEST</h2>';
print_r($_REQUEST);
echo '</pre>';
die;
Записан
b2z
Support Team
*****

Репутация: +739/-0
Offline Offline

Пол: Мужской
Сообщений: 7740


Разраблю понемногу


« Ответ #26 : 18.02.2014, 13:50:16 »

Федор, но дальше ты уже не можешь использовать filter_input:
Код
$_REQUEST['task'] = 'add';

print_r($_REQUEST) выдаст add, но если в task до этого было установлено другое значение, то filter_input(INPUT_GET, 'task', FILTER_SANITIZE_STRING); выдаст не add, а другое значение.
Записан
Shustry
Группа развития
*****

Репутация: +736/-3
Offline Offline

Пол: Мужской
Сообщений: 6707


Рисую дизайны


« Ответ #27 : 18.02.2014, 13:50:53 »

Как всё-таки грамотней всего получить значения: компонент, вид, лэйаут, темплейт?
Записан
b2z
Support Team
*****

Репутация: +739/-0
Offline Offline

Пол: Мужской
Сообщений: 7740


Разраблю понемногу


« Ответ #28 : 18.02.2014, 13:53:15 »

Как всё-таки грамотней всего получить значения: компонент, вид, лэйаут, темплейт?
На данный момент:
Код
$input = JFactory::getApplication()->input;
$option = $input->getCmd('option', '');
Записан
Shustry
Группа развития
*****

Репутация: +736/-3
Offline Offline

Пол: Мужской
Сообщений: 6707


Рисую дизайны


« Ответ #29 : 18.02.2014, 14:02:45 »

А зачем второй пустой атрибут в getCmd?
Записан
Страниц: [1] 2  Все   Вверх
  Добавить закладку  |  Печать  
 
Перейти в:  

Powered by SMF 1.1.21 | SMF © 2006, Simple Machines

Joomlaforum.ru is not affiliated with or endorsed by the Joomla! Project or Open Source Matters.
The Joomla! name and logo is used under a limited license granted by Open Source Matters
the trademark holder in the United States and other countries.

LiveInternet