
Aleserche
06.01.2017
11:33:57
я замучаюсь формы лепить

Sergey
06.01.2017
11:59:54
что такое в doctrine ->select('b') ... название таблицы? или что это)
в sql обычно SELECT * перечисление полей

Алексей
06.01.2017
12:02:06
В DQL ты оперируешь не таблицами и полями, а сущностями и свойствами их. В данном случае b - это алиас какой-то сущности.

Google

Алексей
06.01.2017
12:03:17
Тебе сюда, короче:
http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/dql-doctrine-query-language.html
> A common mistake for beginners is to mistake DQL for being just some form of SQL and therefore trying to use table names and column names or join arbitrary tables together in a query. You need to think about DQL as a query language for your object model, not for your relational schema.

Sergey
06.01.2017
12:54:58
не пойму. уже и фикстуры сделал, загрузились, а ругается Key "type" does not exist as the array is empty - хотя есть
/**
* @ORM\Column(type="string")
*/
protected $type;
вызываю в twig так= {% block title %}{{ desc.type }}{% endblock %}

Алексей
06.01.2017
13:04:29
А ты уверен, что ты туда передал объект нужный, а не пустой массив? А то Twig тебе на массив ругается.

finkel
06.01.2017
13:05:20

Алексей
06.01.2017
13:05:39
Нет, Twig сам подбирает геттер, если свойство не публично.

finkel
06.01.2017
13:05:52

Алексей
06.01.2017
13:05:53
Он смотрит get и is.
Это можно прочитать в доке Twig - там алгоритм прописан, в какой последовательности он всё перебирает. Что делает если это массив, что если объект.

Sergey
06.01.2017
13:07:01
white screen of death

Алексей
06.01.2017
13:07:31

finkel
06.01.2017
13:07:35

Google

Sergey
06.01.2017
13:08:38
WHERE (p0_.pdate) = ? AND (p0_.pdate) = ? ["2016","12"] /// это что, он пишет тут
ладно, надо попроще запрос сделать)

Sergio
06.01.2017
13:37:15

Sergey
06.01.2017
13:38:32
да... но тут сразу выборка за период, надо с датой ещё работать. начну с простого, по id из бд тянуть. А потом возможно для месяца - одну страницу где будут данные за этот месяц, для года - другую и так далее. от простого к сложному
с sql проще, там есть YEAR, MONTH... а тут придётся поднапрячься

Sergio
06.01.2017
13:39:07
в pdate что находится?

Sergey
06.01.2017
13:39:16
2016-12-23
дата

Sergio
06.01.2017
13:39:36
не сработает выборка
LIKE только если

Sergey
06.01.2017
13:40:01
да и так не пойдёт.
$sql = "SELECT id, pdate, tovartype, tovar, kolvo, total
FROM pokupka WHERE MONTH(pdate) = ? AND YEAR(pdate) = ?";
старый запрос
вот его придётся потом обработать, он понимал 12 как месяц и 2016 как год

Алексей
06.01.2017
13:50:50

Sergey
06.01.2017
13:52:11
Да да, я посмотрел, ужаснулся, но потом буду использовать. пока к этому иду!
а как научить phpstorm не ругаться на Undefined namespace DataFixtures ... ?

Алексей
06.01.2017
14:08:00
Настроить неймспейсы в проекте?

finkel
08.01.2017
12:52:59
Подскажите, правильно я понял? Если я оформляю форму как сервис, то createForm(class::class) в контроллере, сразу использует сервис формы.
ну походу да, крутяк какой

Google

Алексей
08.01.2017
13:07:46
Учитывая, что ты объявляешь форму как сервис (значит нужны зависимости), возможно, имеет смысл вызывать её конкретно по имени сервиса как показано в примере. То, что у тебя сработало по имени класса - скорее всего, спасибо автовайрингу.

finkel
08.01.2017
13:23:23

Алексей
08.01.2017
13:24:25
Действительно, my bad.

finkel
08.01.2017
13:25:25
Вообще да, странно, у меня же 2 сервиса будет, с одним формтайпом, но разными зависимостями. Действительно, как понять какой сервис мне нужен, если тупо по названию класса форму создавать.
ладно, сейчас буду дальше разбираться

Алексей
08.01.2017
13:28:12
Там второй параметр одним из допустимых значений подразумевает строку. Я подозреваю, что туда не только имя класса можно передать, но и имя сервиса. Попробуй проверить.

finkel
08.01.2017
13:29:01

Алексей
10.01.2017
22:53:19
Вопрос по бестпрактисам есть.
Я вот тут рефакторю один старый код и хочу убрать из зависимостей сервисов EntityManager там, где он действительно не нужен и заменить большую часть таких зависимостей репозиториями определёнными как сервисы.
Вопрос вот в чём: там, где хотелось бы, всё же, делать persist() (не flush()) сущностей в сервисе - можно ли обойтись без инжекта менеджера тоже и как вообще в таких случаях поступают по-хорошему?

Sergey
10.01.2017
22:54:11
> как вообще в таких случаях поступают по-хорошему?
выносят персист в репозиторий

