These are chat archives for LaravelRUS/chat

13th
Jul 2015
slider23
@slider23
Jul 13 2015 03:13
Дай определение активнго пользователя.
Роман Сохарев
@greabock
Jul 13 2015 04:22
@slider23 судя по всему, is_active = 1 =)
Роман Сохарев
@greabock
Jul 13 2015 04:36
есть тут наркоманы по posgres?

в общем, задача:

повторить mysql-поведение "ON DUPLICATE KEY UPDATE" для postgresql 9.3 наименее извращенным способом

This message was deleted
Andrey Helldar
@andrey-helldar
Jul 13 2015 05:57
Всем привет!
Подскажите, есть ли в базовом наборе Лары 5.1 функция реализации постраничной навигации?
Доку курю, пока не нашел О_о
Роман Сохарев
@greabock
Jul 13 2015 06:02
@AndreyHelldar а гугл куришь? Первая же ссылка по запросу laravel 5 pagination ведет прямо куда надо
Andrey Helldar
@andrey-helldar
Jul 13 2015 06:03
@greabock у меня плохо с русско-английским переводом))
пробовал искать по запросу "page navigation laravel 5"
))
Роман Сохарев
@greabock
Jul 13 2015 06:03
печалька...
Andrey Helldar
@andrey-helldar
Jul 13 2015 06:03
@greabock ну как-то так))
Роман Сохарев
@greabock
Jul 13 2015 06:04
@AndreyHelldar
Andrey Helldar
@andrey-helldar
Jul 13 2015 06:07
@greabock Спасибо!
Ввел запрос "laravel 5 pagination" и уже курю доку))
P.S.: у меня беда с русско-английским переводом.
Направление англо-русский нормально читаю))
symbios_zi
@symbiosss
Jul 13 2015 07:59
всем привет. Посоветуйте как лучше. Есть Модель объект, который может быть квартирой, домом или комнтой. У всех типов почти одинаковые свойства, за исключением может быть одного. Как лучше поступить, разделить на 3 модели эту?
или внедрить модель типов?
Илья
@iliyaZelenko
Jul 13 2015 08:06
Я создал бы таблицу объектов, в ней 2 столбца -свойства(json) и тип(квартира, дом или комната). В модели работал бы с этой таблицей.
symbios_zi
@symbiosss
Jul 13 2015 08:11
@iliyaZelenko отдельную таблицу типов со свойствами? и связать с моделью, объектов?
Илья
@iliyaZelenko
Jul 13 2015 08:18
То есть тебе не нужно создавать под отдельный тип новую таблицу, все будет хранится в одной таблице, где различать ты будешь по столбцу в котором будет тип.
Maxim
@Big-Shark
Jul 13 2015 08:19
@iliyaZelenko плохой вариант)
Илья
@iliyaZelenko
Jul 13 2015 08:22
@Big-Shark скажи свой, интересно.
Илья
@iliyaZelenko
Jul 13 2015 08:30
@Big-Shark в чем мой плохой?
Maxim
@Big-Shark
Jul 13 2015 08:30
@iliyaZelenko с поиском будут проблемы
тут есть 3 или даже 4 вариант, и нужно выбирать под ситуацию
1 3 таблички
2 EAV
3 табличка со всеми полями и полем энум
4 табличка с одинаковыми полями и джесон полем
а еще даже вариант 5 можно сделать, это связи с другими табличками
symbios_zi
@symbiosss
Jul 13 2015 08:39
@Big-Shark что за 3 таблички?
Илья
@iliyaZelenko
Jul 13 2015 08:39
Квартиры, домы, комнаты
symbios_zi
@symbiosss
Jul 13 2015 08:39
мутная затея
Maxim
@Big-Shark
Jul 13 2015 08:44
@symbiosss я и не говорил что она хорошая, я просто написал все доступные варианты)
symbios_zi
@symbiosss
Jul 13 2015 08:50
@Big-Shark а с json полем расскажи подробнее
Maxim
@Big-Shark
Jul 13 2015 08:53
@symbiosss ну у тебя есть основные поля одинаковые для всех, по которым у тебя будет работать поиск, а в дополнительном поле ты можешь хранить кстомную информацию уже разную под разные типы так сказать
Илья
@iliyaZelenko
Jul 13 2015 08:56
Только поиск по доп. полю не будет работать.
symbios_zi
@symbiosss
Jul 13 2015 09:05
тогда мне кажется лучше сделаю enum поле для типа, и общие поля. У каждого типа свои поля будут заполняться
Илья
@iliyaZelenko
Jul 13 2015 09:11
Что вы думаете про IDE Netbeans?
slider23
@slider23
Jul 13 2015 09:13
phpstorm лучше.
в нетбинсе очень тормозной дебаггер
sitdirek
@sitdirek
Jul 13 2015 09:15

Добрый день.
У меня стоит задача реализовать POST-прием на сайте от 1С.

Открыл route для приема запросов. В middleware/VerifyCsrfToken.php выключил верификацию для нужных url:

private $openRoutes = ['xml/desk/1', 'xml/desk/2'];
public function handle($request, Closure $next)
    {
        foreach($this->openRoutes as $route) {

            if ($request->is($route)) {
                return $next($request);
            }

        }
        return parent::handle($request, $next);
    }

Но все равно в 1С приходит подобный ответ:
TokenMismatchException in project/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/VerifyCsrfToken.php line 46

