These are chat archives for LaravelRUS/chat

21st
Aug 2017
Daniil Kuznetsov
@DanUnited
Aug 21 2017 06:44
кто может пожертвовать своим вниманием подсказать нормальный курс по laravel
-- google -- laracasts на русском
наверное так
Anton Vorontsov
@symbios-zi
Aug 21 2017 06:48
@DanUnited laracasts на русском?
Anton Vorontsov
@symbios-zi
Aug 21 2017 07:31
@AntoninaSych заверни ссылку, пожалуйста. у нас так не принято публиковать
projct1
@projct1
Aug 21 2017 07:50
подскажите плз можно ли в ларке сделать так, чтобы при инстанциировании листенера срабатывал метод определённый автоматом?
у меня есть листенер, который принимает событие в методе handle и мне приходится постоянно писать в нём одно и то же:
$this->order = tap($event->model)->refresh();
я хочу расширять листенеры от абстрактного класса, в котором автоматом будет сетится $this->order
projct1
@projct1
Aug 21 2017 07:55
пытаюсь так, но не получается, в handle основного листенера всё равно $this->order === null
namespace App\Listeners\Order;

abstract class Base
{
    protected $order;

    public function __call($name, $event)
    {
        if ($name == 'handle') {
            $this->order = tap($event->model)->refresh();
        }
    }
}
projct1
@projct1
Aug 21 2017 08:04
естественно, потому что метод handle есть )
короче в конструкторе события пока сделал $this->model = tap($model)->refresh();
но всё равно во всех листенерах надо в handle всегда прописывать $this->order = $event->model;
неудобно
почему бы не в конструктор подавать событие? зачем так сделали?
Anton Vorontsov
@symbios-zi
Aug 21 2017 08:09
@rorc ты пытаешься к модели достучаться в лисенере?
projct1
@projct1
Aug 21 2017 08:09
@symbios-zi конечно, мне же надо делать действия с ней)
Anton Vorontsov
@symbios-zi
Aug 21 2017 08:10
@rorc а ты доку пробовал читать? ты уже год тут вопросы задаешь и бес толку
projct1
@projct1
Aug 21 2017 08:10
@symbios-zi читал, ты мой вопрос понял хоть?
Anton Vorontsov
@symbios-zi
Aug 21 2017 08:11
да читал, у тебя вечно какие то костыли )))
разбирайся сам
projct1
@projct1
Aug 21 2017 08:11
@symbios-zi в лисенере присваиваю $this->order = $event->model; чтобы не писать каждый раз $this->event->order
@symbios-zi ну раз не можешь или не хочешь подсказать то и не пиши лучше, чат тока засоряешь
Anton Vorontsov
@symbios-zi
Aug 21 2017 08:11
@rorc хочу и пишу
ок?
это ты своим кодом постоянно засоряешь чат
каждый день половина вопросов от тебя =)
projct1
@projct1
Aug 21 2017 08:12
@symbios-zi для чего? чтобы лишний раз понтануться и отослать в доку?)
Anton Vorontsov
@symbios-zi
Aug 21 2017 08:12
от общего количества вопросов
@rorc чем я понтуюсь? )
это называется другим словом - критика.
projct1
@projct1
Aug 21 2017 08:12

@symbios-zi

каждый день половина вопросов от тебя =)

ну конечно, скопируй мне ссылки на мои сообщения, обращений будет раза 2 в неделю максимум

