Pull to refresh

Comments 29

Этот урок поможем вам познакомиться с Yii2
По большей части, ActiveRecord осталась нетронутой.

Почему AR в женском роде?
Треш…
if ($id === NULL) { Yii::$app->session->setFlash('PostDeletedError'); Yii::$app->getResponse()->redirect(array('site/index')); } $post = Post::find($id); if ($post === NULL) { Yii::$app->session->setFlash('PostDeletedError'); Yii::$app->getResponse()->redirect(array('site/index')); }
такие вещи лучше в ПМ. Статья исправится, а комментарии остаются
Наверняка потому, что «запись».
Спасибо, исправил. Самое начало и проглядел.
Хм, вообще в репозитории Yii2 есть приложение тестовое «app» оно на порядок лучше чтоли)) ну и сейчас говорить о CRUD когда нету базовых виджетов еще, я думаю рано, там например описан метод $this->populate() контроллера, и т п, подредактируйте чтоли статью, а то она совсем ни о чем новом не рассказывает.
Я так думаю, статья не рассчитана на про, которые хотят познакомиться с новой версией фреймворка. Она для совсем новичков, которые хотят узнать основы фреймворка и начать работу с ним.
В статье есть плохие советы и неточности.

1. Не используйте latin1. UTF нашё всё.
2. model в моделях AR переопределять не нужно. Откуда этот метод взялся не ясно…
3. «По большей части, ActiveRecord осталась нетронутой». Переписали только несколько раз с нуля, а так не тронули… ага.
4. Выборку поста надо делать так: $data = Post::find()->all();
5. В view забыли заэскейпить вывод. Так делать не стоит.
6. populate работает, просто массовое присвоение по умолчанию не работает без описаноя валидаторов в модели.
7. Про уникальный ключ тоже забавно. Не сделали автоинкремента и жалуются…
8. Бросать 404 в случае не переданного ID не надо. Нужно просто убрать значение по умолчанию из сигнатуры метода.
Да, инкремент вообще порадовал. Я задумался даже не шутка ли это.

Хотя и работа с датами тоже на уровне.

Похоже с mysql автор еще не разобрался :)
Статья в целом вообще странная, как и стиль изложения автора. Но раз уж появилась в wiki на офф. сайте — я решил перевести.

7. Про уникальный ключ тоже забавно. Не сделали автоинкремента и жалуются…

Про ключ смешно. Я сразу поглядел sql, воспроизвёл у себя и удивился, что автор даже не подумал в эту сторону
Только у меня yii2.erianna.com переадресовывает на какую-то порнушную страницу ( qvaqa.com/?get=yii2 ) ??
Хотел пример посмотреть и очень удивился женским задницам.
Там xss уязвимость была, кто-то наверно написал редирект. UPD: убрал зловредный код
Там, это где? В Yii? Можно тогда поподробнее?
В примере. Данные отображаются без энкодинга, например, в списке постов:
<td><?php echo Html::a($post->title, array('site/read', 'id'=>$post->id)); ?></td>
После symfony2 как то страшно выглядит. Хотя, наверное, более RAD.
Namespace с маленькой буквы выглядят как минимум странными (когда почти во всех библиотеках используются заглавные буквы)
не обязательно же, хоть и распространено:
github.com/php-fig/fig-standards/blob/master/accepted/PSR-0.md#underscores-in-namespaces-and-class-names
Underscores in Namespaces and Class Names
\namespace\package\Class_Name => /path/to/project/lib/vendor/namespace/package/Class/Name.php
\namespace\package_name\Class_Name => /path/to/project/lib/vendor/namespace/package_name/Class/Name.php
Да и после Kohana 3.3 точно такие же впечатления, который раз захожу уже ГОТОВЫЙ, чтобы меня «уговорили» перейти на многими восхваляемый Yii и который раз испытываю непонятные чувства, наверное те, кто хвалят использую какой то другой Yii.
Одно только это:
$model->title =  $_POST['Post']['title'];
чего стоит.
Обращение без проверки существования элемента массива вместо привычного мне безопасного способа
$model->title = Arr::path($_POST, 'Post.title', 'default value');

А первое разочарование у меня было, когда обратились с вопросом поддержки и доработки внешне работающего большого проекта — при попытке запустить все это на локалке со включенными ошибками и предупреждениями вызвало сильный батхерт PHP.
Виждеты вроде бы вызывают положительные эмоции за сам факт существования, как и вообще любое повторное использование кода, но вот способ инициализации HTML сущностей меня не устроил, сейчас поясню о чем я
<?php echo Html::a('Delete', array('site/delete', 'id' => $post->id), array('class' => 'btn btn-danger')); ?>

а хотелось бы чего то такого
<?php $a = Html::a();
$a->setContent('Delete')
->setUrl(array('site/delete', 'id' => $post->id))
->setClass('btn btn-danger'); 
$echo $a;
?>

хотя бы на основе pear.php.net/package/HTML_Common2
Поясняю, зачем мне понадобился chainable-вызов — для возможности частичной, кусочной инициализации в зависимости от параметров. Пример аналог — SQL-запрос, собираемый говнокодом или ActiveRecord, который собирает запрос по кусочкам.
$_POST['Post']['title']; всегда задан во вьюшке. С другой стороны что вам мешает использовать кастомный метод Arr::path?

На счет Html::a() мне кажется yii запись гораздо комактнее и во вьюшках будет восприниматься гораздо легче
Мало того, что не AUTO_INCREMENT, так и его эмуляция кривая — не устойчивая к конкурентным запросам.
Это только я при установке не обнаружил файл yiic.php? Ставил в итоге так, может кому пригодится:

1. Скачал и распаковал архив с yii2 в любой каталог path_to_yii2.

2. Скопировал тестовое приложение из path_to_yii2/apps/basic в path_to_web_projects.

3. Скопировал path_to_yii2/framework/yii в path_to_web_projects/basic/vendor/yiisoft/yii2.

4. Закомментировал строчку в path_to_projects/basic/www/index.php:
//require(DIR . '/../vendor/autoload.php');

5. Смотрим требования:
localhost/basic/requirements.php

6. Смотрим, что получилось:
localhost/basic/www/
Странно чем автору не угодил DataProvider, не вижу смысла дёргать всё сразу…
Если бы вы посмотрели на дату публикации и прочитали статью внимательно, то увидели бы, что она писалась даже не по альфе, а по Public Preview. Судя по всему, на тот момент DataProvider просто не был написан.
Sign up to leave a comment.

Articles