хочется немного обсудить yii

MiksIr

miksir@home:~$
Активист речь о дырке во фреймворке
легко валятся регулярки, в которых есть субпаттерны с модификатором неограниченной повторяемости ()* или ()+
Во фреймворке? Да? А я думал в PHP
perl -e '$str = "http://w".(".a" x 4000000).".ru"; $res = ($str =~ /^(http|https):\/\/(([A-Z0-9][A-Z0-9_-]*)(\.[A-Z0-9][A-Z0-9_-]*)+)/i); print($res);'

регулярки - это не плохо, это инструмент с документированными ограничениями, они создавались для других целей
Вот об этом подробнее. Для чего создавались регулярки? Т.е. оказывается они не для проверки строки по шаблону, а для чего-то еще создавались?
 

AmdY

Пью пиво
Команда форума
вообще-то внутри filter_* так же используются регулярки. так что спор ни о чём.
 

MiksIr

miksir@home:~$
MiksIr, это топик о yii, а не о регулярках, создай отдельный, plz, и там обсудим
а еще лучше с авторами либы PCRE, которая падает
Так я не понял. Вроде пинаешь, что yii такие плохие ибо используют регулярки, которые падают. Правда падают они иза баги в pcre. Где логика то? Ну а в следующем релизе php поламают filter что там будет переполнение - что делать то? Кричать, что фреймоврк xxx неумно сделан, ибо filter уязвим?
 

tz-lom

Продвинутый новичок
Если бага будет в filter_ то это будет бага PHP , с регулярками же другая история т.к. падение PCRE на таких вещах документированно (там же есть и обоснование почему это не баг и не фича,а просто факт и не делайте так)
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
AmdY да, там регулярка, но сначала там стоит проверка на размер строки
logical_filters.c:
void php_filter_validate_email(PHP_INPUT_FILTER_PARAM_DECL) /* {{{ */
...
if (Z_STRLEN_P(value) > 320) {
RETURN_VALIDATION_FAILED
}


в общем, вывод: перед использованием регулярки обязательно проверять длину строки
 

MiksIr

miksir@home:~$
Если бага будет в filter_ то это будет бага PHP , с регулярками же другая история т.к. падение PCRE на таких вещах документированно (там же есть и обоснование почему это не баг и не фича,а просто факт и не делайте так)
Падение в корку по переполнению - задокументированная фича?! Боже, куда все катится....
 

Активист

Активист
Команда форума
Кстати, а на валидацию урла не подходит функция parse_url? Хорошая такая функция, судя по сурсам там автомат.
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
кстати, да, подходит
хотя, email намного важней
 

volodya81

Новичок
Начал разбираться с ООП и Yii (раньше писал скрипты в процедурном стиле), дошел до работы с базой данных через Yii DAO.
Делаю следующее
// соединяюсь с базой
$connection=Yii::app()->db;
// подготавливаю запрос и выполняю его
$sql="SELECT *FROM `tbl_post` WHERE `title` LIKE 'Welcom'";
$command=$connection->createCommand($sql);
$dataReader=$command->query();
По идее в переменной $dataReader должен содержаться объект из полей которого я как-то могу получить нужные данные. Ясно, что mysql_fetch_array здесь не подходит.
Еще я понял, что в объекте, который находится в переменной $dataReader есть функция (метод) read() через который я смогу как то получить результат запроса в базу. Но какие параметры этой функции передать я не знаю.
Очень прошу дать пример!!!
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
YII DAO говорит тебе, что ты генерируешь классы моделей через gii, редактируешь их связи, и для выборок с условием не пишешь SQL вообще
для запросов с условием и CRUD-операций хватает ActiveRecord, для остального - query builder, только самые экзотические запросов стоит писать в виде sql
(CRUD = create/read/update/delete)

грубо говоря, в контроллере можно написать:
$criteria = $model->getDbCriteria()->addSearchCondition('title', '%'.$search.'%', false);
$posts = Post::model()->findAll($criteria);
еще лучше создать в модели метод, в который передавать $search и в нем строить $criteria
 

volodya81

Новичок
YII DAO говорит тебе, что ты генерируешь классы моделей через gii, редактируешь их связи, и для выборок с условием не пишешь SQL вообще
для запросов с условием и CRUD-операций хватает ActiveRecord, для остального - query builder, только самые экзотические запросов стоит писать в виде sql
(CRUD = create/read/update/delete)
Спасибо, я это понял. Но я хочу разобраться хоть на минимальном уровне с DAO (мне SQL пока понятней), дальше буду учить AR
 

MiksIr

miksir@home:~$
И даже не SQL, а используя их SQL билдер, дабы не возникало всяких кривых проблем с квотингом названия полей/таблиц
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
volodya81
если ты хочешь начинать обучение верховой езде с изучения анатомии лошадиных ног - твое право :)
но лучше это спрашивай на yiifraework.ru, ибо мне влом
 

volodya81

Новичок
Все, я понял как это работает :)

PHP:
$connection=Yii::app()->db;
$sql="SELECT * FROM `tbl_post`";
$command=$connection->createCommand($sql);
$dataReader=$command->query();
while(($row=$dataReader->read())!==false)
{
$out_string = $row ['title'];
echo "</br>$out_string</br>";
}
Метод read() за каждый прогон цикла while создает массив $row в котором находится одна строка выбранных данных
 

Redjik

Джедай-мастер
ты б ветку почитал, я как-раз вчера написал, что в этих случаях можно написать лямбду
zii в целом отстой, как и документация - пиши свои хелперы, читай исходники
Можно ссылку на лямбду? (а то в голову только Гордон Фремен лезет) ... что за метод?

Чем так страшен CHtml::link он же тупо приводит строку к формату прописанному в route... ? Посмотрел сам класс, этого хелпера (+ в папке нашел для ява скрипта и json - порадовало) вроде придраться не к чему.

Про zii - замечательная штука для обучения ... благодаря zii можно махом пробежать по туториалам и посмотреть как работает код. На продакшен конечно его не стоит оставлять.
 

Redjik

Джедай-мастер
Немного не в тему, но будет полезно тех, кто думает опробовать yii.
Подведу итог дня работы с YII =)

По началу помучился с yiic - тема стандартная, но как надо работать он у меня долго не хотел (тут вопрос кривизны рук многое решает)...
Понравилось решение с папкой protected =) И ее "переносимостью".

После этого начался почти что рай...
Элементарный CRUD в связке с DAO (все сгенерил через gii) за полчаса, с кучей комментов и сносным кодом (не нравится что они слишком много бизнесс логики закладывают в view - но это опять камушек в сторону zii, и что во фронте лучше не делать так)... то же самое но кохане делал день =(

Далее были трудности с более сложным CRUD ом для связанных таблиц - но сложность не в yii модели, а в проектировании модели и выставлении правильных foreign key.
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
проблема с переносимостью protected в доках - там меняется 1 строка в index.php
zii во фронте использовать не стоит
yiic - только для создания проекта, остальное в gii
после этого начинается "какой даун писал эту документацию" :)
потом утыкаешься в то, что multi-multi реализуется с трудом, нет коллекций, но назад дороги уже нет ...
 
Сверху