Anton Vorontsov
@symbios-zi
Aug 21 2017 08:13
@rorc честно, лень. нет времени кому то что то доказывать )
projct1
@projct1
Aug 21 2017 08:13
@symbios-zi вот почему бы просто не подсказать, помочь человеку, может я реально не понимаю чё-то
@symbios-zi нет надо отослать в доку и всё, самый банальный и простой неэффективный способ
Anton Vorontsov
@symbios-zi
Aug 21 2017 08:14
@rorc потому что надо учиться самому разбираться, иначе так и не вырастешь в скилле
projct1
@projct1
Aug 21 2017 08:14
@symbios-zi ну ты способен натолкнуть на мысль хотя бы?
мы же все тут сидим чтобы помогать друг другу
@symbios-zi если поконкретный, почему так (по твоему мнению) нельзя делать в handle:
$this->order = $event->model;
Igor Markin
@markinigor
Aug 21 2017 08:37
@rorc Видимо ты не совсем понял Антона @symbios-zi Он имел ввиду чтоб ты почитал доку не по ларке, а про пхп ну и про ооп
projct1
@projct1
Aug 21 2017 08:38
@markinigor всё равно не понимаю
в лисенере же должны проводиться действия над моделью, так?
@markinigor или в лисенере надо вызывать методы события через $event->someMethod()?
@markinigor при проишествии события, в лисенере делается определённое действие
для каждого действия свой лисенер, так?
@markinigor про что читать доку то? я неверно понимаю паттерн Observer или что?
нормально направить в нужное русло практически никто не может, зато просто написать "иди читай доку" все горазды
Igor Markin
@markinigor
Aug 21 2017 08:40
@rorc чувак отбрось в сторону лисенеры и события, у тебя банальный вопрос, хочешь чтобы в одном методе выполнялся другой метод
@rorc и пытаешься это сделать через __call
projct1
@projct1
Aug 21 2017 08:42
@markinigor я просто хочу понять, почему событие подаётся в лисенер не в конструкторе а в метод handle, наверняка это сделано не ради того, чтобы создать неудобства в виде невозможности получить доступ к событию в конструкторе лисенера

@markinigor

и пытаешься это сделать через __call

это проехали, я хрень сделал, я потом написал же)

Igor Markin
@markinigor
Aug 21 2017 08:43
@rorc потому что метод хендл отвчает за работу, а в конструктор пихаются зависимости
projct1
@projct1
Aug 21 2017 08:45
@markinigor но ведь можно было сделать в конструктор первым параметром событие, а далее зависимости, или в handle зависимости пихать)
Anton Vorontsov
@symbios-zi
Aug 21 2017 08:45
:D
Igor Markin
@markinigor
Aug 21 2017 08:46
@rorc все же вернемся к ооп и абстрактным классам и методам. Ты ж понимаешь, что ты хочешь чтоб у тебя во всех лиснерах метод хендл работал по одному принципу. То бишь он должен сделать сначала типа преднастройку, а затем постнастройку
projct1
@projct1
Aug 21 2017 08:47
@markinigor ну да, я просто хочу чтобы внутри лисенера я мог обращаться к преднастроенным переменным
@markinigor для этого как обычно делаю абстрактный класс, где все действия и совершаются, а в других лисенерах, которые оперируют этой же моделью, это не надо было делать, а можно просто наследоваться от этого абстрактного лисенера
Igor Markin
@markinigor
Aug 21 2017 08:49
@rorc ну и что тебе мешает? сделай в абстрактном классе 3 метода handle , preconfig и postHandle и в дочерних классах тебе лишь нужно делать метод postHandle и все
@rorc надеюсь ты уловил мысль?
projct1
@projct1
Aug 21 2017 08:54
@markinigor это да, но всё равно лишняя писанина, когда все подобные действия делаются автоматом в конструкторе)
Igor Markin
@markinigor
Aug 21 2017 08:56
@rorc лишняя писанина - это та, которую ты тут написал :) можно было уже с в пятидесяти файлах написать $event->model и не париться
Alexander
@spartaque
Aug 21 2017 08:56
@rorc Да вынеси ты свой $this->order = tap($event->model)->refresh(); в метод трейта, и вызывай его в методах handle, в чем проблема?
назви его init, и будет меньше магии, и не будет дублирования кода
projct1
@projct1
Aug 21 2017 08:58

@markinigor короче сделал так:
вот базовый лисенер:

abstract class Base
{
    protected $order;

    public function handle(StatusChanged $event)
    {
        $this->order = $event->model;

        $this->process();
    }

    abstract protected function process();
}

а вот один из дочерних:

class MakeRevise extends Base
{
    protected function process()
    {
        //some actions
    }
}
Igor Markin
@markinigor
Aug 21 2017 08:59
@rorc ничего ты не знаешь Джон Сноу )
projct1
@projct1
Aug 21 2017 08:59

@markinigor

лишняя писанина - это та, которую ты тут написал :grinning: можно было уже с в пятидесяти файлах написать $event->model и не париться

ага, и в каждый метод лисенера передавать переменную $event?

