@symfony_php

Страница 194 из 1418
Valentin
23.04.2017
12:07:45
А в случае ошибок – возвращаю информацию о том, что не так

Sergey
23.04.2017
12:07:49
это значит что у тебя между входом запроса до сохранения в базу ты не знаешь что происходит

А в случае ошибок – возвращаю информацию о том, что не так
клиенту эта информация может быть полезна только если у тебя мэппинг данных запроса на объекты 1:1

Google
Sergey
23.04.2017
12:08:16
а это значит что можно выкинуть все формы и тупо юзать symfony/serializer

в противном случае ты получишь искаженный репорт об ошибках

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

оно так и проще

(меньше валидировать кейсов)

и гибче (валидация не зависит от контекста)

Andrew
23.04.2017
12:09:33
Кстати, апи через OptionResolver удобно делать и потом через какую-нибудь фабрику или named constructor создавать модель

Andrew
23.04.2017
12:09:58
Да? Мне понравилось

Sergey
23.04.2017
12:10:20
для простых проектов норм, для посложнее удобнее компоновать правила валидации через symfony validation

тупо больше возможностей

мой флоу в средней такой: валидирую request -> мэпим реквест на объект описывающий этот реквест (его можно генерить) -> контроллер (пока не могу от них избавиться но все еще пытаюсь) -> сервис который отвечает за операцию -> билдер объекта -> объект билдится и передается в репозиторий

Google
Sergey
23.04.2017
12:13:50
именованные конструкторы хорошо когда у тебя 1-2 аргумента или зависит от контекста

передавать массив - уже не так удобно

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

Valentin
23.04.2017
12:14:23
У меня примерно такое было в API: PUT /entity/{id} - Достаём из БД объект, иначе - 404 - Проверяем, что юзер может редактировать, иначе - 403 - Создаем FormType с этой сущностью в качестве initial data - Берем данные $request->request->all(), сабмитим их в этот FormType - FormType внутри себя использует валидатор, если есть ошибки - возвращаем их с кодом 400 - Пытаемся сохранить в базу (с optimistic lock, если не получилось - отвечаем 409) - Сериализуем обратно в JSON и отдаем с кодом 200

Sergey
23.04.2017
12:14:50
> - Достаём из БД объект, иначе - 404 PUT - идемпотентная операция. Если ничего небыло - надо сделать

Valentin
23.04.2017
12:15:08
Почему, PUT - по ID

Sergey
23.04.2017
12:15:11
короч я делал так как ты описываешь года два

Valentin
23.04.2017
12:15:12
Если не было - надо в POST

Sergey
23.04.2017
12:15:27
Почему, PUT - по ID
потому что PUT требует соблюдения идемпотентности

POST - не требует потому через него можно делать все

ну то есть если ты хочешь именно REST

Valentin
23.04.2017
12:16:11
Мне надо было по REST

Sergey
23.04.2017
12:16:12
то изволь соблюдать стандарты

Мне надо было по REST
я могу тебе целую лекцию прочитать

https://www.youtube.com/watch?v=2nELo4fJMNQ

даже прочитаю)

короч я в последний раз использовал описанный тобой флоу в 2013-ом

потом мы начали эксперементировать

Valentin
23.04.2017
12:17:53
Я когда-то тогда это и писал Может, в 2014

Sergey
23.04.2017
12:17:55
сначала отказались от форм и перешли на просто сериализацию/десериализацию

Google
Sergey
23.04.2017
12:18:11
потом вот год назад перешли на request objects

и дико удобно

Я когда-то тогда это и писал Может, в 2014
короч если коротко - в моем видосе я объясняю почему PUT для создания норм и почему POST для обновления норм а так же то что у тебя никогда не будет REST

Valentin
23.04.2017
12:21:41
Окей, посмотрю)

Sergey
23.04.2017
12:22:16
если после этого захочешь похоливарить - я буду только рад) всегда интересно послушать другую точку зрения

Valentin
23.04.2017
12:22:46
> Note: PUT replaces an existing entity. If only a subset of data elements are provided, the rest will be replaced with empty or null. Мне вот просто такое не норм было бы (это я полез посмотреть сейчас и в мане Spring нашёл). К тому же клиент был всего один, фактически - эпп на AngularJS, который мы же и писали