Alexander Popov
@ruelephant
Jul 13 2015 09:24
дебаг роута включи
лучше в IDE по точке остановке
This message was deleted
This message was deleted
а тфу
FairHypo
@FairHypo
Jul 13 2015 09:37
Всем доброго дня. На прошлой неделе интересовался здесь, как же все таки установить vagrant и homestead под laravel, получил некие полезные указания и ссылку на видео. Немного помучался, но все таки сделал этот этап. Теперь вот какой момент. Я же поднимаю виртуальную машину, в ней устанавливаю композер, с помощью него устанавливаю там ларавел. делаю новое приложение, например блог. И даже могу зайти посмотреть в папочку поглядеть что и как (через гит). Но в поиске по компу не могу найти, где эти папки лежат. И соответственно, как до них добраться, чтобы что-то посмотретЬ, настроить, отредактировать. Вообще изучать фреймворк. В общем, помогите пожалуйста нубу, в очевидном виде ответ в мануале не нашел.
symbios_zi
@symbiosss
Jul 13 2015 09:39
@FairHypo начни с изучения устройства веб сервера
slider23
@slider23
Jul 13 2015 09:41
Пути прописываются в Homestead.yaml, смотри по тем путям, где у тебя сайт находится.
symbios_zi
@symbiosss
Jul 13 2015 09:43
```
FairHypo
@FairHypo
Jul 13 2015 09:43
Вообще если я какой-то стартовый вариант приложения создал (в моем случае блог), по адресу 127.0.0.1:8000 он же должен уже как-то отображаться или по-прежнему No input file specified ? Подозреваю, что у меня именно с путями где-то проблема ага
FairHypo
@FairHypo
Jul 13 2015 10:01
upd, установил теперь приложение куда надо, все в папочке появилось. спасибо за наводку. теперь буду искать, как отобразить в браузере (а оно вообще как-то видно? в смысле стартовое приложение).
NickPanda
@NickPanda
Jul 13 2015 10:46
Всем привет!
Я пра, что Auth::check() проверяет авторизацию методом, если присутвует массив с данными о пользователя и сверяет по id верно?
Хотел узнать, как можно чтобы он проверял также наличие активный/не активный пользователь
Как это делать в момент авторизации я понял
тут имеется ввиду что при авторизации делается isActive
Но, хотелось бы при проверке авторизован ли пользователь, чтобы он проверял данные активности пароль и тд, просто как я понял из коробки работает если id сходитя
FairHypo
@FairHypo
Jul 13 2015 11:00
@slider23 такой момент еще интересный. Когда ставил хомстед в процессе была создана папка Homstead и рядом папка .homstead, вот в каждой из них есть файл Homestead.yaml, правда в папке Homstead он лежит в подпапках, а в .homstead сразу в корне. Я поправил оба, как мне надо было, и проблем не было. Сейчас правлю оба одинаково - но непонятно, на какой ориентироваться все таки.
NelinD
@NelinD
Jul 13 2015 11:01
@FairHypo эксперимент спасет тебя
butschster
@butschster
Jul 13 2015 11:02
@NickPanda самый простой вариант после авторизации проверять у текущего пользователя активность и вслучае проблем разавторизовывать
FairHypo
@FairHypo
Jul 13 2015 11:03
@NelinD эксперимент не сильно помогает. Где-то сохраняется кэш, который не чистится ctrl+F5, и поэтому обновления страницы не дают результата вообще без перезагрузки хост машины (перезапуск вагранта не помогает).
NickPanda
@NickPanda
Jul 13 2015 11:03
@butschster Ну, я делаю так что при авторизации он проверяет включен или не включен...если включен то происходит авторизация, в противном случае. ошибка
@butschster Я же хочу там где должно выводится авторизованным проверять , но как я понял check лишь по id сверяет(
FairHypo
@FairHypo
Jul 13 2015 11:04
сейчас попробую перезагружать и экспериментировать. Но это как-то не айс. Думал, вдруг кто знает ответ по опыту. Laravel ставил пятый, виртуалбокс и вагрант последние, хомстед тоже.
NickPanda
@NickPanda
Jul 13 2015 11:13
Кстати, такой вопрос кто знает как вывести записи за последние 24 (36 и тд) часов)
Нашел метод в доках Mysql WHERE TIMESTAMPDIFF( HOUR , created_at , NOW( ) ) <=136
Но , laravel это не воспринимает, пробывал where(DB::raw('TIMESTAMPDIFF(HOUR,created_at , NOW()) <= 136')) , но в зпрос он добавляет is null и выводится пустой массив
Кто знает как лучше реализовать это чудо юдо?
NelinD
@NelinD
Jul 13 2015 11:17
@NickPanda
->where('created_at', '>=', Carbon::now()->subDays(2)->toDateString())
NickPanda
@NickPanda
Jul 13 2015 11:21
@NelinD Да уже, напал на след Карбона, но мне бы понять что это значит

@NelinD

whereBetween('created_at', array(Carbon::now()->startOfDay(), Carbon::now()->endOfDay()))

нашел такое

NelinD
@NelinD
Jul 13 2015 11:24
@NickPanda с пониманием основ логических выражений в другой чат
NickPanda
@NickPanda
Jul 13 2015 11:24
@NelinD я про выражения аля subDays()
NickPanda
@NickPanda
Jul 13 2015 11:26
@NelinD я верно понимаю, что subDays накидывает 2 дня, и выводит (toDateString) и далее сравнивает
NelinD
@NelinD
Jul 13 2015 11:27
@NickPanda по ссылке ты не ходил
@NickPanda alt
NickPanda
@NickPanda
Jul 13 2015 11:28
Я туда ходил(
@NelinD значит так subDays () это откидывает на несколько дней назад а subDay на один день назад верно , а уже addDay на один день вперед а addDays(2) на 2 дня вперед
@NelinD Спасибо кажется разобрался)))))))))))))
NickPanda
@NickPanda
Jul 13 2015 11:34
@NelinD Только мне кажется или надо на 1 день отматывать назад (либо 2 дня это уже будет 48 часов) или я ошибаюсь?
NickPanda
@NickPanda
Jul 13 2015 11:42
@NelinD и еще мне кажется что мне не понадобится subDay? можно просто брать именно текующу дату без времени и выводить, так что Спасибо извиняюсь если тупил(
Andrey Fedotov
@protectedfor
Jul 13 2015 11:45
Подкажите где добавлять ассеты? \Assets::add('js/snap.js');, в методе контроллера? Просто, думаю для этого есть другое решение.
NickPanda
@NickPanda
Jul 13 2015 11:54
@protectedfor $url = asset('img/photo.jpg'); или так или я не совсем понял о чем речь(
weber3
@weber3
Jul 13 2015 11:55
Подскажите как сделать, чтоб на локальном хосте открывался laravel по названию папки проекта к примеру laravelapp, а не localhost/laravelapp/public
NickPanda
@NickPanda
Jul 13 2015 11:57
@weber3 а какой локальный у тебя хост?
weber3
@weber3
Jul 13 2015 11:59
127.0.0.1 установил на wamp
NickPanda
@NickPanda
Jul 13 2015 12:01
@weber3 а у тебя один сайт на нем или несколько?
weber3
@weber3
Jul 13 2015 12:02
обясню последовательность действий: установил wamp, развернул laravel 5.1 через компосер в директорию wamp/www/laravelapp все
NickPanda
@NickPanda
Jul 13 2015 12:03
@weber3 на wamp только ларавел стоит или есть еще что?
weber3
@weber3
Jul 13 2015 12:03
нет
только laravel
Dmitry Shlyomin
@dmitry1337
Jul 13 2015 12:10
Народ, помогите новичку настроить рабочий воркфлоу: как правильно разрабатывать новые версии приложения? Есть site.com и dev.site.com, все они хостятся в /var/www/(site|dev), правильно будет, если я буду разрабатывать на dev.site.com, как только новая версия готова => деплой в ветку мастер, оттуда в продакш? Если нет, то как правильно? Заранее благодарен.
NickPanda
@NickPanda
Jul 13 2015 12:16
@dmitry1337 ну чисто на словах скорее всего правильно, на деле я хз как это вообще делается, я прав что речь о гите?
Dmitry Shlyomin
@dmitry1337
Jul 13 2015 12:17
@NickPanda да, просто я с гитом еще не знаком, вот хочу наладить процесс, а то ручками по готовности переносить файлы очень глупо/геморно
NickPanda
@NickPanda
Jul 13 2015 12:18
@dmitry1337 ну на словах вроде расписано, верно...как это делать я бы и сам хотел узнать)
Alexander Popov
@ruelephant
Jul 13 2015 12:20
хм
Alexander Popov
@ruelephant
Jul 13 2015 12:30
@dmitry1337 правильно
у вас еще 2 бесплатных совета
@dmitry1337 ручками перенос самое идеальное, не порушишь
потом дорастешь до билд систем, покажут :)
еще 1 совет, бесплатно, без смс!
NickPanda
@NickPanda
Jul 13 2015 12:42
@NelinD Спасибо за наводку на карбон, но я переписал иначе)
Vadim Shashin
@Enapiuz
Jul 13 2015 12:52
Осторожно - говнокод.
Таким образом редиректю Redirect::to($path)->with('no_double_redirect', '1')->send();
Таким образом проверяю Session::pull('no_double_redirect');
В итоге получаю null. ЧЯДНТ?
Alexander Popov
@ruelephant
Jul 13 2015 12:59
я тут глянул быстро
@Enapiuz похоже он эту переменную не в сырую сессию кладет, а серилизует и кладет
NelinD
@NelinD
Jul 13 2015 12:59
@ruelephant развидь
Alexander Popov
@ruelephant
Jul 13 2015 12:59
@NelinD 10$
это залог моего молчания
ruelephant @ruelephant шантажирует @NelinD
Vadim Shashin
@Enapiuz
Jul 13 2015 13:04
@ruelephant хм, что-то я все равно не догоняю, как мне это тогда полноценно сунуть в сессию и достать
Alexander Popov
@ruelephant
Jul 13 2015 13:04
кстати еще вариант
ты же кладешь во флеш считай память
оно перетрет при сладующим запросе
ты точно не получаешь null в результате что несколько раз прыгнуло?
Vadim Shashin
@Enapiuz
Jul 13 2015 13:06
Один редирект, вся эта хрень в одном методе. Я даже на всякий случай гет параметр передаю при котором делаю dd() сессии и наблюдаю нифига
Может попробовать возвращать это все из метода контроллера, а не send делать
JhaoDa
@jhaoda
Jul 13 2015 13:09
@Enapiuz а у тебя сейчас что, не из контроллера это делается?
Vadim Shashin
@Enapiuz
Jul 13 2015 13:10
@jhaoda в контроллере, лишние слова пишу :smile: просто send помогает, когда не из контроллера делаешь такую хрень, хоть это и не очень красиво.
Alexander Popov
@ruelephant
Jul 13 2015 13:11
давай уточним еще один момент
JhaoDa
@jhaoda
Jul 13 2015 13:11
@Enapiuz «такую хрень» нельзя делать не из контроллера
Alexander Popov
@ruelephant
Jul 13 2015 13:11
версия лары O_o
Vadim Shashin
@Enapiuz
Jul 13 2015 13:11
5.0
@jhaoda и не делаю :smile: ну разве что только в одном месте, чтобы в случае ошибки перекинуть пользователя с мобильной версии сайта на большую при условии, что на большом такая страница есть.
Alexander Popov
@ruelephant
Jul 13 2015 13:19
хрен его
я не пользуюсьсь такой ересью :)
вся бизнес логика на клиента, на сервере только JSON api по ресту
NickPanda
@NickPanda
Jul 13 2015 13:21

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

Так вот @if(empty($name )) - этот код говорит что переменная пустая,
но зная php то ведь можно написать @if(!empty($name )) - значит переменная не пустая, но BLADE это не воспринимает, или я что то сделал не так

Alexander Popov
@ruelephant
Jul 13 2015 13:22
почему не воспринимает то?
должОн
но лучше делай через isset
если тебе важно существование переменной
NickPanda
@NickPanda
Jul 13 2015 13:23
@ruelephant у меня массив,
@if(!empty($name ) говорит что он пустой, а надо чтобы говорил наоборот
Alexander Popov
@ruelephant
Jul 13 2015 13:24
а что в $name
NickPanda
@NickPanda
Jul 13 2015 13:25
@ruelephant выборка из бд
Alexander Popov
@ruelephant
Jul 13 2015 13:25
кэп блин, покажи
дамп
NickPanda
@NickPanda
Jul 13 2015 13:26
var_dump ?
Alexander Popov
@ruelephant
Jul 13 2015 13:26
можно
в обоих случаях, когда оно есть, и когда нет
NickPanda
@NickPanda
Jul 13 2015 13:27
object(Illuminate\Database\Eloquent\Collection)#229 (1) { ["items":protected]=> array(0) { } } тут нет
Alexander Popov
@ruelephant
Jul 13 2015 13:28
это чудо бро!
созывайте большой совет
@slider23 @jhaoda @NelinD и я
NickPanda
@NickPanda
Jul 13 2015 13:28
@ruelephant да что не так то?
Alexander Popov
@ruelephant
Jul 13 2015 13:29
произошло чудо
стандартная функция ничего не знает о коллекции
JhaoDa
@jhaoda
Jul 13 2015 13:29
@NickPanda может пора доки по РНР снова читать?
NickPanda
@NickPanda
Jul 13 2015 13:30
@jhaoda @ruelephant самое главное если не ставить ! ? а просто написть empty ? то он будет считать пустым!
JhaoDa
@jhaoda
Jul 13 2015 13:30
Что делает empty()? Она проверяет, не пустая ли переменная. Что такое «пустая» в понимании empty()?
Alexander Popov
@ruelephant
Jul 13 2015 13:30
не цитируй доку!
кошунит
NickPanda
@NickPanda
Jul 13 2015 13:30
array() (пустой массив) это он считает пустотой!
и это я знаю!
JhaoDa
@jhaoda
Jul 13 2015 13:31
@NickPanda у тебя переменная содержит объект.
Внимание, вопрос: пустая ли переменная, содержащая объект Collection?
Внимание, правильный ответ...
Alexander Popov
@ruelephant
Jul 13 2015 13:31
помощь зала!
JhaoDa
@jhaoda
Jul 13 2015 13:32
@NickPanda нууууууу?
Alexander Popov
@ruelephant
Jul 13 2015 13:32
звонок другу!
у вас ТРИ ПОДСКАЗКИ
вопрос на 100 рублей
NickPanda
@NickPanda
Jul 13 2015 13:33
@ruelephant @jhaoda
if(!empty($name)){echo "НЕ ПУСТО"}
сделал так не в шаблоне, и он сказал что НЕ ПУСТО
JhaoDa
@jhaoda
Jul 13 2015 13:33
Ясно, правильного ответа мы не получим...
ruelephant @ruelephant пошел с горя пропивать 100 рублей
Alexander Popov
@ruelephant
Jul 13 2015 13:34
это была программа "кто хочет стать программистом"
JhaoDa
@jhaoda
Jul 13 2015 13:35
@NickPanda давай на аналогиях. У тебя есть коробка-переменная. В коробке лежит орех-объект. Орех внутри пустой, одна скорлупа. Вопрос: пустая ли коробка?
Alexander Popov
@ruelephant
Jul 13 2015 13:35
@NickPanda а ты контекст проверил да?
@jhaoda аналогии идут по двойному тарифу, для тупых. Переключаем? :)
Maxim
@Big-Shark
Jul 13 2015 13:35
@ruelephant а если я отвечу правельно я получу 100 рублей?
Alexander Popov
@ruelephant
Jul 13 2015 13:36
@Big-Shark пропито!
поздно проснулся
и вообще для вас надо вопросы со звездочкой, а то не честно
NickPanda
@NickPanda
Jul 13 2015 13:37
@Big-Shark @ruelephant @jhaoda так, все разобрался, он всегда будет говорить что там что то есть, так кк это объект, следовательно, чтобы понять если записи или нет, надо посчитать count? и если там больше 0 то выводить что записи есть!
Maxim
@Big-Shark
Jul 13 2015 13:37
но я же ..... плачет и пьет водку
JhaoDa
@jhaoda
Jul 13 2015 13:38
@NickPanda бинго!
Alexander Popov
@ruelephant
Jul 13 2015 13:38
только count там не очень кашерно
опять же стандартный
JhaoDa
@jhaoda
Jul 13 2015 13:39
@ruelephant а как надо, ну-ка?
Alexander Popov
@ruelephant
Jul 13 2015 13:39
@jhaoda 10$ :P
NickPanda
@NickPanda
Jul 13 2015 13:39

@jhaoda прсото меня затормозило

{{ isset($name) ? $name: 'Default' }}

так как он если нет записей писал []

@ruelephant а что будет кашэрно?)
Maxim
@Big-Shark
Jul 13 2015 13:39
@ruelephant стандартный там очень кошэрно) ему пофиг класс или обьект)
Alexander Popov
@ruelephant
Jul 13 2015 13:40
если мы говорим про колекции
Maxim
@Big-Shark
Jul 13 2015 13:40
@ruelephant у меня была проблемма с тем что я с колекций на массивыв перебрался, и пришлось менять
@ruelephant ну так там вроде коллекция
NickPanda
@NickPanda
Jul 13 2015 13:40
@ruelephant ну , а что кошерно?
Alexander Popov
@ruelephant
Jul 13 2015 13:41
@Big-Shark @jhaoda @NickPanda лучше count встроенный в Illuminate\Database\Eloquent\Collection
с каждого по 10$
Maxim
@Big-Shark
Jul 13 2015 13:41
@ruelephant и чем лучше?
ruelephant @ruelephant богат
JhaoDa
@jhaoda
Jul 13 2015 13:41
@ruelephant а кто сказал, что он имел ввиду не этот count?
Alexander Popov
@ruelephant
Jul 13 2015 13:41
@jhaoda я знал
NickPanda
@NickPanda
Jul 13 2015 13:41
У меня получилось count($name) = 0 если нет записей
JhaoDa
@jhaoda
Jul 13 2015 13:41
@ruelephant брехло ты, короче
Alexander Popov
@ruelephant
Jul 13 2015 13:41
што?
Maxim
@Big-Shark
Jul 13 2015 13:41
@NickPanda уйди и не мешай дядькам спорить.
NickPanda
@NickPanda
Jul 13 2015 13:41
@ruelephant ну, какой count юзает Blade?
Alexander Popov
@ruelephant
Jul 13 2015 13:42
@jhaoda он стандартный использовал
только шо
Maxim
@Big-Shark
Jul 13 2015 13:42
@ruelephant так, давай с того почему твой каунт лучше чем мой каунт?
NickPanda
@NickPanda
Jul 13 2015 13:42
@ruelephant ну в php да я прописал, обычный count? а в blade какой он понимает count?
Alexander Popov
@ruelephant
Jul 13 2015 13:43
@Big-Shark там может быть не одно свойство
Maxim
@Big-Shark
Jul 13 2015 13:43
@NickPanda тот что в пхп
JhaoDa
@jhaoda
Jul 13 2015 13:43
@NickPanda с чего ты вообще решил. что блэйд юзает где-то count?
Maxim
@Big-Shark
Jul 13 2015 13:43
@ruelephant а свойство тут причем?
Alexander Popov
@ruelephant
Jul 13 2015 13:43
как причем?
в переменной колекция в любом раскладе
Maxim
@Big-Shark
Jul 13 2015 13:43
@ruelephant хочешь открою магию почему count и ->count работают одинакого?
Alexander Popov
@ruelephant
Jul 13 2015 13:43
нужно посмотреть на пустоту
логично использовать метод коллекции
Maxim
@Big-Shark
Jul 13 2015 13:44
@ruelephant а почему нельзя использовать обычный метод?
@ruelephant готовь 10 баксов
NickPanda
@NickPanda
Jul 13 2015 13:45
@jhaoda ну хз, просто тут начали про какой то не стандартный count? хотя в доках лары есть
@if (count($records) === 1)
    Здесь есть одна запись!
@elseif (count($records) > 1)
    Здесь есть много записей!
@else
    Здесь нет записей!
@endif
JhaoDa
@jhaoda
Jul 13 2015 13:45
@NickPanda я все же рекомендую почитать доки РНР, что бы не возникало странных идей про какой-то особый count в блэйде...
Alexander Popov
@ruelephant
Jul 13 2015 13:45
@Big-Shark
    public function count()
    {
        return count($this->items);
    }
NelinD
@NelinD
Jul 13 2015 13:46
@jhaoda отстань, надоел уже им доки советовать)))
Alexander Popov
@ruelephant
Jul 13 2015 13:46
парсер лох!
Maxim
@Big-Shark
Jul 13 2015 13:46
@ruelephant и? Я знаю как это выглядит, ты мне ответь почему $collection->count() лучше чем count($collection)
Alexander Popov
@ruelephant
Jul 13 2015 13:47
у тебя не будет сложно отловимых багов
NickPanda
@NickPanda
Jul 13 2015 13:47
@jhaoda у меня этих идей и не возникало, просто @ruelephant ляпнул про какой то еще count
Alexander Popov
@ruelephant
Jul 13 2015 13:47
@Big-Shark потому что это искапсуляция, если разработчики что-то сделают страшное
а с стандартной функции ты поедешь по всем граблям
JhaoDa
@jhaoda
Jul 13 2015 13:47
@ruelephant видишь, к чему ты людей подводишь?
Maxim
@Big-Shark
Jul 13 2015 13:47
@ruelephant по каким всем? Ты мне скажи что сломаться может?
@ruelephant почему мой вариант лучше, я могу вернуть массив во вью, и все продолжен работать, ты же получиш фаталку о том что пытаешься вызвать каунт у массива, а когда у тебя сложное и запутаное приложение, то такие штуки иногда случаются)
Alexander Popov
@ruelephant
Jul 13 2015 13:50
@Big-Shark чувак я знаю про эту магию, но я параноик :)
Maxim
@Big-Shark
Jul 13 2015 13:50
@ruelephant да, в теории твой вариант более безопасный и строгий, но для лучшего эфекта тогда надо делать инстанс оф и кидать экскпшен, а это уже слишком сложно для вью)
Alexander Popov
@ruelephant
Jul 13 2015 13:51
чувак дело в подходе
если ты доверешь ИМ, то делай
NickPanda
@NickPanda
Jul 13 2015 13:51
Короче сделал так
@if(count($name)>0)
вывожу нужные элементы
Alexander Popov
@ruelephant
Jul 13 2015 13:51
но я не доверяю :)
лучше ручками так сказать, аккуратно
Maxim
@Big-Shark
Jul 13 2015 13:51
@ruelephant а еще обычно ошибки у вью прикольные, то инклюд несработал, то эвал, то просят полсти и смотреть сгенерированные вью
@ruelephant как можно недоварять такой простой штуке)
Alexander Popov
@ruelephant
Jul 13 2015 13:52
параноя :)
я не люблю магию в коде вообще
в меру конечно
Maxim
@Big-Shark
Jul 13 2015 13:53
@ruelephant я тоже) но вью это место где нет сложной логики, классов, и прочего)
Alexander Popov
@ruelephant
Jul 13 2015 13:53
у меня все еще проще
у меня нет view
O_x
Maxim
@Big-Shark
Jul 13 2015 13:53
@ruelephant в этом плане мне твиг понравился, да новый синтаксис, да иногда сложно и не удобно, но прикольно что пофиг что ты передашь, он хитро отработает
@ruelephant рест апи?
Alexander Popov
@ruelephant
Jul 13 2015 13:54
ага
и вью забираются для рендера на клиента по статике
вообщем клиент живет своей жизнью
я даже его состояния не контролирую
NelinD
@NelinD
Jul 13 2015 13:54
@ruelephant проксирую методы билдера в модели вручную)
Alexander Popov
@ruelephant
Jul 13 2015 13:55
@NelinD это как?
скоро мы дойдем так товарищи до маразма, когда в консоли можно будет 1 командой сервис с нуля создать
соотвествующий тз
с тестами
а тем временем жители вилобадже перешли с 98 на 99 стандарт С
время на реализацию 1 фитчи - недели :)
NelinD
@NelinD
Jul 13 2015 13:57
@ruelephant тьфу, проксируЙ, не полагайся на магию)
Alexander Popov
@ruelephant
Jul 13 2015 13:58
ты имеешь введу для связей?
юзать билдер в методах
NelinD
@NelinD
Jul 13 2015 13:58
@ruelephant
Model::where('bla-bla-bla');
@ruelephant вызовы билдера проксируются через магию, и
это самое очевидное
Alexander Popov
@ruelephant
Jul 13 2015 14:00
при вызове модели прозрачно подключается билдер с доп условиями? :)
NelinD
@NelinD
Jul 13 2015 14:01
@ruelephant
   /**
     * Handle dynamic method calls into the model.
     *
     * @param  string  $method
     * @param  array   $parameters
     * @return mixed
     */
    public function __call($method, $parameters)
    {
        if (in_array($method, ['increment', 'decrement'])) {
            return call_user_func_array([$this, $method], $parameters);
        }

        $query = $this->newQuery();

        return call_user_func_array([$query, $method], $parameters);
    }
Maxim
@Big-Shark
Jul 13 2015 14:01
Warning: uasort(): Array was modified by the user comparison function
Это еще что за ?
Alexander Popov
@ruelephant
Jul 13 2015 14:02
@NelinD чур меня! чур
Maxim
@Big-Shark
Jul 13 2015 14:02
@ruelephant а ты любишь автоматичесеску. генерацию классов через пхп?
Alexander Popov
@ruelephant
Jul 13 2015 14:03
нет
NelinD
@NelinD
Jul 13 2015 14:03
@ruelephant что чур? это ядро
Alexander Popov
@ruelephant
Jul 13 2015 14:03
ну я бы так не сделал
Maxim
@Big-Shark
Jul 13 2015 14:04
@ruelephant поэтому ты и не сделал лару)
JhaoDa
@jhaoda
Jul 13 2015 14:04
@ruelephant иди Тэйлору напиши, что за 10$ красоту наведешь в ядре
Alexander Popov
@ruelephant
Jul 13 2015 14:04
меньше 1000$ ни коммита :)
насколько я помню, у меня в проекте не используется такая магия
Alexander Popov
@ruelephant
Jul 13 2015 14:10
это получается, если я обращаюсь к методу модели user, например test которого нет
я автоматом создаю билдер под это все
типо опа новая сущность
к нему применяется глобальные условия, и дальше чо?
@jhaoda @Big-Shark
JhaoDa
@jhaoda
Jul 13 2015 14:14
@ruelephant 100$ готовь
Alexander Popov
@ruelephant
Jul 13 2015 14:15
обойдешься
вы не можете обосновать свою хрень :)
хоть где то в продакшене использовали?
JhaoDa
@jhaoda
Jul 13 2015 14:15
@ruelephant мы тебе что-то обязаны обосновывать?
Alexander Popov
@ruelephant
Jul 13 2015 14:16
ну не занимать же высоконаучную позицию "Z = 125,213 и точка!"
сказали А, так приведите доказательство :)
про count я вам обосновал свою позицию
JhaoDa
@jhaoda
Jul 13 2015 14:18
@ruelephant а мы тебя просили?
Alexander Popov
@ruelephant
Jul 13 2015 14:18
да
JhaoDa
@jhaoda
Jul 13 2015 14:18
Хм, я не просил
Alexander Popov
@ruelephant
Jul 13 2015 14:19
@Big-Shark написал: "@ruelephant а почему нельзя использовать обычный метод?"
@jhaoda
Maxim
@Big-Shark
Jul 13 2015 14:26
@ruelephant какая новая сущность? Какие глобальные условия? ты получиш ошибку что не такого метода
Alexander Popov
@ruelephant
Jul 13 2015 14:26
там же call
NelinD
@NelinD
Jul 13 2015 14:27
@ruelephant а у тебя метод тест)
Maxim
@Big-Shark
Jul 13 2015 14:27
@ruelephant и че? у тебя call_user_func_array кинет ошибку, так как в классе который вернет newQuery не будет метода тест
Alexander Popov
@ruelephant
Jul 13 2015 14:28
хм
там же уже есть find и прочее
прямо в классе, зачем билдер то проксировать
Maxim
@Big-Shark
Jul 13 2015 14:30
там существующие методы он и не будет проксировать
Alexander Popov
@ruelephant
Jul 13 2015 14:30
почему бы не относледовать тупо
@Big-Shark потом мы отгребаем производительность по полной
вместо классики
из за ваших билдеров
из за ваших прокси
Maxim
@Big-Shark
Jul 13 2015 14:35
@ruelephant не смотри на меня, я не использую ларавель и элокоент)
NickPanda
@NickPanda
Jul 13 2015 14:53
вы @ruelephant @Big-Shark бы еще подеритесь)
SekToRCoM
@SekToRCoM
Jul 13 2015 15:19
здравствуйте, кто-нибудь может рассказать как создавать такую статистику? http://joxi.ru/52aeQNycg8zd20.png (чтоб можно было выбирать по определенным дням). Статистика требуется не для одного человека, а для нескольких тысяч.
Maxim
@Big-Shark
Jul 13 2015 15:20
@SekToRCoM а проблемма то в чем?
SekToRCoM
@SekToRCoM
Jul 13 2015 15:21
@Big-Shark как такую создавать?
@Big-Shark для одного юзера я бы смог такую сделать, а для тысячи..
Maxim
@Big-Shark
Jul 13 2015 15:22
@SekToRCoM и чем это отличается?
SekToRCoM
@SekToRCoM
Jul 13 2015 15:25
@Big-Shark ну.... Так?
Создаем таблицу, в которой указан ид пользователя, день и нужные сохраняемые данные. После этого, к примеру, если у пользователя происходит какое-то действие, то создаем строку в БД и записываем туда данные?
Но как выводить дни, где у пользователя ничего не записывалось?
Либо это всё работает другим методом?
Maxim
@Big-Shark
Jul 13 2015 16:03
@SekToRCoM ну потом все крупируем, обьеденяем, и тд, вообщем читаем про агрегацию данных
SekToRCoM
@SekToRCoM
Jul 13 2015 16:13
@Big-Shark есть ли какая-нибудь документация для чтения?
l
@Equilibumq
Jul 13 2015 19:57
Не работает php artisan, при любом запросе выдает ошибку: "php" не является внутренней или внешней
командой, исполняемой программой или пакетным файлом.
help pls
Soprun Vladislav
@vlsoprun
Jul 13 2015 19:58
@Equilibum а ты где набираешь?
l
@Equilibumq
Jul 13 2015 19:59
в терминале, как и всегда делал
обновил пхпшторм до 9 версии и вуаля
Soprun Vladislav
@vlsoprun
Jul 13 2015 20:00
@Equilibum хз.. Все зависит от твоих настроек, проверь еще раз..
l
@Equilibumq
Jul 13 2015 20:01
ну хз все норм работало. а где настройки можно посмотреть? вроде ничего не трогал
Soprun Vladislav
@vlsoprun
Jul 13 2015 20:01
@Equilibum а какой у тебя локальный сервер ?!
или у тебя сборка ?
l
@Equilibumq
Jul 13 2015 20:02
xampp, та я только phpstorm обновил и больше ничего не трогал
Soprun Vladislav
@vlsoprun
Jul 13 2015 20:04
@Equilibum а у тебя было через command line tool support ?
shift + control + x
l
@Equilibumq
Jul 13 2015 20:04
alt+f12
Soprun Vladislav
@vlsoprun
Jul 13 2015 20:05
@Equilibum блин, ну я не в курсе ((
у меня open server ((
NoViKoFF
@AndrewNovikof
Jul 13 2015 20:06
Добрый вечер. Не подскажете, почему не хочет ларик русские слова из Локализации хавать? Ромбики с вопросами:-(
l
@Equilibumq
Jul 13 2015 20:06
открыл строку через shift+control+x, странно но этим медотом строка заработала
и контроллер создало, ладно переставлю шторм сча
спасибо за помощь
Alexey
@Butochnikov
Jul 13 2015 20:11
@AndrewNovikof кодировку у файла проверь
NoViKoFF
@AndrewNovikof
Jul 13 2015 20:12
@Butochnikov Гениально)))
SekToRCoM
@SekToRCoM
Jul 13 2015 20:41
Парнишки, как получить информацию из бд по двум параметрам? Как where использовать два раза? $data = Statistics::where('pip', '=', $data)->first();(только 2 параметра)
Vitaly
@Modifikator
Jul 13 2015 20:46
@SekToRCoM два_раза
Yury
@DrYurets
Jul 13 2015 21:15
->where('pod_tip', $id)->where('tip',$razdel)->
я даже когда-то просил внести в доки...
Илья
@iliyaZelenko
Jul 13 2015 21:39
Здрасте. Я изменил composer.json, что нужно сделать чтобы вступило в силу?
Soprun Vladislav
@vlsoprun
Jul 13 2015 21:40
@iliyaZelenko composer update
Илья
@iliyaZelenko
Jul 13 2015 21:41
@vlsoprun спасибо!
4gekkman
@4gekkman
Jul 13 2015 21:48
Как установить пакет композера в указанный пользователем каталог?
Soprun Vladislav
@vlsoprun
Jul 13 2015 21:49
@4gekkman зачем?
4gekkman
@4gekkman
Jul 13 2015 21:49
Борюсь уж час с composer/installers, но что-то он не работает.
@vlsoprun У меня модульное приложение, модули оформлены, как пакеты композера, и должны размещаться в определённых каталогах
Soprun Vladislav
@vlsoprun
Jul 13 2015 21:52
@4gekkman ну вообще composer устанавливается где выполняется команда install
4gekkman
@4gekkman
Jul 13 2015 21:52
Мне то надо установить не композер, а пакет композера
А сам композер у меня уже есть )
Soprun Vladislav
@vlsoprun
Jul 13 2015 21:53
@4gekkman наверное как нибудь то и можно сменить каталог, но я пока не встречал
4gekkman
@4gekkman
Jul 13 2015 21:57
Ну вот composer/installers меняет каталог. Для этого с composer.json самого пакета надо указать "тип пакета" и composer/installers в качестве зависимости. Тогда пакет будет установлен в соответствии с указанным типом. Также декларируется, что в composer.json проекта, который будет использовать этот пакет, в "extra" можно перезаписать путь, куда он должен установиться. Вот только, н и х р @ н а он не перезаписывается
berpcor
@berpcor
Jul 13 2015 22:13
Как проверить существует ли связка Controller@action?
JhaoDa
@jhaoda
Jul 13 2015 22:28
@berpcor создать инстанс и проверить наличие мтода
Либо через Reflection
berpcor
@berpcor
Jul 13 2015 22:29
Reflection?.. Сильно... "круто", что ли...
Нашел способ.
Проще.
Возможно, за кулисами Reflection и используется, но для этого есть приятная обертка.
JhaoDa
@jhaoda
Jul 13 2015 22:32
@berpcor и какой же?
berpcor
@berpcor
Jul 13 2015 22:34
       $routes = Route::getRoutes();
        $r = $routes->getByAction($v['action']);
        if(!is_null($r)){
            // Экшн существует
        }
        else {
            // Экшн не существует
        }
JhaoDa
@jhaoda
Jul 13 2015 22:36
@berpcor это разве гарантирует, что метод фактически есть в классе?
berpcor
@berpcor
Jul 13 2015 22:36
Вместо знака равно - тире.
Судя по API - да.
Получается коллекция фактических маршрутов.
А если в routes.php задать неверный маршрут (в случае использования uses c Controller@action ) и указать там неверный экшн, то получим ошибку.
А значит и коллекцию невозможно будет получить.
Ну, а если коллекция получается, то с маршрутами проблем нет, а значит это гарантирует, что метод есть в классе.
JhaoDa
@jhaoda
Jul 13 2015 22:43
@berpcor нет, не гарантирует
Ларавель на этапе разбора роутов проверяет только наличие контроллера, но не метода
berpcor
@berpcor
Jul 13 2015 22:46
Проверил - точно...
Более того, даже контроллер неверный указал - пропускает.
Это как так?.. Контроллер-то должен проверять.
JhaoDa
@jhaoda
Jul 13 2015 22:46
Ну хз, во всяком случае php artisan route:list не показывает список, если контроллер указан неверный
Может у неё там свои проверки есть, и это не роутер проверяет
berpcor
@berpcor
Jul 13 2015 22:47
Может, что-то изменилось. Раньше указывал неверный экшн - не пропускало...
JhaoDa
@jhaoda
Jul 13 2015 22:47
В любом случаем, единственный способ — http://php.net/manual/ru/function.method-exists.php
berpcor
@berpcor
Jul 13 2015 22:51
И еще одна белиберда сбивает с толку...
При создании маршрута можно указывать в качестве экшена Controller@action, т.е. сокращенный вариант.
Но в коллекции маршрутов эти экшены хранятся как App\Http\Controllers\Controller@action
JhaoDa
@jhaoda
Jul 13 2015 22:53
@berpcor что значит «сокращенный»? А какой тогда полный?
berpcor
@berpcor
Jul 13 2015 22:53
И когда проверяешь наличие в коллекции Controller@action, он его не находит.
А в "полном" варианте находит.
Не очень логично с точки зрения юзабилити...
JhaoDa
@jhaoda
Jul 13 2015 22:54
@berpcor никто не мешает указывать в файле роутов полное имя
berpcor
@berpcor
Jul 13 2015 22:54
Я не о том.
Не очень это логично.
Указываешь один экшн.
Хочешь его найти. По какому имени его искать? По тому, которое ты указал.
4gekkman
@4gekkman
Jul 13 2015 22:55
Есть! Пакет mnsami/composer-custom-directory-installer решает вопрос с установкой пакетов композер куда захочется
JhaoDa
@jhaoda
Jul 13 2015 22:55
Нормальные посоны юзают именованные роуты и не парятся
berpcor
@berpcor
Jul 13 2015 22:56
А как это противоречит тому, что я сказал?
В именованном маршруте ты же все-равно контроллер указываешь.
JhaoDa
@jhaoda
Jul 13 2015 22:56
@berpcor и что? Но роут-то ищешь по имени, а не по экшэну
berpcor
@berpcor
Jul 13 2015 22:56
И если в логике твоего приложения имеется необходимость обращаться не по имени маршрута, а по экшену, то...
В моем случае по экшену нужно обращаться.
JhaoDa
@jhaoda
Jul 13 2015 22:57
Если ты юзаешь именованные роуты, но «в логике твоего приложения имеется необходимость обращаться не по имени маршрута, а по экшену», то это уже проблема
Проблема с логикой
berpcor
@berpcor
Jul 13 2015 22:58
Не, слишком категорично. Используется система авторизации/регистрации c RBAC, написанная не мной. Там своя логика. Приходится адаптироваться. А уменя генерируется меню на основе ролей текущего залогиненногог пользователя.
Всякое бывает. Слишком ты категорично...
JhaoDa
@jhaoda
Jul 13 2015 22:59
И что, как это опровергает тот факт, что с логикой проблема?
Другое дело, что ты ничего с этим сделать не можешь...
Soprun Vladislav
@vlsoprun
Jul 13 2015 23:00
Парни подскажите что по вашему мнению самое важное нужно знать что бы работать с laravel?
У меня скоро небольшой доклад на тему laravel, хотелось бы узнать ваше мнение ))
berpcor
@berpcor
Jul 13 2015 23:00
Так и знал, что это скажешь ) Если говорить в общем, то да, проблема есть, но не у меня.
JhaoDa
@jhaoda
Jul 13 2015 23:00
@berpcor так я и не сказал, что у тебя
berpcor
@berpcor
Jul 13 2015 23:00
Но может у авторов были веские причины?..
JhaoDa
@jhaoda
Jul 13 2015 23:00
@vlsoprun РНР надо знать
Практика показывает, что здесь как минимум 50% вопросов проистекают от незнания основ РНР...
Soprun Vladislav
@vlsoprun
Jul 13 2015 23:01
@jhaoda :smile: 2 пункт после вступления )))
JhaoDa
@jhaoda
Jul 13 2015 23:01
@vlsoprun почему не первый?
Soprun Vladislav
@vlsoprun
Jul 13 2015 23:03
@jhaoda Ну 1 логотип, вступления о чем будет речь, а дальше тема об обязательном хорошем знании php
berpcor
@berpcor
Jul 13 2015 23:04
Кстати, да, хорошее замечание по поводу именованных маршрутов. Авторы указали экшены в качестве примера, но это не императивная форма. Можно сделать и по-другому. Я повторил то, что они указали. Сразу не мог предвидеть что вариант не совсем удобный. Сейчас столкнулся.
Soprun Vladislav
@vlsoprun
Jul 13 2015 23:06
@jhaoda ну вступление должно как по по мягче звучать, я бы с радостью написал "Кто плохо знает php, не лезьте вообще... Доклад окончен"
berpcor
@berpcor
Jul 13 2015 23:08
Уточнение. Нужно знать основы PHP/
Кто не знает основ PHP - не лезьте.
Без основ точно никак.
Некоторые относительно сложные вещи можно не знать (различные паттерны, структура кода, ...)
Их за тебя фреймворк реализует.
Но без основ...
В конце концов... это же PHP-фреймворк.
Не сможешь ты рисовать, не умея держать в руке карандаш...
Soprun Vladislav
@vlsoprun
Jul 13 2015 23:10
@berpcor абсолютно согласен, но в моей компании мало кто "php программист"... Общий уровень знаний маленький, а доклад про laravel.. и что им рассказывать не представляю ((
berpcor
@berpcor
Jul 13 2015 23:11
Логичный вопрос, а зачем вообще возникла такая необходимость?..
Может лучше о фреймворках в целом рассказать?
Или вариантов нет?
Просто Laravel - это углубление в тему фреймворков.
Vitaly
@Modifikator
Jul 13 2015 23:12
Как решить глобальную проблему зависимостей в пакетах?
berpcor
@berpcor
Jul 13 2015 23:12
А если люди даже в php не разбираются, то им и про фреймворки будет достаточно информации без акцентирования внимания на каком-либо.
Vitaly
@Modifikator
Jul 13 2015 23:13
...зависимостей от разных версий компонентов.
Soprun Vladislav
@vlsoprun
Jul 13 2015 23:16
@berpcor ну, по мне так н@х не нужно.. рассказывать про код никакого смысла нет..
Я и думал, рассказать про то что для работы с любым фреймворкам нужно хорошие знание и понимание php.
Так же почему это фреймворк и в чем различии между cms, cmsf и фреймворками.
Для чего они, какие бывают и т.д.
Vitaly
@Modifikator
Jul 13 2015 23:18
@vlsoprun видеозапись доклада будет?)
Soprun Vladislav
@vlsoprun
Jul 13 2015 23:20
@Modifikator не.. Боюсь это не тут уровень знаний и информативности будет...
JhaoDa
@jhaoda
Jul 13 2015 23:21
Одних основ мало, это всего лишь база
А то народ считает основами операторы, переменные, функции и классы-методы
Неймспейсы? Трейты? Анонимные функции, $this в них и область видимости переменных?
Не, не слышали...
Soprun Vladislav
@vlsoprun
Jul 13 2015 23:28

Около меня сидит парень, когда он пришел ему дали задание по переносу сайта с [мат] на modx.. (много не поменялось), он не знал про существования pdo... то есть по хардкору mysql_*

Я 3 недели ему мозг ел что бы он стал изучать хоть api modx...
Отношения к php у многих нет вообще... то есть ни какой культуры, ни как лучше сделать...
Просто ляпят как умеют...

В общем беда ((
Denis Isaychenko
@Rhincodon
Jul 13 2015 23:39
Емаё, https://github.com/laravel/framework/blob/5.1/src/Illuminate/Database/Eloquent/Builder.php, вы знали что в комментах к коду Laravel каждая следующая строка комментария на 3 символа короче предыдущей? :)
я просто прозрел, неплохо так запарился Тейлор )
Soprun Vladislav
@vlsoprun
Jul 13 2015 23:46
Надо в рен тв позвонить, злых духов отгонять )))
Vitaly
@Modifikator
Jul 13 2015 23:52
акцессор можно отключить, если, например, запрос из разных экшенов или контроллеров?
JhaoDa
@jhaoda
Jul 13 2015 23:53
@Modifikator шта?
Vitaly
@Modifikator
Jul 13 2015 23:53
или переопределить для разных контроллеров?
в модели разная обработка в акцессоре нужна в зависимости от контроллера
JhaoDa
@jhaoda
Jul 13 2015 23:57
Модель не должна знать про контроллер