@markinigor что не так в моей реализации?
Igor Markin
@markinigor
Aug 21 2017 08:59
@rorc чуваааак иди учи ооп
projct1
@projct1
Aug 21 2017 09:01
@markinigor 😕
@markinigor ой, забыл вызвать $this->process() в handle родителя)
@markinigor ты про это?
Anton Vorontsov
@symbios-zi
Aug 21 2017 09:02
@markinigor насколько тебя хватит? =)
Igor Markin
@markinigor
Aug 21 2017 09:02
@symbios-zi держусь пока...
@rorc еще раз повторю, у тебя в методе handle по факту всего 2 действия нужно сделать (вызывать 2 метода). Один будет делать тебе преднастройку, второй уже по-настоящему обрабатывать твое событие
projct1
@projct1
Aug 21 2017 09:06
@markinigor у меня из преднастроек пока только $this->order = $event->model;
если будет разрастаться, то конечно вынесу в отдельный метод
Igor Markin
@markinigor
Aug 21 2017 09:06
@rorc
    public function handle(Event $event)
    {
        $this->preconfig($event);
        $this->doSomeWork($event);
    }
@rorc и угадай какой метод тебе нужно в остальных листнерах реализовать?
@rorc а какой метод не трогать
projct1
@projct1
Aug 21 2017 09:07
@markinigor это я уже сделал, только получше
абстрактный метод process и начинает основные действия
@markinigor ты наоборот усложняешь)
Igor Markin
@markinigor
Aug 21 2017 09:08
@rorc надеюсь тебе из эвента только одна модель нужна
projct1
@projct1
Aug 21 2017 09:08
@markinigor да
@markinigor кстати, ещё попутный вопрос: а в классе события что ещё обычно делают кроме как:
class Event
{
    public $event;

    public function __construct(Model $model)
    {
        $this->model = $model;
    }
}
@markinigor по идеи он только в качестве как бы контейнера должен выступать?
Igor Markin
@markinigor
Aug 21 2017 09:11
@rorc погоди, мы еще не добили твой вопрос :point_up: 21 августа 2017 г., 10:50
projct1
@projct1
Aug 21 2017 09:11
@markinigor добили ж, ты меня натолкнул на мысль, чтобы в родительском классе вызывать метод handle
@markinigor за что и спс тебе )
@markinigor спс
KarmaBot
@KarmaBot
Aug 21 2017 09:11
Спасибо (+1) для @igorvdonsk принято! Текущая карма +44.
@KarmaBot, в этом чате принято добавлять имя пользователя, чтобы его поблагодарить.
Igor Markin
@markinigor
Aug 21 2017 09:19
@rorc ну ты ж понял, что все-таки плаваешь в ооп, и совет по доке от Антона @symbios-zi был таки вполне уместным и правильным?
И еще, если ты считаешь эту реализацию "получше"
:point_up: 21 августа 2017 г., 11:58 то я могу только посочувствовать.
Почитай что-нибудь типа "Чистый код" на досуге. Ну и прислушивайся к другим, когда тебя отправляют в доки :)
projct1
@projct1
Aug 21 2017 09:22
@markinigor почему тебе моя реализация кажется неверной?
ведь ты то же самое написал, только заменив моё $this->order = $event->model; на $this->preconfig($event);
Igor Markin
@markinigor
Aug 21 2017 09:38
@rorc я разве сказал, что она неверная? прочитай внимательней, заодно и увидишь ответ
projct1
@projct1
Aug 21 2017 09:39
@markinigor ну хорошо, почему она хуже?
@markinigor мол в дочернем классе не смогу переопределить преобработку?
Alexander Melihov
@melihovv
Aug 21 2017 10:49

Ребят, у меня в модели скидки есть поле percentage, которое показывает тип скидки: вычитается какой-то процент от цены или какая-то фиксированная сумма рублей. Так вот, некоторые запросы зависят от этого поля. Если вычитается процент, то один запрос, если фиксированная сумма, другой запрос. Ну применил я, значит, паттерн состояние. Запросы, вычитающие процент, в одном классе-состоянии, вычитающие фиксированную сумму - в другом.

Только теперь нужно инициализировать состояние в зависимости от поля percentage в модели. Где можно/лучше это сделать? Есть какое-нибудь событие в модели, когда все атрибуты загружены? Пробовал в методе setPercentageAttribute(), только он не вызывается, когда модель просто достается из бд.