Sergey
23.04.2017
12:30:01
у спринга весьма своеобразное толкование вещей

в частности меня забавляет как они HATEOAS описывают

для меня было откровением узнать что для андройдщиков например HATEOAS бесполезен

Valentin
23.04.2017
12:37:26
Забавно. Надо бы ещё для расширения кругозора попробовать GraphQL – просто какой-нибудь demo project сделать. Смотрел на него где-то год-полтора назад – философия выглядит неплохо, но пока не попробуешь на практике – не ясно, как это соотносится с насущными потребностями при создании API

Вроде уже завезли в PHP библиотеку соответствующую

Sergey
23.04.2017
12:37:48
и не одну

Sergey
23.04.2017
12:37:59
я вот все надеюсь что на этих выходных допилю свой пример хотя бы до какой-то точки

Valentin
23.04.2017
12:38:00
Ещё лучше – есть из чего выбрать

Tatiana Fomicheva
23.04.2017
19:39:51
Здравствуйте! Я новичок в Симфони, пока что сделала только админку с базовым CRUD, и возможно у меня глупый вопрос

Но мне нужно реализовать вот такую примерно штуку



То есть есть 2 списка и надо сделать массовое проставление отметок пунктов из одного списка во второй

то есть например в одном списке участники, а во втором пройденные курсы, и надо после прохождения курса отметить его у всех участников

В какую сторону здесь вообще копать?

Google
Tatiana Fomicheva
23.04.2017
20:00:34
Буду благодарна за любые подсказки

Pavel
23.04.2017
20:16:22
Татьяна, уточните пожалуйста свой вопрос. Что конкретно вы не знаете как сделать?

Фронтед можете построить на http://rubaxa.github.io/Sortable/

Далее имея список отправить его на роутер симфони с id пользователей кому проставить и проставляете

вопрос то в чем?))

finkel
23.04.2017
21:34:48
да, вопрос слишком размытый

Tatiana Fomicheva
23.04.2017
23:40:45
да, вопрос получился очень размытым, потому что плаваю в архитектуре симфони

пока что пришла к тому что на первом этапе прописать в yml файле связи много ко многим, на основе них сгенерировать CRUD, и на основе него сделать кастомную аадминку с возможностью выбора в одних списках опций из других списков

Admin
ERROR: S client not available

Tatiana Fomicheva
23.04.2017
23:42:49
а потом уже в роутинге прописать экшны для массового редактирования

спасибо за внимание к моему вопросу и участие!

Yuriy
24.04.2017
05:49:40
Всем привет, хотел выбрать количество оцененых заявкок но в результате выборки получил не масив значенией а масив масивов значений: array (size=4) 0 => array (size=1) 1 => string '4' (length=1) 1 => array (size=1) 1 => string '7' (length=1) 2 => array (size=1) 1 => string '7' (length=1) 3 => array (size=1) 1 => string '6' (length=1) следовательно груповая функция count начала ругатся. Подскажите пожалуйста в чем я ошибся? $works = $query->select('IDENTITY(e.workId)') ->from('AvtorBundle:Estimated','e') ->where('e.dateAssignment IS NULL') ->andWhere( $query->expr()->notIn( 'e.workId', '3' ) ) ->groupBy('e.workId') ->getQuery() ->getArrayResult() // ->getSingleScalarResult() ; CREATE TABLE IF NOT EXISTS estimated ( id int(11) NOT NULL AUTO_INCREMENT, work_id int(11) DEFAULT NULL, avtor_id int(11) DEFAULT NULL, date_assignment datetime DEFAULT NULL , date_consent datetime DEFAULT NULL, PRIMARY KEY (id), KEY IDX_66B3529BB3453DB (work_id), KEY IDX_66B3529253C4123 (avtor_id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=36 ;

YR
24.04.2017
07:37:19
Доброе утро! Не подскажите , как в Доктрине сделать SQL_CALC_FOUND_ROWS ?

Алексей
24.04.2017
09:23:54
да, вопрос получился очень размытым, потому что плаваю в архитектуре симфони
Так тут не факт что Symfony вообще имеет какое-то отношение. Там выше приложен скриншот и не сказано, на каком этапе решения задачи возникла проблема.

