@symfony_php

Страница 105 из 1418
Yuriy
14.02.2017
10:35:36
"мейл ру свою либу какую то замутило для работы с excel" я подозреваю проблема не толко в екселе при заливке прайса проверяется наличие позиции в БД если ее нет вставляем новую, если есть обновляем, т.е. на каждую запись из вайла 2 запроса к БД т.е. если в файле будет 50 000 строк то запросов будет порядка 100 000

Muhammad
14.02.2017
10:37:56
Можно получить все записи из БД и просто проверять наличие нужной записи в нем

Yuriy
14.02.2017
10:38:25
Ринат за ссылку спасибо, да эту статью я уже читал

Ринат
14.02.2017
10:40:44
https://habrahabr.ru/post/148203/

Google
Ринат
14.02.2017
10:41:05
Вот тут про итераторы, когда файлы любого размера читаешь порциями

я так делал когда то

Yuriy
14.02.2017
10:42:02
идея, только по памяти могу обломатся, т.к. в результате выборки будет порядка 300 000 строк

Muhammad
14.02.2017
10:44:16
А записи могут удаляться из таблицы кем-то?

Или только добавляются

Yuriy
14.02.2017
10:44:47
тольк добавлятся

Alan
14.02.2017
10:50:27
10 мб вроде не так много)

Алексей
14.02.2017
10:57:49
Ну а чего по памяти не укладываться? Читать итераторами, не оставлять в памяти то, что записал в базу. И пофиг сколько там мегабайт файл.

Yuriy
14.02.2017
11:06:54
"10 мб вроде не так много)" после подгрузки всех данных из БД PHP скрипт использовал 830 Мб это еще дело до подгружаемого файла не доходило

Alan
14.02.2017
11:31:30
запросы в базу на пачки разбивать и коммитить самому пачками не помогает?

http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/transactions-and-concurrency.html

12.1.2. Approach 2: Explicitly¶

выключать автокоммит и самому коммитить пачки

Google
Daniel
14.02.2017
11:47:35
Норма использовать анонимные классы при тестировании команд (да и вообще чего угодно), которые наследуются от абстрактного класса? Т.е. прямо в тесте создаешь тестовую команду, которую наследуешь от нужного класса, в котором базовая логика работы и смотришь.

Типа вот

http://pastebin.com/qKc0dUEF

По сути вообще у нас будет версия PHP исключительно > 7.1

Sergey
14.02.2017
11:51:43
да ок. абстрактные классы тоже тестировать нужно

Daniel
14.02.2017
11:57:12
Прст интересно

Вот Mock объекты и Анонимные классы PHP 7

$stub = $this->createMock(SomeClass::class); $stub->method('doSomething') ->willReturn('foo');

И

$stub = new class extends SomeClass { protected function doSomething() { return 'foo'; } };

Sergey
14.02.2017
12:01:16
это не совсем моки. это стабы

Daniel
14.02.2017
12:01:35
Ох еп

Taras
14.02.2017
12:33:49
Ребята, что-то я туплю совсем... Есть объект предположим: class AbcdEntity { protected $a; protected $b; } Ну и значения: new Abcd(1, 2); Есть API которое работает через FormType и передается через json {"a"=1, "b"=2} Каким бы образом правильно сделать обработку, чтобы если передается {"a"=3}, b не обнулялось, а сохраняло значение... Насколько понимаю маппинг объекта должен быть какой-то, но по какому критерию чтобы оно не трогало не указанные в перечне поля? :(

Taras
14.02.2017
13:29:09
ага, а я вот не знал за $clearMissing.

в сабмите. Пасиба

сейчас попробую

ряботаит )

век живи, век учись

Google
Sergey
14.02.2017
22:26:04
https://github.com/symfony/symfony/pull/21553

Rodion
14.02.2017
22:54:53
ниче так

Sergio
15.02.2017
07:45:07
всем привет

блин

