
Sergey
05.05.2017
10:10:41
гребаные руби

Dinar
05.05.2017
10:11:10
Нахера вообще их изобрели :)

Алексей
05.05.2017
10:11:25
Давайте создадим петицию о том, что Ruby надо закопать!

Dinar
05.05.2017
10:11:50
Давайте :)

Google

Dinar
05.05.2017
10:11:56
А с рубистами что делать? :)

Sergey
05.05.2017
10:12:03
а они уже на го перешли все)

Алексей
05.05.2017
10:12:04
Пусть цветы носят.

Dmitry
05.05.2017
10:12:12
@Gaaarfild Закопать их)

Dinar
05.05.2017
10:12:25
Нельзя так :)
Пересадить их на ноду :)

Ivan
05.05.2017
10:41:15
однако мне нравится руби...
меня не бейте только

Dinar
05.05.2017
10:42:24
Это потому что ты ешь мясо. ;)

Ivan
05.05.2017
10:48:40
а вы?))

Muhammad
05.05.2017
11:36:25
Привет
Пытаюсь въехать в тему сервисов, но чет не особо получается. Например, мне нужно загрузить фото, сохранить оригинал и сделать несколько копий разных размеров. Где это должно происходить: в сервисе или в контроллере? Если в сервисе, то какие данные туда нужно передать?
Чтобы потом для этого можно было написать тесты. И нужно ли их вообще тестировать

Google

Алексей
05.05.2017
11:50:07
Зависит от конкретной логики.
То есть, я, например, саму логику пережатия вынес бы в один сервис (A). Подготовку же конкретного количества пережатых копий - в отдельный сервис (B), который дёргает первый (A) для пережатия.


Sergey
05.05.2017
12:02:16
далее уже надо смотреть на эти объекты с позиции "что они должны делать" и "кто будет этим пользоваться и зачем"
например есть у тебя объект чья задача загрузить фото. Что будут делать с этими фотками ему честно говоря пофигу. Профит в том что он реюабельный. Если у тебя поменялась задача и вместо 5-ти фоток надо загрузить 10 - ничего не меняется.
или к примеру есть задача - надо превьюшки генерить для фоток. Это тоже отдельная зона ответсвенности. Более того, может статься так что сейчас у тебя просто 5 вариантов а завтра для одной фотки надо делать 3 превьюшки такого размера, а для другой - 5 штук кропнутых квадратов
в итоге ты понимаешь что это тоже отдельный объект должен быть. Более того, можно еще сделать возможность подставлять разные реализации.
"контроллеры" к примеру объекты, чья задача обрабатывать запросы пользователя. Они декларируют control flow и только. Сами они ничего не умеют. Они как и положено хорошим "менеджерам" делигируют всю работу на других. Типа приходит такой запрос а ты "так, заресайзи эту фотку, а ты залей оригинал"
на этом его полномочия все
не зацикливайся на этой сегрегации вида "контроллеры, сервисы, сущности"
все есть объект, и объекты есть все.
а между "объектом" и "сервисом и как их дробить" пропущено очень много всяких штук аля SOLID, GRASP, LoD...
не знаю есть ли у тебя QA, но представь что их нет. Более того, git push origin master отправляет твой код на продакшен. То есть ты должен проверять все что ты делаешь "что бы не сломалось". Если у тебя все плохо с разделением ответственности, много дублирования, высокая связанность кода, то скорее всего ломаться будет часто (чем сложнее логика - тем чаще). А стало быть ты будешь тратить 80% своего времени на тупую верификацию "работает ли еще". Следовательно потратить 10%-20% от этих 20% времени разработки (это не 100% твоего рабочего времени. хорошо если 50%) сэкономит тебе безумное количество времени.