Anton Vorontsov
@symbios-zi
Aug 21 2017 10:52
@melihovv у ларавел есть события моделей и обсерверы. https://laravel.com/docs/5.4/eloquent#events
Alexander Melihov
@melihovv
Aug 21 2017 10:53
да видел я их. только там нету события, когда модель из бд достается.
Ilnur Rav
@nyrik8989
Aug 21 2017 10:54
Привет всем
KarmaBot
@KarmaBot
Aug 21 2017 10:54
Привет, @nyrik8989! Проходи, присаживайся. В ногах правды нет :)
Ilnur Rav
@nyrik8989
Aug 21 2017 10:54
Что используете для вывода человекопонятной даты?
НА русском языке
Anton Vorontsov
@symbios-zi
Aug 21 2017 10:55
@melihovv accessor?
Igor Markin
@markinigor
Aug 21 2017 10:56
@melihovv посмотри, мож пригодится видео
Anton Vorontsov
@symbios-zi
Aug 21 2017 10:57
@markinigor о да, когда то я так и сделал по его туториалу
вообще кажется плохой идеей считать скидки динамечески, я в бд храню типы скидок и считаю
Igor Markin
@markinigor
Aug 21 2017 10:57
@melihovv я как-то хотел в подобном случае поэкспериментировать создав на 1 таблицу бд - две модели, но чет руки не дошли до таких экспериментов
Alexander Melihov
@melihovv
Aug 21 2017 10:57
@symbios-zi они в бд хранятся.
Anton Vorontsov
@symbios-zi
Aug 21 2017 10:58
типа проблема в том как при выборке товаров посчитать и показать скидку?
@nyrik8989 написать что то свое можно или взять готовое. к примеру https://github.com/jenssegers/date
Alexander Melihov
@melihovv
Aug 21 2017 10:59
нет. проблема в том, как инициализовать "состояние" модели
Ilnur Rav
@nyrik8989
Aug 21 2017 11:00
@symbios-zi спасибо
KarmaBot
@KarmaBot
Aug 21 2017 11:00
Спасибо (+1) для @symbios-zi принято! Текущая карма +236.
Anton Vorontsov
@symbios-zi
Aug 21 2017 11:01
@melihovv можно сделать сервис который будет устанавливать скидки
$discountService->applyDiscounts($products);
и внутри сервиса и проверять подходит ли под нужную скидку товар. Сделать хендлеры типов скидок, и пусть каждая скидка сама решает, быть назначеной или нет. Эта идея в видео. ссылку скинул @markinigor
Anton Kartsev
@bigperson
Aug 21 2017 11:45
Всем привет. Есть кто https://github.com/Folkloreatelier/laravel-graphql использует? Подскажите как правильно можно покрыть тестами мутации и запросы?
KarmaBot
@KarmaBot
Aug 21 2017 11:45
Привет, @bigperson! Проходи, присаживайся. В ногах правды нет :)
Anton Vorontsov
@symbios-zi
Aug 21 2017 12:05
@bigperson серафим увлекается graphql
Anton Kartsev
@bigperson
Aug 21 2017 12:05
@symbios-zi да он свою либу пишет, вопрос именно по этому пакету, нигде даже пример не могу найти
Kirill Nesmeyanov
@SerafimArts
Aug 21 2017 12:06
и он пишет это не просто так, т.к. использовал как раз фольклор и он дерьмо
Anton Kartsev
@bigperson
Aug 21 2017 12:08
@SerafimArts Не спорю, но задача покрыть именно текущую реализацию
Oleg Arkhipov
@Oleg-Arkhipov
Aug 21 2017 14:13
@spartaque https://socket.io/docs/server-api/#namespace-use-fn ? - не, это вообще миддлваря на каждое подключение, а не ивент. Там есть и такая же, но на ивенты, я знаю, но это не подходит, она для всех ивентов выполняется, гранулярнее не сделать.
Думаю, надо написать свою небольшую обёртку для socket.io, типа ларкиного/экспрессовского роутера, чтобы работать нормально.
Raswin
@Raswin
Aug 21 2017 14:21
Добрый день, подскажите как в коллекции relation который равен NULL, подставить значение по дефолту ?
KarmaBot
@KarmaBot
Aug 21 2017 14:21
Привет, @Raswin! Проходи, присаживайся. В ногах правды нет :)
Ислам
@IMiciew_twitter
Aug 21 2017 14:30
@Raswin https://laravel.com/docs/5.4/eloquent-relationships раздел Defining Custom Intermediate Table Models ты про это?
->using(Model::class)
SEQUEL.ONE
@SequelONE
Aug 21 2017 16:06
Всем привет
KarmaBot
@KarmaBot
Aug 21 2017 16:06
Приветствую тебя, @SequelONE!
SEQUEL.ONE
@SequelONE
Aug 21 2017 16:09
Начали делать соц. сеть для геймеров. Кто-нибудь поможет оптимизировать и задачи разные решить? За денюжку? На фрилансе вообще не понятно кто к проекту добавляется и на моменте общения сливается. Зачем тогда добавляться было?!)
Oleg Arkhipov
@Oleg-Arkhipov
Aug 21 2017 16:11
@SequelONE размести объявление в группе, и напиши подробнее про вакансию - требования, условия, оклад.
SEQUEL.ONE
@SequelONE
Aug 21 2017 16:12
Ой, я же в оффтопе писал, что за глюк?! О_о
@Oleg-Arkhipov а в какой группе? В вк?
Oleg Arkhipov
@Oleg-Arkhipov
Aug 21 2017 16:14
@SequelONE да, можешь сделать у себя пост и написать админу - попросить репостнуть от имени группы, так больше увидят.
Пример: https://vk.com/laravel_rus?w=wall-53758340_31846
SEQUEL.ONE
@SequelONE
Aug 21 2017 16:42
@Oleg-Arkhipov а сколько в среднем в час стоит работа? Что-то в группе в обсуждении 50к в месяц критикуют жёстко)
Oleg Arkhipov
@Oleg-Arkhipov
Aug 21 2017 16:46
@SequelONE я не могу подсказать, увы.
SEQUEL.ONE
@SequelONE
Aug 21 2017 16:56
@Oleg-Arkhipov а кто-нибудь на заказ делает тех. задание?
JhaoDa
@jhaoda
Aug 21 2017 16:57
@SequelONE ты в оффтопе и пиши, раз собирался там писать
Odaxelangia
@Odaxelangia
Aug 21 2017 18:04
Привет ларавелята
KarmaBot
@KarmaBot
Aug 21 2017 18:04
Прувет, @Odaxelangia!
Odaxelangia
@Odaxelangia
Aug 21 2017 18:04
:3
Alexander
@Dualse
Aug 21 2017 18:25
можно как-то найти все ключи, которые передаются в trans, но не определены в языковых файлах?
Andrey
@daaner
Aug 21 2017 18:35
@Dualse имхо, поиском по всему проекту trans и выбирай что есть, а что нет
Alexander
@Dualse
Aug 21 2017 18:36
@Daaner эмм... я знаю, как это руками делать, но не горю желанием это вручную проверять. Вот у меня есть где-то 150-200 ключей (образно конечно), мне их все ручками проверять что ли?
Andrey
@daaner
Aug 21 2017 18:42
@Dualse это бок программера, если пишешь trans, не впадлу, ткни копипаст в файлик с локацией, а потом уже мульти делай. Как по другому я хз
@Dualse просто я не представляю как ларе дать проверку на наличие перевода локали
Oleg Arkhipov
@Oleg-Arkhipov
Aug 21 2017 18:43
@Dualse можно утилиту написать :)
Alexander
@Dualse
Aug 21 2017 19:51
@Daaner я проект не с самого начала виду
@Oleg-Arkhipov я вот думал, что может у кто-то это сделал)
Andrey
@daaner
Aug 21 2017 20:00
@Dualse поиском, быстрее будет, чем какой-то пакет подключать
Alexander
@Dualse
Aug 21 2017 20:05
@Daaner мы не про пакет... Ну если бы поиском это было сделать быстро, я бы уже давно это сделал
Tinboy
@Tinboy
Aug 21 2017 21:50
Всем привет,не уверен,что не оффтоп,но все же.Какие можно утилиты или скрипты или что-то еще поставить для получения четких данных о нагрузке на сайт,кол-во запросов в минуту,смотреть не идет ли ддос,кол-во уникальных посетителей и т.п. Google analitics дает примерные данный и отследить ддос по нему,как мне кажется сложно.Мб уже есть готовые админ панели для ларки ,которые бы удобно выводили подробности полученные из логов?
KarmaBot
@KarmaBot
Aug 21 2017 21:50
@Tinboy и тебе не хворать :)
Kirill Nesmeyanov
@SerafimArts
Aug 21 2017 21:53
@Tinboy graylog?
Tinboy
@Tinboy
Aug 21 2017 22:01
@SerafimArts прогуглю,спасибо)
KarmaBot
@KarmaBot
Aug 21 2017 22:02
Спасибо (+1) для @SerafimArts принято! Текущая карма +762.