провал с тестовым по ходу(

"Вся логика в контроллере. Бизнес-логика должна быть в классах модели" вот что мне ответили...

Sergey
15.02.2017
07:52:00
залей хоть на гитхаб то что делал

а что за тестовое было?

Sergio
15.02.2017
07:52:38
залей хоть на гитхаб то что делал
bitbucket.org/seriy-coder/gateway-control

REST API система для контроля траффика

в 2х словах

небольшая веб морда+интерфейс для апи. + тестовые данные

Sergio
15.02.2017
08:08:28
и логика фильтрации данных для отображения, небольшая

Daniel
15.02.2017
08:20:33
Блина((( А почему столько функций-хелперов в ApiController?(((

Muhammad
15.02.2017
08:20:44
Часто используемые трюки и советы при работе с Git https://github.com/Imangazaliev/git-tips

Sergey
15.02.2017
08:21:52
так. ну во-первых я захожу в репос и вижу дефолтный readme от симфони, апдгрейд логи и прочую хрень. такое удалять надо. еще .idea папка должна быть под игнором, иначе такое ощущение что гит ты впервые видишь gw_data.sql - это должны бить миграции + вспомогательная команда симфони для наполнения данными, либо фикстуры. bash.exe.stackdump - под виндой что ли? поехали по сорсам. если тестов нет, то дефолтный тест контроллер тоже удалять нужно. в репосе не должно быть ничего лишнего. ApiController: во-первых у каждого ресурса должен быть свой контроллер Api/CompaniesController, Api/UsersController. учитывая что это обычный CRUD, который идеально ложиться на REST, то get это должен быть get вместо поста, delete/edit тоже свои методы хттп. да и вообще придерживаться семантики не мешало бы. коды ошибок хттп туда же. везде щас 200я возвращается самая первая функция с $retData[$retCount]['id'] = $company->getId();`должна быть `$retData[] = ['id' => ...]; иначе читабельность падает в разы и приходится искать что ты пытаешься мутировать в оригинальном массиве. а вообще ты свой сериализатор изобрел?) метод generate и все что с ним идет как я уже говорил - в отдельную cli команду. в крайнем случае отдельный контроллер + сервис к нему, если нужно из веба вызывать, что я сомневаюсь. sql запросы должны быть в репозиториях. мапинг реквест параметров на сущность сделан через жопу. для этого ж можно взять формы симфони или же сделать свой парам конвертер. валидация сделана через такую же жопу. у симфони есть свой валидатор, который работает более чем отлично. чем обусловлен выбор карбона? api php не хватало? я смотрю протащил еще в композер rest-bundle. он используется где-то? тут в принципе той логики как кот наплакал и если б сделал нормально мапинги, сериализации и валидации тебе б не пришлось даже в сервисы что-то уводить

Alexander
15.02.2017
08:22:01
bitbucket.org/seriy-coder/gateway-control
все списки постом? 0_о

Daniel
15.02.2017
08:24:52


Sergey
15.02.2017
08:25:33
а да, интервьювер будет еще ожидать документацию на твое апи и тесты)

если все еще и с докер конфигурацией будет, то вообще жирный плюс

Google
Sergio
15.02.2017
08:27:48
так. ну во-первых я захожу в репос и вижу дефолтный readme от симфони, апдгрейд логи и прочую хрень. такое удалять надо. еще .idea папка должна быть под игнором, иначе такое ощущение что гит ты впервые видишь gw_data.sql - это должны бить миграции + вспомогательная команда симфони для наполнения данными, либо фикстуры. bash.exe.stackdump - под виндой что ли? поехали по сорсам. если тестов нет, то дефолтный тест контроллер тоже удалять нужно. в репосе не должно быть ничего лишнего. ApiController: во-первых у каждого ресурса должен быть свой контроллер Api/CompaniesController, Api/UsersController. учитывая что это обычный CRUD, который идеально ложиться на REST, то get это должен быть get вместо поста, delete/edit тоже свои методы хттп. да и вообще придерживаться семантики не мешало бы. коды ошибок хттп туда же. везде щас 200я возвращается самая первая функция с $retData[$retCount]['id'] = $company->getId();`должна быть `$retData[] = ['id' => ...]; иначе читабельность падает в разы и приходится искать что ты пытаешься мутировать в оригинальном массиве. а вообще ты свой сериализатор изобрел?) метод generate и все что с ним идет как я уже говорил - в отдельную cli команду. в крайнем случае отдельный контроллер + сервис к нему, если нужно из веба вызывать, что я сомневаюсь. sql запросы должны быть в репозиториях. мапинг реквест параметров на сущность сделан через жопу. для этого ж можно взять формы симфони или же сделать свой парам конвертер. валидация сделана через такую же жопу. у симфони есть свой валидатор, который работает более чем отлично. чем обусловлен выбор карбона? api php не хватало? я смотрю протащил еще в композер rest-bundle. он используется где-то? тут в принципе той логики как кот наплакал и если б сделал нормально мапинги, сериализации и валидации тебе б не пришлось даже в сервисы что-то уводить
Ох, спасибо за разъяснения....

Карбон был в требовании. С формами, да, знаю натупил

Про 200ю уже тоже почитал, что это не верно

Danil
15.02.2017
08:30:54
у knp есть серия туторов по ресту в симфони. лично я достаточно из них подчерпнул

там и обработка ошибок, и тесты, и коды ответов, итд

Sergey
15.02.2017
08:31:25
да. там подписка стоит копейки, лучше просмотри все их уроки. получишь ап)

Danil
15.02.2017
08:31:44
да даже без подписки, все тексты и куски кода прилагаются

видео конечно проще смотреть, но, читая текст, больше вникаешь

Sergio
15.02.2017
08:33:21
Ок. Спасибо всем) тем более что мне сказали переделать "по нормальному" и, типа еще раз

Admin
ERROR: S client not available

Daniel
15.02.2017
08:33:29
О, ништяк!

Sergey
15.02.2017
08:33:37
ты близок к победе))