YR
24.04.2017
09:35:11
https://www.youtube.com/watch?v=2nELo4fJMNQ
Спасибо большое за доклад!

Daniel
24.04.2017
15:58:49
Omit the @return tag if the method does not return anything; The @package and @subpackage annotations are not used.

Окей, вроде подрублен phpcs для Symfony2 в PHPStorm

Но оказывается он не форматирует код, а лишь варнинги показывает, если что-то не так

Можно ли настроить PHPStorm так, чтобы @package не ставился например?

Алексей
24.04.2017
16:00:23
Google
Daniel
24.04.2017
16:00:46
Т.е. шаблоны файлов?

Daniel
24.04.2017
16:01:10
А что за хоткей? При Ctrl + S?

Алексей
24.04.2017
16:01:18
Т.е. шаблоны файлов?
В шторме есть шаблоны создания файлов.

Daniel
24.04.2017
16:01:32
Ну-к, ща погуглю

Алексей
24.04.2017
16:01:32
Daniel
24.04.2017
16:01:39
Два раза спасибо

Алексей
24.04.2017
16:02:19
Плюс реформат еще по коммиту есть.

Daniel
24.04.2017
16:02:34
Тоже IDEшная тема?

Или какая то тулза на pre-commit?

Алексей
24.04.2017
16:03:29
Ну да, в окне коммита в шторме. Но можно и на хуки гита php-cs-fixer повесить например.

Daniel
24.04.2017
17:13:01
Ну да, в окне коммита в шторме. Но можно и на хуки гита php-cs-fixer повесить например.
Я так понял он не умеет читать файлы ruleset.xml и делать всё по ним, а —rules=@Symfony недостаточно

При проверке через php vendor/bin/phpcs ./src -p --encoding=utf-8 --extensions=php --ignore=Tests --standard=./vendor/escapestudios/symfony2-coding-standard/Symfony2 есть еще такие ошибки: FILE: /var/www/html/src/ChatBundle/Manager/ChatManager.php ---------------------------------------------------------------------- FOUND 1 ERROR AFFECTING 1 LINE ---------------------------------------------------------------------- 15 | ERROR | Missing class doc comment ---------------------------------------------------------------------- FILE: /var/www/html/src/ChatBundle/Controller/DefaultController.php ---------------------------------------------------------------------- FOUND 3 ERRORS AFFECTING 3 LINES ---------------------------------------------------------------------- 10 | ERROR | Missing class doc comment 12 | ERROR | Doc comment for parameter "$room" missing 15 | ERROR | Missing @return tag in function comment ---------------------------------------------------------------------- FILE: /var/www/html/src/ChatBundle/Topic/ChatTopic.php ---------------------------------------------------------------------- FOUND 5 ERRORS AFFECTING 5 LINES ---------------------------------------------------------------------- 15 | ERROR | Missing class doc comment 53 | ERROR | Missing function doc comment 70 | ERROR | Missing function doc comment 84 | ERROR | Missing function doc comment 117 | ERROR | Missing function doc comment ----------------------------------------------------------------------

А раньше вроде была в - - rules "phpdoc_params"

Dinar
25.04.2017
08:22:15
Можно ли настроить PHPStorm так, чтобы @package не ставился например?
Можно. Settings > Editor > File And Code Templates > Includes > PHP Class DOc Comment

Там убери сроку с Package всю

Daniel
25.04.2017
08:43:15
Спасибо

Еще вопрос есть по Process компоненту сф Реально ли отключить обработку $process->wait кэллбека и сразу отдать пользователю ответ, не вырубая сам процесс? Т.е. я в wait ожидаю, что у меня будет вывод текста "Введите капчу", как только я ловлю это событие в wait, я хочу не отрубать процесс, а просто говорить PHP что больше не надо ждать ничего, отдаю pid клиенту и все, а сам процесс так и требует ввода каптчи

Ох чую на пайтон все придется переписывать, чтобы python скрипты не запускать из PHP((

YR
25.04.2017
09:04:17
Доброе утро,не подскажите как можно проверять GET параметры в роуте, requirements не работает

Alexander
25.04.2017
09:06:01
Так: if ($request->get('page')) { smth(); }

Страница 194 из 1418