
Ivan
01.11.2016
11:28:32
я

Daniel
01.11.2016
11:28:50
М
Я видел как в sublime подрубали PHP Annotations

Дмитрий
01.11.2016
11:31:47
подскажите тогда, в настройках проекта в PHP указал framework папку vendor. Классы, методы подставлются, но сейчас учусь работать с БД и делаю как в примере
$repository = $this->getDoctrine()->getRepository('NVBSAccidentBundle:Kpiform');
$query = $repository->createQueryBuilder('p')
->where('p.year = ' . $year)
->orderBy('p.week', 'DESC')
->getQuery();
$week = $query->getResult();
createQueryBuilder и getResult phpstorm выделяет - метод не найден.
Может я должен был еще что-то подключить?

Google

Дмитрий
01.11.2016
11:32:06
запрос выполсняется

Aleksey
01.11.2016
11:32:40
надо указать какой тип $repository
в docblock
->where('p.year = ' . $year) — так не делайте
andWhere('p.year = :year')->setParameter('year', $year)

Дмитрий
01.11.2016
11:33:51

Aleksey
01.11.2016
11:33:58
и для $query тоже указать тип

Дмитрий
01.11.2016
11:34:13
что-то все так сложно :)

Daniel
01.11.2016
11:34:41
Потом будет DQL + RSM

Aleksey
01.11.2016
11:35:18
https://phpdoc.org/docs/latest/guides/docblocks.html

Дмитрий
01.11.2016
11:35:40
что за типы надо указать, в документации что-то про это ничего нет http://symfony.com/doc/current/doctrine.html

Aleksey
01.11.2016
11:35:46
а плагин symofny подключен?
классы

Google

Aleksey
01.11.2016
11:36:01
то что возвращает метод

Daniel
01.11.2016
11:37:03
Да и вроде репозитории созданы чтобы не делать так:
$repository = $this->getDoctrine()->getRepository('NVBSAccidentBundle:Kpiform');
$query = $repository->createQueryBuilder('p')

Aleksey
01.11.2016
11:37:28
:)

Daniel
01.11.2016
11:37:38
В контроллерах

Aleksey
01.11.2016
11:38:57
http://symfony.com/doc/current/doctrine/repository.html
вот так сделайте

Алексей
01.11.2016
13:19:16

Дмитрий
01.11.2016
13:20:20
тут ты прав, затупил :)

Алексей
01.11.2016
13:22:29
Статический анализ не всегда справляется с определением типов, поэтому докблоки помогают. Да и вообще, докблоки - правило хорошего тона. По ним и документацию генерить можно потом.

Ivan
01.11.2016
13:33:12
кто-нибудь сталкивался с созданием слагифайре с китайского на инглиш? )) транслит, в общем

Aleksey
01.11.2016
13:38:37
жоско :)

Ivan
01.11.2016
13:40:01
проще запретить вбивать иероглифы наверное) пусть названия латиницей вбивают:)

Aleksey
01.11.2016
13:40:38
[a-zA-Z0-9_\-]

Ivan
01.11.2016
13:42:49
Ага, две проверки, на клиенте и сервере. Ну и русский добавочно. Кстати, на симфони есть какие-нибудь решения для, чтобы не дублировать валидацию в двух местах?

Aleksey
01.11.2016
13:44:36
мм, ну вообще можно это все описать, если расширить формы
но я чот такого не встречал

Дмитрий
01.11.2016
13:58:27

Ivan
01.11.2016
13:58:46
верно

Aleksey
01.11.2016
13:59:05
всё таки только выборки
insert\update нужно делать не в репозитории

Google

Daniel
01.11.2016
13:59:24
Только репозиторий у тебя сразу есть, создавать его отдельно не придется, если ты все делаешь через Symfony Plugin в PHPStorm или консоль

Дмитрий
01.11.2016
14:00:31
ну я его сделал через консоль
php bin/console doctrine:generate:entities Bundle

Aleksey
01.11.2016
14:02:20
в сервисе
у вас должен быть тонкий контроллер

Дмитрий
01.11.2016
14:02:34
ох

Aleksey
01.11.2016
14:02:46
ну для начала можете в контроллере
:)

Дмитрий
01.11.2016
14:03:46
зачем все так запутано, почему нельзя с данными работать в одном классе

Aleksey
01.11.2016
14:04:08
а когда начнете делать большой проект -- поймете

Ivan
01.11.2016
14:04:13
хз, я в репозитории работаю