Алексей
10.01.2017
22:54:26
То есть, это нормальная практика? Я об этом думал, но сомневался.

Sergey
10.01.2017
22:54:37
нуууу а где по твоему надо делат персист?
или давай так.... в каких ситуациях надо делать персист?)

Алексей
10.01.2017
22:55:00
Нет, ну логично. Просто я подумал, что если его там нет из коробки - может быть на это причина.

Sergey
10.01.2017
22:56:03
Вот тебе мои бест практис относительно этого вопроса:
- репозитории не наследуются ни от кого. Это часть твоей модели предметной области и в идеале у них должен быть тоько метод add (где собственно можно делать персист)
- EntityRepository можно юзать только внутри твоего репозитория.
- EntitManager стоит юзать только внутри твоего репозитория
если тебе нужно сделать вбыорки - делаем сервис-обертку над entity manager-ом который предоставляет лишь часть функционала
(тип сегрегация интерфейсов и все такое)

Google

Алексей
10.01.2017
22:57:16
Угу. Хорошо. Это довольно схоже с тем, о чём я думал, но сомневался. Спасибо.

Sergey
10.01.2017
22:57:24
flush в контроллерах

Алексей
10.01.2017
22:57:41
Ну, про flush() понятно.

Sergey
10.01.2017
22:57:42
никаких save в репозиториях
вроде бы все

Алексей
10.01.2017
22:58:06
Под save() подразумевается обёртка на persist() и flush()?

Admin
ERROR: S client not available

Sergey
10.01.2017
22:58:16
все что используется не для добавления
flush дергать где-то внутри вообще грешно
так как "внутри" нет понятия о границах бизнес-транзкции

Алексей
10.01.2017
22:58:38
Это да.
Я уже на это успел в своё время напороться и убрал отовсюду flush().

Sergey
10.01.2017
22:59:39
а persist нужен только для добавления сущности в UoW так что... в методе add

Алексей
10.01.2017
22:59:49
Надо сказать, когда я первый раз увидел Symfony - куда я только этих флашей не напихал. Когда рефакторил - аж самому смешно и противно было.

Sergey
10.01.2017
22:59:57
))
все так делали)

Алексей
10.01.2017
23:00:49
И, собственно, натолкнулся на это дерьмо, когда начал разбираться, схера ли у меня одна простая вещь генерит столько запросов в БД. Это уже не говоря о том, что там никакой нормальной цельной транзакции не было... Страшно вспоминать.
@fes0r В общем, спасибо.

Daniel
11.01.2017
06:39:29
Всем доброе утро.
Завелся спор, скажите, прав ли я и поправьте если нет:
1)Модели в СФ - это абстрактное представление данных для организации общей структуры, которую можно использовать на уровне Doctrine? Причем только на уровне Доктрины.
2)Всякие ClassManager-ы, которые как правило могут инициализироваться как сервисы и используются в контроллерах, нужны лишь для организации какой-то кастомной логики создания определенного объекта. Типа UserManager - имеет метод createUser(), который хэширует в себе свойство plainPassword, которое на уровне Doctrine никуда в транзакции не попадает дальше представления.

da horsie
11.01.2017
06:42:18

Google

da horsie
11.01.2017
06:43:07
Т.е. вообще говоря модель не подразумевает какой-либо связи с доктриной или любой другой ОРМ

Дмитрий
11.01.2017
09:43:54
Всем привет.
Есть контроллер, добавлен в services
services:
date_service:
class: AppBundle\Controller\DateController
в DefaultController пытаюсь к нему обратиться и получаю You have requested a non-existent service "date_service".
$Date = $this->get('date_service');
что не так делаю?

Daniel
11.01.2017
09:59:12
Интересно, а зачем обарачивать контроллер в сервис, чтобы потом его юзать в другом контроллере?
Все что угодно может быть не так
например не подрубается yml файл, в котором ты определяешь сервис
В основном файле конфигурации

Дмитрий
11.01.2017
10:02:09
синхронизация не прошла, на сервере файл не обновился

Daniel
11.01.2017
10:05:36
А почему это в контроллере?

Алексей
11.01.2017
10:06:29

Daniel
11.01.2017
10:06:35
BundleName/Util/Week.php
Дыа, если зависимостей нет, то это тупо хелпер

Дмитрий
11.01.2017
10:07:24
хм

Daniel
11.01.2017
10:07:41
Какой смысл вообще был это в контроллер пихать!?

Дмитрий
11.01.2017
10:08:32
учимся :)

Daniel
11.01.2017
10:10:32
А тут в темку вопрос будет
Не раз видел, как в контроллере создается приватный метод, который создает какую-то кастомную форму
Это разве норма? И в оф. доках такие вещи есть вроде
И в контроллере типа вызывается
$this->createForm($this->getUserFilterForm(), $this->getUser())

Алексей
11.01.2017
10:11:52
Создание кастомных форм лучше делать в классе формы. Это можно видеть в symfony best practices.
А в доках это для повышения читаемости и упрощения показано, скорее всего.

Daniel
11.01.2017
10:12:08
А многие этого не понимают