Dmitry
05.05.2017
12:18:17
Чет я запарился, может кто подскажет: как правильно прописать, чтобы на / - могли заходить все, а на все остальные адреса только авторизированные?
firewalls:
dev:
pattern: ^/(_(profiler|wdt)|css|images|js)/
security: false
main:
pattern: ^/
stateless: true
guard:
authenticators:
- api.token_authenticator
access_control:
- { path: ^/, roles: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/.+, roles: IS_AUTHENTICATED_FULLY }

Dinar
05.05.2017
12:19:33
Может еще $ поставить в конце первого правила? :)
Иначе второе правило вроде как под первое тоже подходит, не?
Точнее первое под второе

Dmitry
05.05.2017
12:26:43
блин, выдает постоянно exception "A Token was not found in the TokenStorage."
из-за stateless: true
что за хрень

Dinar
05.05.2017
12:27:58
А ты токен как передаешь?

Алексей
05.05.2017
12:28:15

Google

Dmitry
05.05.2017
12:28:52
в заголовках, но в первом случае он не нужен
сейчас поразбираюсь еще

Алексей
05.05.2017
12:29:48

Dmitry
05.05.2017
12:30:37
ага, смотрел - в листенере симфони проверяется есть ли в респонсе токен, если нету - исключение

Алексей
05.05.2017
12:32:06
Ну так ты когда пишешь свою аутентификацию, ты же должен из заголовка (или из query string) вытащить токен-строчку, найти юзера, создать объект Token и положить его правильным образом в сторедж. Подробнее смотри где-то в custom authentication provider.
https://symfony.com/doc/current/security/custom_authentication_provider.html#the-listener

Dmitry
05.05.2017
12:35:01
Вот так вроде бы правильно все отрабатывает:
firewalls:
dev:
pattern: ^/(_(profiler|wdt)|css|images|js)/
security: false
default:
pattern: ^/$
anonymous: ~
main:
stateless: true
guard:
authenticators:
- api.token_authenticator
access_control:
- { path: ^/.+, roles: IS_AUTHENTICATED_FULLY }

Muhammad
05.05.2017
12:48:12
А что если в сервисе возникла ошибка? Например, разрешение изображения слишком большое и т.д. Исключения на каждый случай и try/catch в контроллере?

Sergey
05.05.2017
12:57:53
исключения штука такая - это значит что "тут мои полномочия все"
что ты сделаешь к примеру если у тебя возникло такое вот исключение?

Sergey
05.05.2017
12:58:35
максимум красивую страничку с ошибкой покажешь (или красивый json) да в лог запишешь

Dinar
05.05.2017
12:58:35
Ну иногда исключения используют как способ управления приложением тоже

Sergey
05.05.2017
12:58:44
хотя так делают да

Dinar
05.05.2017
12:58:51
Я не спорю. :)

Sergey
05.05.2017
12:59:04
пример
есть сервис который шлет запросы на внешний сервис
и по таймауту кидает ошибку мол "не смог законнектиться за 5 секунд"

Google

Sergey
05.05.2017
12:59:41
тут уже можно повестить сверху обработчик такого класса ошибок и если запрос идемпотентный - тупо повторять его
у меня так все взаимодействие с внешними API организовано
3 попытки с таймаутами в 3 секунды

Алексей
05.05.2017
13:17:55
Всем доброго времени суток) Вопрос от новичка по настройкам JMS serializer в FOSRestBundle , где в конфигах можно включить проверку max_depth ?

Evgenii
05.05.2017
13:23:16
там же в контроллере это можно сделать
http://jmsyst.com/libs/serializer/master/cookbook/exclusion_strategies#limiting-serialization-depth-of-some-properties

Алексей
05.05.2017
13:29:14
не хочу каждый раз дергать сериалайзер вручную

Admin
ERROR: S client not available

Алексей
05.05.2017
13:30:02

Алексей
05.05.2017
13:34:57
а можно по подробнее для тех кто в танке? я ставлю аннотации типа @Serializer\MaxDepth(0) но они работают только если вручную запустить сериалазер с контекстом, вот так: SerializationContext::create()->enableMaxDepthChecks()