Daniel
15.02.2017
08:33:43
Рви!

Я бы еще под шторм подрубил проверку на Codingstyle symfony

Тока я пока не знаю как отрубать проверку эту на тестах

Rodion
15.02.2017
09:05:16
php-cs-fixer

Sergey
15.02.2017
09:54:34
https://github.com/symfony/symfony/pull/21553
@fes0r шо думаешь по этому поводу?

Rodion
15.02.2017
10:54:34
изи вопрос по доктрине: как избежать отложенных primary keys? в презе ocramius'а говорится только о том, что их рекомендуется избегать. проблема в том, что для использования id сущности необходимо делать flush(), чтобы id сгенерился. что по понятным причинам нехорошо.

Sergey
15.02.2017
10:55:00
генеришь на стороне клиента ключи и все

Google
Rodion
15.02.2017
10:56:06
при чем тут клиент? у меня его нет

Sergey
15.02.2017
10:56:19
ну твое приложение и есть клиент для базы)

Rodion
15.02.2017
10:57:03
а, ну это-то ясно

что генерить на клиенте

Sergey
15.02.2017
10:57:15
ну вот и генеришь себе GUID для айдих

Алексей
15.02.2017
10:57:15
UUID, например.

Sergey
15.02.2017
10:57:20
потом их используешь

Алексей
15.02.2017
10:57:23
У него же в презентации даже пример кода есть.

Sergey
15.02.2017
10:57:25
в монге так по-умолчанию все работает

Rodion
15.02.2017
10:58:10
черт, uuid монструозно будут выглядеть в урлах)

Алексей
15.02.2017
10:58:10
Или, если у твоих данных есть поля, делающие их уникальными, можно из них ключ составить в конструкторе при инициализации, например. Но такое бывает не всегда.

Andrew
15.02.2017
11:57:39
вопрос - как вы минифицируете ассеты, если проект сам по себе не требует ноды? На сервере ставить зоопарк из нодовских модулей и жать ассеты каждый раз при деплойменте как-то неинтересно, хранить минифицированые в гите тоже неинтересно, а жать на CI смысла нет, потому что деплоймент идет с гит репозитория, а не с артифактов

ассетик помянем злым громким словом

Aleksey
15.02.2017
11:59:37
в докер всё)

Andrew
15.02.2017
12:00:17
в докер всё)
кстати вариант, не подумал, спасибо

Sergey
15.02.2017
12:00:56
собирать проект в zip или разворачивать на сервере)

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