Anonymous
есть trait, допустим Confirmable,
в нем есть функция confirm(),
есть несколько классов, родителем которых является общий абстрактный класс.
в некоторых классах надо добавлять этот trait, а в некоторых не надо. сам метод confirm - публичный и будет вызыватся из вне.
Вопрос такой:
как правильно определить использует ли класс этот трейт и потом вызвать функцию эту или нет?
class_uses - знаю, но она скорее для автозагрузки подходит чем для этого... может есть что то вроде instanceof только для trait-ов ?
Sergey
создай интерфейс
Sergey
наследуй классы использующие трейт интерфейсом и проверяй через instanceof
Sergey
или вообще просто тайпхинтинг сделать на этот интерфейс и ничего не проверять - пусть падает если в него что-то не то передали. В данном случае нужно проверять не реализацию (используемый трейт), а определение (по интерфейсу). Это называется инкапсуляцией
Sergey
Если не путаю термин
Anonymous
http://php.net/manual/en/function.method-exists.php
Anonymous
может так? )
Sergey
метод эксист - это не ООП подход :)
Sergey
можешь так, но что будет, если у тебя будут 2 класса с одинаковым методом confirm(), но использующиеся в соверщенно разных местах?
Sergey
код запутается и выполнит это. а вот упадет что или не упадет и насколько серьезно - это уже дело случая
Anonymous
суть в том что снаружи у меня код будет типа такой
if (есть_трейт) {
$obj->confirm()
}
сейчас у меня просто
$obj->confirm()
и без трейтов, просто вставил заглушку функции во все классы, но такой подход мне вообще не нравится))
Sergey
interface ConfirmableInterface {
public funciton confirm();
}
class A implements ConfirmableInterface {
use ConfirmableTrait; // мы можем использовать любой другой трейт или реализовать функцию самому
}
class B {
public function confirm() {};
}
function test(ConfirmableInterface $c) {
$c = $c->confirm(); // мы точно знае что в этом месте класс делает что нам надо, за это отвечает ConfirmableInterface
}
test(new A()); // Заработает
test(new B()); // Упадет, так как мы передали не то что нам надо, но с методом confirm
Sergey
Тебе надо продумывать это место не отталкиваясь от реализации (трейта), а от определения функций (интерфейса). Это сокрытие и есть постулат ООП
Sergey
один из них
Anonymous
Супер!
Anonymous
теперь все понял, спасибо за пример
Sergey
👍
Константин
Приветствую, коллеги подскажите, как получить URL, по которому переходил пользователь, до того момента как его поймал фильтр авторизации? Redirect::intended() передает уже сформированный html, а если задача получить именно путь изначального перехода строкой, то как быть?
Dmitriy
Centralised Logging System for Laravel in an ElasticStack https://www.youtube.com/watch?v=2DL1c9k67og
Dmitriy
Слайды https://github.com/mewm/laravel-elastic-stack-cls-docker
Wolf
Привет всем. Кто-то делал карусель рулетку на js?
invariance
Привет, а ты умеешь читать?
invariance
вдруг заметишь, что это чат не по js
invariance
Ой, сорян, перепутал
Bakhriddin
kto polzuyetsya phpstorm 2016.2
Anonymous
PhpStorm 2016.2.1
Build #PS-162.1889.1, built on August 23, 2016
Licensed to Bon Jovi
Subscription is active until February 25, 2017
JRE: 1.8.0_76-release-b216 x86_64
JVM: OpenJDK 64-Bit Server VM by JetBrains s.r.o
J
подскажите для Лары 5.3 какой-нить красивый генератор документации?
надо на route + Controller
Алексей
Читаемый код, лучше любой доки
J
да код-то читаемый
J
но хотелось бы на АПИ сгенерить красивый док
Алексей
Swagerwell только приходит на ум
Алексей
Дока хорошая но изначально трудно вникнуть )
Pin
Алексей
Инфиум поди кинешь?)
Pin
нет
Pin
https://github.com/dingo/blueprint
Pin
если юзаешь dingo api в качестве api
Anonymous
В ларе есть какая-то встроенная функция которая будет вызывать исключение если переданное значение не является истиной ? типа assert но для продакшена
Anonymous
оО
Dmitriy
чет я не понял
Anonymous
в общем задача такая , надо провалидировать данные входные (приходят они не через Request) внутри одного процесса
надо генерить исключение если утверждение является ложью
то есть по сути можно сделать типа так
if ($a === false) throw new Exception('А =! true');
но хочется как то красивее сделать. есть мысли?
Anonymous
ну сделай валидатор
Anonymous
и валидируй
Andrey
Bon ты же в Валидатор первым аргументом передаешь значения, вторым условия, третим текст ошибок, если требуется
Andrey
что мешает использовать? :)
Anonymous
и валидируй
Привет, у тeбя нет случайно списка городов израиля в xml?
Anonymous
csv
Anonymous
Anonymous
на иврите
Anonymous
печаль(
Anonymous
из втентакле спарси на русском
Anonymous
Вот кстати xml https://data.gov.il/dataset/d2581732-eca4-4988-b986-df8e791a1d60/resource/4bc8ec43-08dd-4dc3-a6ab-bd52e137fb8c/download/rechovot20161101.xml
Anonymous
J
есть вопрос, делаю из Лары
return response()->json([
'state' => false
]);
и получаю это в Андроид приложении, но JSONObject не хочет принимать false без кавычек
вопрос: как можно объяснить Ларе брать в кавычки Boolean ?
Алексей
state = $state? 'true' : 'false'; 😁
J
щас получаю:
{
"state": false,
"msg": "password mismatch"
}
а надо чтобы стало:
{
"state": "false",
"msg": "password mismatch"
}
Anonymous
ну епт
Anonymous
так и передавай 'state' => "false"
J
спасибо!
J
но это ж костыльно :)
J
хотя и креативно :)
Anonymous
это очевидно
Anonymous
можешь сделать красиво
Anonymous
свой APIResponse, который будет true/false в стринг переделывать
J
а теперь таже проблема, но с null
J
блин
J
это ж не кошерно
Anonymous
100% в твоем JsonOBject проблема
Anonymous
выкинь его
J
не могу - он в Ведроиде :)
Anonymous
или научи понимать нормальный жсон
J
отож, я ж вижу что это валидный json
J
а хавать он не хочет
Евгений
можно как то отвалидировать значение boolean or date_format:H:i ?
Sergey
в одном параметре может быть или бул или дата?
(;¬_¬)
ну видимо да, а почему нет?
Sergey
Плохо
Sergey
проблем от этого делать. Если булеан означает отсутствие даты, то null его сделать