Алексей
05.05.2017
13:36:01
Видимо, он сконфигурирован так. Точнее не скажу, сорри, т.к. я его вне JMSSerializerBundle не юзал.

Алексей
05.05.2017
13:37:51
может кто из знатоков fosrestbundle ткнет носом в доки по настройке сериалайзера , я не смог нагуглить нужного(
у меня в конфиге fos_rest там уже есть настройка подобного плана - serialize_null: true
может там и типа check_max_depth можно что то прописать..
уже нашел решение с помощью аннотаций в контроллере, может кому пригодится @FOS\RestBundle\Controller\Annotations\View(serializerEnableMaxDepthChecks=true)

Sergey
05.05.2017
15:14:20
лучше это на уровень конфига выносить
аннотацию и забыть можно

Ivan
05.05.2017
19:32:48
ребят, а как вы дебажите кривые sql запросы?
у меня DQL большой доктрина ругается.
А информационные ошибки типа
Expected end of string, got '3'
информации толком не несут
ну и трейс както до балды

Andrew
05.05.2017
20:18:20

Sergey
05.05.2017
20:36:07

Google

Sergey
05.05.2017
20:36:43
если ты DQL пишешь строкой, то как бы тогда форматируй не в одну линию, будет проще

Pavel
05.05.2017
20:43:55
http://symfony.com/blog/symfony-community-survey-2017-results
20% разрабов юзают винду
72% юзают Phpstorm
82% .юзают симфони для сайд и персональных проектов

Muhammad
06.05.2017
13:21:04
Кто-нибудь пробовал использовать Pug (Jade) с симфони?

Sergey
06.05.2017
13:28:05
сейчас webstorm/phpstorm позволяют удобненько редактировать html (профита от jade нет) а twig и так норм

Roman
06.05.2017
13:30:28

Jan
07.05.2017
09:16:34
@okwinza а есть ли в Sylius какой-то стандартный способ избавиться от Translatable и таблиц *_translation не переписывая сущности?
Просто язык будет всего один и то, как сейчас всё устроено не очень удобно.

Oleg
07.05.2017
09:40:20
Там весьма глубокая интеграция мудьтиязычности чтоб ее просто взять и выбросить
У нас тоже один язык и не могу сказать, что прямо совсем неудобно


Evgenii
08.05.2017
11:40:38
https://leanpub.com/a-year-with-symfony-ru
Release Notes
Привет всем!
Я рад сообщить, что наконец, спустя 9 месяцев после начала работы над переводом, книга "Один год с Symfony" переведена на русский язык!
Я еще буду работать на некоторыми исправлениями стилистики, грамматики и пунктуации, поэтому обновления еще планируются.
Но вы уже смело можете рекомендовать этот перевод к прочтению junior-разработчикам (просто необходимо!), middle-разработчикам (может быть полезно), а я также знаю некоторых "senior-разработчиков", которым тоже не помешало бы прочитать эту книгу =)))
Удачных вам проектов и Happy coding!
С уважением,
Дмитрий Быкадоров.

Lezhnev
08.05.2017
11:57:10
+1
только букв можно было бы поменьше для анонса. Но в любом случае Дмитрию спасибо за труд и за примечания переводчика тоже

Dmitriy
08.05.2017
12:45:07
?

Sergei
08.05.2017
13:38:24
передаю в доктрину в качестве параметра строку
"abcd\test\resource::%"
Но в запросе оказывается "abcd\\test\\resource::%"
Как можно сказать не делать этого экранирования ибо для mysql это разные строки и по второй он не ищет.

Oleg
08.05.2017
14:25:59
Запили больше контекста

Sergei
08.05.2017
16:16:39
Вообщем нашел проблему. Это экранирование впринципе нельзя и не надо отключать. Но при написании миграции мускуль экспортнул без экранирования. При выполнении подумал что оно есть. В итоге срезал слеши.