Дмитрий
01.11.2016
14:04:34
вот и готовлюсь к большому проекту и сказали его делать именно на симфони

Ivan
01.11.2016
14:05:23
а что значит insert\update в сервисе? для чего? есть пример?

Aleksey
01.11.2016
14:06:27
вообще да, я прогнал
фигачить все в репозиторий
перечитал патерны :(
простите за смуту
никому нельзя верить

Ivan
01.11.2016
14:07:05
паттерны та ещё мозговзрывная смесь:)

Дмитрий
01.11.2016
14:07:54
:)

Google

Aleksey
01.11.2016
14:09:06
http://martinfowler.com/eaaCatalog/repository.html

Daniel
01.11.2016
14:36:22
Я долго пытался понять назначения паттерна репозиторий, бросил книгу короче и стал ложиться спать
За секунду перед сном у меня появилось чувство падения и в эту секунду я реально осознал зачем это нужно
Вот реально
Пока читал не понимал
А как начал засыпать резко дошло до меня
Озорение
Только так можно понять паттерны

Ivan
01.11.2016
14:37:27
Ну да, полученную иформацию ещё нужно хорошенько прочувствовать и прожевать)

Daniel
01.11.2016
14:40:52
Чтобы понять паттерны надо выйти за рамки обыденного представления мира
Открыть 3 глаз
И так далее
Или просто на своей жопе испытать

Kirill
01.11.2016
18:13:43

Ivan
01.11.2016
18:15:30
ну это без порно) другое дело, что доп. сервисов для работы с данными не нужно

Дмитрий
02.11.2016
08:19:11
Ребята подскажите как правильно по феншуй реализовать такую штуку.
В разных бандлах надо получать информацию по годам и номерам недель записанных в таблице. Т.е. строить фильтр. Структура фильтра одинаковая, но только строится по данным разных таблиц.
Я думаю что нужен отдельный контроллер, который получает необходимые параметры и возвращает готовый фильтр. НАдо ли для этого контроллера прописывать маршруты чтобы его можно было вызвать из другого контоллера или все это дело надо оформлять в виде сервиса?

Aleksey
02.11.2016
08:24:23
делай сервис

Kirill
02.11.2016
08:27:10
да. вызывать маршруты контроллера из другого контроллера, не надо так

Дмитрий
02.11.2016
09:20:56
спасибо за помощь.
Из контроллера вызываю службу, ответ получаю.
Есть какие-то особенности при обращении к БД из службы?
Попробовал написать так же как и основном контроллере
$repository = $this->getDoctrine()->getRepository('NVBSAccidentBundle:Accident');
в ответ получил
Error: Call to a member function has() on null
В классе службы указал use NVBS\AccidentBundle\Entity\Accident;

Aleksey
02.11.2016
09:21:40
на другую строку явно ругается
has у тебя нет в этой строке

Дмитрий
02.11.2016
09:24:40
так кроме этой строки больше ничего и нет, если ее за комментить то все выполняется

Google

Daniel
02.11.2016
09:27:58
В методе getDoctrine вроде должен быть has, который вызывается от контейнера
Или get
$this-get('service_name')
Короче мне кажется че то не так с контейнером, а точнее тем, откуда он запрашивается
А
Сек
Погоди
Служба == Сервис?

Дмитрий
02.11.2016
09:29:06
ага

Daniel
02.11.2016
09:29:14
Ну так откуда у тебя там будет метод getDoctrine??
getDoctrine есть у базового класса контроллеров
Тебе в сервис нужно передать EntityManager

Дмитрий
02.11.2016
09:36:22
Спасибо, заработало

Aleksey
02.11.2016
09:43:42
в дефолте нет
брр
наоборот, ты можешь сделать контроллер сервисом

Daniel
02.11.2016
09:49:12
Мне кажется ты путаешься в определении контроллера

Aleksandr
02.11.2016
10:03:49
в сервис лучше засовывать репозиторий
контроллер - сервис - репа - сущность

Ivan
02.11.2016
13:38:29
Господа, есть контроллер с префиксом. Допустим
/**
*@Route("/admin/article", name="admin")
*/
controller Article() {
/**
*@Route('/show', name="article_show")
*/
public function showAction() {}
}
Есть ли возможность вызвать в шаблоне path("admin_article_show") или как-то так? В общем, чтобы не писать на каждый экшн Route(..., name="admin_article_show"). Возможно есть подход через конфиги и не я в ту степь копаю.