These are chat archives for LaravelRUS/chat

19th
Mar 2015
Serhii Chaplia
@iwex
Mar 19 2015 00:42
@greabock та надо. Но бухать позвали, только вернулся)
Kirill Nesmeyanov
@SerafimArts
Mar 19 2015 00:43
отличное отношение
тебе надо, пусть другие трудятся - объясняют, а ты идёшь повеселиться ;)
Serhii Chaplia
@iwex
Mar 19 2015 00:44
@SerafimArts ну ты сказал - утро вечера .. я вот и исчез)
Kirill Nesmeyanov
@SerafimArts
Mar 19 2015 00:44
ладно, 1-1
=))))
но за это время мог бы сам разобраться
более чем
Serhii Chaplia
@iwex
Mar 19 2015 00:45
@SerafimArts потом понял, что код превыше всего)
Kirill Nesmeyanov
@SerafimArts
Mar 19 2015 00:45
дада
:D
Serhii Chaplia
@iwex
Mar 19 2015 00:45
@SerafimArts :)
@SerafimArts я уже ту документацию раз 5 читал
Kirill Nesmeyanov
@SerafimArts
Mar 19 2015 00:46
надо не читать, а пробовать
Serhii Chaplia
@iwex
Mar 19 2015 00:46
о контейнерах
но так и не понял смысла
Kirill Nesmeyanov
@SerafimArts
Mar 19 2015 00:46
чтение - не то
Serhii Chaplia
@iwex
Mar 19 2015 00:46
да понимаю
пробовал
Kirill Nesmeyanov
@SerafimArts
Mar 19 2015 00:46
о каких контейнерах?
ioc?
Serhii Chaplia
@iwex
Mar 19 2015 00:46
да
  • на ларакате посмотрел видео
+
все-равно не идет
Kirill Nesmeyanov
@SerafimArts
Mar 19 2015 00:47
это паттерн популярный
Serhii Chaplia
@iwex
Mar 19 2015 00:47
да я о конкретной реализации в ларе
Kirill Nesmeyanov
@SerafimArts
Mar 19 2015 00:47
в ларе реализован DI через инъекцию в метод
Serhii Chaplia
@iwex
Mar 19 2015 00:47
сек
Kirill Nesmeyanov
@SerafimArts
Mar 19 2015 00:47
т.е. ты указываешь аргумент, а тебе в аргумент автоматом подсовывается нужный результат
Serhii Chaplia
@iwex
Mar 19 2015 00:47
это я понял
я пытаюсь это связать с биндом
и с фасадами
это всё уложить в голове)
Kirill Nesmeyanov
@SerafimArts
Mar 19 2015 00:48
это уже другое по-моему
бинд позволяет просто добавить внутрь класс
точнее объект
а фасад - просто ссылка на этот объект
Serhii Chaplia
@iwex
Mar 19 2015 00:49
а дальше только через make делать?
Kirill Nesmeyanov
@SerafimArts
Mar 19 2015 00:49
мейк - возвращает ссылку
можно писать app('name')
Serhii Chaplia
@iwex
Mar 19 2015 00:49
да
Kirill Nesmeyanov
@SerafimArts
Mar 19 2015 00:49
или app()['name']
короче однофигственно
Serhii Chaplia
@iwex
Mar 19 2015 00:49
я просто думал бинд похож на алиасы
Kirill Nesmeyanov
@SerafimArts
Mar 19 2015 00:50
если я не забыл что это - это оно и есть
а фасад ссылается на этот алиас
Serhii Chaplia
@iwex
Mar 19 2015 00:50
да нет
Kirill Nesmeyanov
@SerafimArts
Mar 19 2015 00:50
и все запросы на него перенаправляет на внутренности
а, не
я попутал с register
надо посмотреть, но там тоже ничего особо хитроумного
Serhii Chaplia
@iwex
Mar 19 2015 00:51
да, но запутало немного)
они смешали 4.2 с 5
как по мне
Kirill Nesmeyanov
@SerafimArts
Mar 19 2015 00:52
учитывая то, что Тейлор смешал коней и людей, а в 5ке усугубил всё это...
не удивительно
Serhii Chaplia
@iwex
Mar 19 2015 00:52
доки не полные
Kirill Nesmeyanov
@SerafimArts
Mar 19 2015 00:52
они никогда не будут полными
там только поверхностное
Serhii Chaplia
@iwex
Mar 19 2015 00:52
обидно)
Kirill Nesmeyanov
@SerafimArts
Mar 19 2015 00:52
а ты влезаешь в реализацию
Serhii Chaplia
@iwex
Mar 19 2015 00:52
а по апи хер разберешся
Kirill Nesmeyanov
@SerafimArts
Mar 19 2015 00:52
хм
а это есть в доках кстати
ну в 5.0 так же
Serhii Chaplia
@iwex
Mar 19 2015 00:52
4.2
там App:bind
Kirill Nesmeyanov
@SerafimArts
Mar 19 2015 00:53
а, ну это походу просто алиас
для внедрения
Serhii Chaplia
@iwex
Mar 19 2015 00:53
а в 5 $this->app->bind()
путают
Kirill Nesmeyanov
@SerafimArts
Mar 19 2015 00:53
первый аргумент - рандомное имя, второй - класс
Serhii Chaplia
@iwex
Mar 19 2015 00:54
если бы
хоотя
жа
Serhii Chaplia
@iwex
Mar 19 2015 00:54
да
оно помещает в массив
Kirill Nesmeyanov
@SerafimArts
Mar 19 2015 00:54
так попроще будет
Serhii Chaplia
@iwex
Mar 19 2015 00:55
завтра уже перечитаю 4.2
нуб в этом пока)
Kirill Nesmeyanov
@SerafimArts
Mar 19 2015 00:55
App::make судя по всему - создаёт новый инстанс, читает аргументы конструктора и подсовывает нужные данные туда
Serhii Chaplia
@iwex
Mar 19 2015 00:55
а то голова не соображает)
буду просто код писать(
Kirill Nesmeyanov
@SerafimArts
Mar 19 2015 00:56
а bind - делает возможным алиасы
на нужный класс для внедрения
имхо - di через инъекцию в метод - это антипаттерн
Serhii Chaplia
@iwex
Mar 19 2015 00:57
как я понял у нас есть массив app где хранятся все ссылки на классы (бинды), любой из них можно вызвать через make
Kirill Nesmeyanov
@SerafimArts
Mar 19 2015 00:57
в теории оно ещё и само может подхватить
через автолоадинг
Serhii Chaplia
@iwex
Mar 19 2015 00:57
и иинъекция ничего не решает
Kirill Nesmeyanov
@SerafimArts
Mar 19 2015 00:57
почему же - вполне решает
только ей неудобно пользоваться
особенно когда из одного метода контроллера - надо вызвать другой
Serhii Chaplia
@iwex
Mar 19 2015 00:58
а как ты пропишент в функции инъекцию?
Kirill Nesmeyanov
@SerafimArts
Mar 19 2015 00:58
в метод
в 5ой ларе они везде
в 4ой - только в конструкторе
просто прописать название класса перед аргументом
Serhii Chaplia
@iwex
Mar 19 2015 00:59
затер код
сек
App::bind('bill', function($app) { return new \App\Custom\Bill; });
в провайдере в регистере
теперь как в конроллере его использовть
через алиас bill
ну или я ничего не понимаю)
уверен в єтом на 90%)
*этом
Kirill Nesmeyanov
@SerafimArts
Mar 19 2015 01:04
app('bill')?
хм
стой, а так точно можно писать?
да
можно
ну тогда всё верно
App::make(...) или просто app(...)
Serhii Chaplia
@iwex
Mar 19 2015 01:05
а если использовать инъекцию,
?
с этим алиасом
Kirill Nesmeyanov
@SerafimArts
Mar 19 2015 01:06
проверь
тоже любопытно
=)
Serhii Chaplia
@iwex
Mar 19 2015 01:07
ну вот) и не работает)
Kirill Nesmeyanov
@SerafimArts
Mar 19 2015 01:08
ну вот
смешались кони люди
Serhii Chaplia
@iwex
Mar 19 2015 01:08
пишет - нет такого класса)
ну вот)
Kirill Nesmeyanov
@SerafimArts
Mar 19 2015 01:08
странно что нет
функция же объект
Serhii Chaplia
@iwex
Mar 19 2015 01:08
а как написать ты предлагаешь?
Kirill Nesmeyanov
@SerafimArts
Mar 19 2015 01:09
это намёк на то, что Тейлор опять накосячил
Serhii Chaplia
@iwex
Mar 19 2015 01:09
public function fff(bill $bill) {}
Kirill Nesmeyanov
@SerafimArts
Mar 19 2015 01:09
=)
__construct
у тебя же 4.2, а не 5
Serhii Chaplia
@iwex
Mar 19 2015 01:09
5
у меня
Kirill Nesmeyanov
@SerafimArts
Mar 19 2015 01:10
@iwex
4.2
там App:bind
аа
всё
ну вот
функция - это объект класса Closure
Serhii Chaplia
@iwex
Mar 19 2015 01:10
одинаково)
Kirill Nesmeyanov
@SerafimArts
Mar 19 2015 01:10
так что отсутствие оного - полный бред какой-то
Serhii Chaplia
@iwex
Mar 19 2015 01:11
в плане? не понял
Kirill Nesmeyanov
@SerafimArts
Mar 19 2015 01:11
ну в доках написано, что можно регать через бинд классы
аа
ну точно
всё
классы, а не объекты
LaravelButler

Приветствуем Вас, @boredkaka, в нашем дружном чате
В чате запрещена: реклама, спам, нецензурная лексика. Чат не место для оскорблений и выяснения отношений между участниками. За нарушение – Бан!

Русскоязычное сообщество Laravel
Самая свежая документация по Laravel 5
Документация по Laravel 4.2
Официальный сайт Laravel
Группа Вконтакте
А так же:
G+, Facebook, Twitter, GitHub

⇒ Перед тем как написать сообщение, пожалуйста, ознакомьтесь с разметкой Markdown ( Ctrl+Shift+M (Windows) Ctrl+Alt+M (Linux) Ctrl+Cmd+M (Mac) )

Kirill Nesmeyanov
@SerafimArts
Mar 19 2015 01:12
объекты через мейк
получается
короче
придёт серенький @greabock и укусит за
расскажет в общем, что мы все идиоты и покажет как делают настоящие мужЫки
=)
Serhii Chaplia
@iwex
Mar 19 2015 01:12
но никак через инъекцию)
Роман Сохарев
@greabock
Mar 19 2015 01:21
тут
Kirill Nesmeyanov
@SerafimArts
Mar 19 2015 01:21
ну ты видел
Роман Сохарев
@greabock
Mar 19 2015 01:21
ща, перечитаю что вы тут наспамили
Kirill Nesmeyanov
@SerafimArts
Mar 19 2015 01:21
мы обсуждали какого фига функция app bind регистрирует алиас на класс для di
и при этом если там замыкание - оно не доступно, только через make
Serhii Chaplia
@iwex
Mar 19 2015 01:24
надеемся на разъяснение)
Maxim
@Big-Shark
Mar 19 2015 01:25
Всем привет, что за неделю случилось координально нового?
Роман Сохарев
@greabock
Mar 19 2015 01:26
@iwex начнем с того, что сервис контейнер это просто такие "хранимки", куда ты можешь записать какие-то свои данные
это могут быть строки примитивы, замыкания или объекты
Kirill Nesmeyanov
@SerafimArts
Mar 19 2015 01:26
замыкание и есть объект =)
но допустим
Роман Сохарев
@greabock
Mar 19 2015 01:27
что такое DI я думаю объяснять не нужно?
Kirill Nesmeyanov
@SerafimArts
Mar 19 2015 01:28
а в инъекцию подсовываются только строки (с попыткой создать класс алиас), верно?
Serhii Chaplia
@iwex
Mar 19 2015 01:28
не нужно)
Kirill Nesmeyanov
@SerafimArts
Mar 19 2015 01:28
я имею ввиду при App::bind('AliasClass', TargetClass::class);
пропал =(
Роман Сохарев
@greabock
Mar 19 2015 01:30
когда ты делаешь такие вещи, и хочешь что бы разрешались зависимости, само собой TargetClass должен быть наследником или реализацией AliasClass
рассмотрим простую ситуацию
Kirill Nesmeyanov
@SerafimArts
Mar 19 2015 01:30
хм
не само собой
есть же функция class_alias
я про неё первым делом подумал
но спасибо за это уточнение
Роман Сохарев
@greabock
Mar 19 2015 01:31
допустим, вы не писали никаких биндов App::make('MyClass') просто создаст объект класса MyClass

допустим, у нас

class MyClass
{
    public function __construct(Some $object){}

}

тогда App::make('MyClass') создаст еще и объект класса Some, что бы разрешить зависимость

теперь финт ушами

class MyClass
{
    public function __construct(SomeInterface $object){}

}

тогда это должно быть уже вот так

App::bind('SomeInterface', 'SomeClass');
App::make('MyClass')
Kirill Nesmeyanov
@SerafimArts
Mar 19 2015 01:36
печально что этот иок сам не находит интерфейсы
есть же рефлексия
и кеш
Роман Сохарев
@greabock
Mar 19 2015 01:37
Там вроде есть какая-то возможность делать это через аннотации
но я не разбирался
Kirill Nesmeyanov
@SerafimArts
Mar 19 2015 01:37
в 4ой ларе нет аннтоаций из коробки
но да
я понял тебя
в любом случае я всё равно считаю di в метод - антипаттерном
может это и круто выглядит, но признаться - зачастую только мешает
Роман Сохарев
@greabock
Mar 19 2015 01:39
разговор не об этом, я думаю
Kirill Nesmeyanov
@SerafimArts
Mar 19 2015 01:39
верно
так что умалкиваю
Роман Сохарев
@greabock
Mar 19 2015 01:41
Суть в том, что когда мы делаем App::make() , айок попытается разрешить все зависимости.
Прочие фишки
App::singleton() - тут все ясно
App::instance() - привязывает заранее подготовленный объект
Замыкания используются, как правило, для того чтобы заранее пресетировать объект перед тем, как передать его в конструктор
Kirill Nesmeyanov
@SerafimArts
Mar 19 2015 01:44
синглтоны и инстансы проталкиваются, как зависимость?
т.е. их можно получить в виде инъекции?
про замыкания, как выяснилось - нет
Роман Сохарев
@greabock
Mar 19 2015 01:46
Это странно, вы уверены?
Kirill Nesmeyanov
@SerafimArts
Mar 19 2015 01:46
присобачиваются только внутренности замыкания
судя по всему
можно проверить
кстати
class MyClosure extends Closure implements SomeAnyInterface
{
  public function __invoke()
  {
      // some
  }
}

App::instance('SomeAnyInterface', (new ReflectionClass(MyClosure::class))->newInstanceWithoutConstructor());

///
class SomeController
{
  public function any(SomeAnyInterface $test) {}
}
оно ведь вызывает автоматом замыкания при bind?
короче забей
я запутался =)
Роман Сохарев
@greabock
Mar 19 2015 01:56
    $this->app->bind(UserBarInterface::class, function($app){
        return $app->make('App\User\Widgets\BackendUserBar');
    });
    $some = $this->app->make(Processor::class);

class BackendUserBar implements UserBarInterface{

}
class Processor {

    public function __construct(UserBarInterface $bar)
    {

    }

}
все работает
Kirill Nesmeyanov
@SerafimArts
Mar 19 2015 01:57
функция автоматом вызывается ;)
а функция - это объект
я к этому веду
так же, как и генератор
Роман Сохарев
@greabock
Mar 19 2015 01:57
я вообще не понимаю, о чем ты. Так что "все логично"
Kirill Nesmeyanov
@SerafimArts
Mar 19 2015 01:58
я спросил - вызывается ли автоматом замыкание при instance
и привёл выше пример
Роман Сохарев
@greabock
Mar 19 2015 01:58
естественно
Kirill Nesmeyanov
@SerafimArts
Mar 19 2015 01:58
ну тогда гг
Роман Сохарев
@greabock
Mar 19 2015 01:59
это же просто инструкция "как создать" объект
Kirill Nesmeyanov
@SerafimArts
Mar 19 2015 01:59
нет
это объект
замыкание - это объект класса Closure
и ничто не мешает его расширить
=)
я к этому веду
но оно будет автоматом вызываться
т.е. по факту объект не будет сохранён
а будет сохранён результат метода __invoke
Роман Сохарев
@greabock
Mar 19 2015 02:01
ну дык положи ее в замыкание.
замыкание в замыкании
матрешка короче
Kirill Nesmeyanov
@SerafimArts
Mar 19 2015 02:02
замыкание засунуть в замыкание
мдэ
не, ну правильно
ты прав
всё, теперь точно спать
=)
приятных снов
завтра затею холивар по поводу того, что DI - это зло
от которого стоит избавляться
:D
Роман Сохарев
@greabock
Mar 19 2015 02:03
лол
ок
NelinD
@NelinD
Mar 19 2015 06:12
alt
Определенно диалог месяца
Vadim Shashin
@Enapiuz
Mar 19 2015 07:28
Всем привет. Может я не совсем понимаю, как готовить тесты, но как это вылечить? https://gist.github.com/Enapiuz/4790f497f572f4992368
Alexander Popov
@ruelephant
Mar 19 2015 07:42
@NelinD я их удалил потому что думал что они в core продублированы
в самом пакете лары
NelinD
@NelinD
Mar 19 2015 07:44

он исправлял фатальный недостаток лары, наверняка

:-D

Alexander Popov
@ruelephant
Mar 19 2015 07:44
да нет же, я всегда все упрощаю, а потом уже раскручиваю
переборщил
когда много всего сразу мельтишит, глаза разбегаются. По пунктам не удобно учить
NelinD
@NelinD
Mar 19 2015 07:45
@ruelephant =)
Alexander Popov
@ruelephant
Mar 19 2015 07:54
у яндекса на музыке падает в 500 ошибку
писец дожили
LaravelButler

Приветствуем Вас, @borisenki, в нашем дружном чате
В чате запрещена: реклама, спам, нецензурная лексика. Чат не место для оскорблений и выяснения отношений между участниками. За нарушение – Бан!

Русскоязычное сообщество Laravel
Самая свежая документация по Laravel 5
Документация по Laravel 4.2
Официальный сайт Laravel
Группа Вконтакте
А так же:
G+, Facebook, Twitter, GitHub

⇒ Перед тем как написать сообщение, пожалуйста, ознакомьтесь с разметкой Markdown ( Ctrl+Shift+M (Windows) Ctrl+Alt+M (Linux) Ctrl+Cmd+M (Mac) )

Константин Брызгалин
@constb
Mar 19 2015 08:31
@Enapiuz конфиг не инстанцируется через IoC. его вручную создаёт Kernel когда производит bootstrap. в стандартном тесткейсе лары это происходит когда ты вызываешь request.
но можно кернел забутстрапить руками. только если потом код будет обращаться к реквесту - надо либо создавать самопальный реквест типа $this->app->instance('request', \Illuminate\Http\Request::create('/')); либо если он получается через контейнер - можно его мокать. во втором случае можно ассертить обращения к полям реквеста и возвращать любые данные в зависимости от требований теста.
Alexander Popov
@ruelephant
Mar 19 2015 08:35
свежих костылей принесли
Константин Брызгалин
@constb
Mar 19 2015 08:35
ну не моя вина что app('config') в ларе ни на что не забинден
Alexander Popov
@ruelephant
Mar 19 2015 08:36
напоминает
Константин Брызгалин
@constb
Mar 19 2015 08:37
есть ещё один прикол. если App\Service\MyService обращается к config(), можно сделать мок для config и разместить его в неймспейсе App\Service - тогда он будет вызван вместо родного.
Alexander Popov
@ruelephant
Mar 19 2015 08:37
может стоит задуматься "почему я это решают", а не "как это решить"
какая задача то общая стоит?
Константин Брызгалин
@constb
Mar 19 2015 08:38
тесты-то как-то надо писать. у меня кодесепшен, но с юнит-тестами такая же беда - надо бутстрапить кернел и мокать все зависимости. тем более что у Тейлора Illuminate\blahblah\TestCase работает совершенно точно так же
Alexander Popov
@ruelephant
Mar 19 2015 08:39
ну если у тейлора
то конечно
Vadim Shashin
@Enapiuz
Mar 19 2015 08:41
@constb спасибо, пойду пробовать бутстрапить руками, к реквесту обращаться благо не надо :)
Константин Брызгалин
@constb
Mar 19 2015 08:44

@Enapiuz

        $app = require $basePath . '/bootstrap/app.php';
        $app->make('Illuminate\Contracts\Console\Kernel')->bootstrap();

у меня вот так.
и ещё полезно посмотреть в Illuminate\Foundation\Testing\ApplicationTrait и Illuminate\Foundation\Testing\AssertionsTrait

Vadim Shashin
@Enapiuz
Mar 19 2015 08:49
@constb как всегда, соберешься первый раз в жизни нормально начать писать тесты, а тут на тебе костылищи
Alexander Popov
@ruelephant
Mar 19 2015 08:51
тесты от лукавого :)
еще один способо "унифицировать" труд разработчиков, как документация. Что бы если что можно было заменить легко.
а так хрен вам, смена разработчика это весь проект с нуля переписывать
[/сарказм]
NelinD
@NelinD
Mar 19 2015 08:54
@ruelephant ога, попадает такой незаменимый под машину и переписывать заново
Константин Брызгалин
@constb
Mar 19 2015 08:54
я к тестам всегда пренебрежительно относился. но сейчас пишу первый свой проект с покрытием тестами и надо сказать, что уже не раз они мне помогали - то опечатки где-то влезут, то просто ошибки, то при рефакторинге напортачил. с тестами сразу это вылазит. и это уже сейчас, когда проект ещё совсем маленький. на большом проекте наверное без тестов вообще беда.
Alexander Popov
@ruelephant
Mar 19 2015 09:12
@NelinD еще один довод сохранить мозг для компании, как будут технологии тебя разморозят и спросят:
"А ты помнишь как реализовано в модули XXX фитча YYY :)"
а ты такой: "да говно вопрос, щаз вспомню. А что у вас ZZZ уже накрылся? Там же 32 значный int использовали, а уже 2038 год идет"
NelinD
@NelinD
Mar 19 2015 09:15
@ruelephant если они используют тот же код у них проблемы посерьезнее 32 Int
Alexander Popov
@ruelephant
Mar 19 2015 09:15
в банке это возможно
там еще с 90стых разработки используются
ибо стабильность важнее
"работает не трогай"
NelinD
@NelinD
Mar 19 2015 09:17
@ruelephant и для совместимости с новыми требованиями пишутся тонны прослоек, в которых один хрен надо отлавливать те же баги
Alexander Popov
@ruelephant
Mar 19 2015 09:20
я помню как у сбера ороклиное решение на репликации ночью сдохло
вот это была новость, всю ночь транзакции не ходили
более того, они и днем не смогли починить
искали "за любые деньги" специалиста
вернее не так, сдохла база, переключение на резервный хост не помогло (репликация была низкоуровная, байт в байт, все ошибки переехали и на резерв)
Alexander Popov
@ruelephant
Mar 19 2015 09:25
осложнялось все тем что использовался на тот момент свежий IBM P795 сервер в полной конфигурации, их вообще очень мало в мире
Roman
@starikovr
Mar 19 2015 10:17
подскажите пожалуйста, есть блейд шаблон, который екстендит другой (общий layout)
в дочернем шаблоне вынес общие компоненты в отдельные файлы, пишу include потом yied
он, зараза, рендерит их не в нужное место, а просто в начало body
Константин Брызгалин
@constb
Mar 19 2015 10:20
инклюды не надо йелдить - они инклюдятся в нужное место в момент вызова
Roman
@starikovr
Mar 19 2015 10:20
то есть достаточно просто include и блейд выведет содержимое?
да, действительно
спасибо, просто мне рассказали, что оно работает так
Kirill Nesmeyanov
@SerafimArts
Mar 19 2015 10:22
ты забыл section мб?
Roman
@starikovr
Mar 19 2015 10:23
а в инклюды параметры надо передавать или внутри них общий массив данных, переданный вьюшке будет доступен?
если внутри них что то динамически формируется?
Константин Брызгалин
@constb
Mar 19 2015 10:47
параметры у инклюдов свои конечно же
но они видят шаренные переменные (View::share)
Kirill Nesmeyanov
@SerafimArts
Mar 19 2015 10:47
можно композером перекидывать
Константин Брызгалин
@constb
Mar 19 2015 10:49
ну да, инклюд - это тот же вид. у него может быть и свой композер если надо. например, меню сайта может получать пункты меню через композер, а текущий активный пункт - через параметр.
Kirill Nesmeyanov
@SerafimArts
Mar 19 2015 10:51
наверное всё же стоит назвать это вьюкомпозером
дабы не было путаницы
Viktor Grachev
@azuron
Mar 19 2015 11:07
Добрый день всем))
Kirill Nesmeyanov
@SerafimArts
Mar 19 2015 11:09
И тебе добра
workmi
@workmi
Mar 19 2015 11:10
Привет.
LaravelButler

Приветствуем Вас, @workmi, в нашем дружном чате
В чате запрещена: реклама, спам, нецензурная лексика. Чат не место для оскорблений и выяснения отношений между участниками. За нарушение – Бан!

Русскоязычное сообщество Laravel
Самая свежая документация по Laravel 5
Документация по Laravel 4.2
Официальный сайт Laravel
Группа Вконтакте
А так же:
G+, Facebook, Twitter, GitHub

⇒ Перед тем как написать сообщение, пожалуйста, ознакомьтесь с разметкой Markdown ( Ctrl+Shift+M (Windows) Ctrl+Alt+M (Linux) Ctrl+Cmd+M (Mac) )

workmi
@workmi
Mar 19 2015 11:11
Привет
Привет
JhaoDa
@jhaoda
Mar 19 2015 11:11
Давай четвертый раз, на бис
Kirill Nesmeyanov
@SerafimArts
Mar 19 2015 11:12
Привет
ой
простите, я не хотел нарушать ваши традиции, господа
@workmi извини что перебил, продолжай пожалуйста
Viktor Grachev
@azuron
Mar 19 2015 11:12

Ребята что за бред у меня происходит)) У меня два сайта на Ларе 4. На одном есть форма которая создает проекты с фотками и все круто)) На второй сайт поставил такую же форму. Чтобы отправлять фотки.
Форма

                           {{ Form::open(array('url' => 'user-photos', 'method'=>'POST', 'files'=>true)) }}
                                    <div class="form-group">
                                    {{ Form::label('images', 'Photos*') }}
                                    {{ Form::file('images[]', array('multiple'=>true)) }}
                                    @if($errors->has('images'))
                                        {{ $errors->first('images') }}
                                    @endif
                                </div>
                                {{ Form::close() }}

Контроллер

 public function postForm()
    {

        $images              = Input::get('images');
        echo '<pre>';
        var_dump($images);
        exit();
workmi
@workmi
Mar 19 2015 11:13
С Siylius ктонить разбирался ?
Viktor Grachev
@azuron
Mar 19 2015 11:13
при попытке посмотреть картиночки у меня там NULL
workmi
@workmi
Mar 19 2015 11:13
Привет
Привет
Viktor Grachev
@azuron
Mar 19 2015 11:14
те я не могу обработать все мои картиночки)) хотя на 1 сайте все бегает нормально)) не понимаю куда пропадают картинки. любые остальные поля приходят в контроллер
как такое может быть? Почему не получаю массив картинок? или я не верно их передаю из формы?
workmi
@workmi
Mar 19 2015 11:17
get и post может
Viktor Grachev
@azuron
Mar 19 2015 11:18
@workmi я же пишу в форме 'method'=>'POST'
в роутах тоже все корректно POST
мистика блин
Kirill Nesmeyanov
@SerafimArts
Mar 19 2015 11:18
та не, всё должно работать
unlike777
@unlike777
Mar 19 2015 11:18
@azuron Input::all() выводил?
Kirill Nesmeyanov
@SerafimArts
Mar 19 2015 11:19
да, попробуй для начала dd(Input::all());
Viktor Grachev
@azuron
Mar 19 2015 11:19
@unlike777 да пробовал выводить
workmi
@workmi
Mar 19 2015 11:20
Добрый самуритяни , есть кто с Sylius работал ?
Viktor Grachev
@azuron
Mar 19 2015 11:20
обычные поля показывал как массив а картиночки как обекты и там везде стит private
workmi
@workmi
Mar 19 2015 11:22
Попробуй ченть другое передать....может в функции get что-то не пускает картинки
или в самой функции попробуй ловить
Viktor Grachev
@azuron
Mar 19 2015 11:23
Получаю вот так если пишу var_dump(Input::all());
array(5) {
  ["_token"]=>
  string(40) "z5jbDMSjToD8W2OQFisZtdQj3XdgRmSyi9Ngf6ee"
  ["project_name"]=>
  string(9) "dasdasdsa"
  ["desc"]=>
  string(10) "dssadasdas"
  ["project_video"]=>
  string(0) ""
  ["images"]=>
  array(3) {
    [0]=>
    object(Symfony\Component\HttpFoundation\File\UploadedFile)#9 (7) {
      ["test":"Symfony\Component\HttpFoundation\File\UploadedFile":private]=>
      bool(false)
      ["originalName":"Symfony\Component\HttpFoundation\File\UploadedFile":private]=>
      string(6) "1.jpeg"
      ["mimeType":"Symfony\Component\HttpFoundation\File\UploadedFile":private]=>
      string(10) "image/jpeg"
      ["size":"Symfony\Component\HttpFoundation\File\UploadedFile":private]=>
      int(454170)
      ["error":"Symfony\Component\HttpFoundation\File\UploadedFile":private]=>
      int(0)
      ["pathName":"SplFileInfo":private]=>
      string(14) "/tmp/php5zuuHo"
      ["fileName":"SplFileInfo":private]=>
      string(9) "php5zuuHo"
    }
    [1]=>
    object(Symfony\Component\HttpFoundation\File\UploadedFile)#10 (7) {
      ["test":"Symfony\Component\HttpFoundation\File\UploadedFile":private]=>
      bool(false)
      ["originalName":"Symfony\Component\HttpFoundation\File\UploadedFile":private]=>
      string(6) "2.jpeg"
      ["mimeType":"Symfony\Component\HttpFoundation\File\UploadedFile":private]=>
      string(10) "image/jpeg"
      ["size":"Symfony\Component\HttpFoundation\File\UploadedFile":private]=>
      int(439704)
      ["error":"Symfony\Component\HttpFoundation\File\UploadedFile":private]=>
      int(0)
      ["pathName":"SplFileInfo":private]=>
      string(14) "/tmp/phpT02nx5"
      ["fileName":"SplFileInfo":private]=>
      string(9) "phpT02nx5"
    }
    [2]=>
    object(Symfony\Component\HttpFoundation\File\UploadedFile)#11 (7) {
      ["test":"Symfony\Component\HttpFoundation\File\UploadedFile":private]=>
      bool(false)
      ["originalName":"Symfony\Component\HttpFoundation\File\UploadedFile":private]=>
      string(6) "3.jpeg"
      ["mimeType":"Symfony\Component\HttpFoundation\File\UploadedFile":private]=>
      string(10) "image/jpeg"
      ["size":"Symfony\Component\HttpFoundation\File\UploadedFile":private]=>
      int(493035)
      ["error":"Symfony\Component\HttpFoundation\File\UploadedFile":private]=>
      int(0)
      ["pathName":"SplFileInfo":private]=>
      string(14) "/tmp/php5XjBuM"
      ["fileName":"SplFileInfo":private]=>
      string(9) "php5XjBuM"
    }
  }
}
@workmi уже всю голову поломал что может не пускать данные))
workmi
@workmi
Mar 19 2015 11:24
hm , вроде как льет
а var_dump(Input::get()) ?
Viktor Grachev
@azuron
Mar 19 2015 11:27
@workmi это и есть вывод var_dump(Input::get())
Kirill Nesmeyanov
@SerafimArts
Mar 19 2015 11:27
аааа
Viktor Grachev
@azuron
Mar 19 2015 11:27
вот в этом и мистика))
Kirill Nesmeyanov
@SerafimArts
Mar 19 2015 11:27
dd(Input::files())
JhaoDa
@jhaoda
Mar 19 2015 11:27
@azuron потому что попробуй обращаться к файлам Input::files->all()
Kirill Nesmeyanov
@SerafimArts
Mar 19 2015 11:27
files - это не константа
Viktor Grachev
@azuron
Mar 19 2015 11:27
@SerafimArts аааа блииин понял )))
JhaoDa
@jhaoda
Mar 19 2015 11:28
@SerafimArts какая константа?
У констант появились методы?
Kirill Nesmeyanov
@SerafimArts
Mar 19 2015 11:29
ты вначале написал files, как константу
Input::files->all()
вот так
я и написал, что это не константа
Viktor Grachev
@azuron
Mar 19 2015 11:29
@SerafimArts спасибо большое теперь понял))
JhaoDa
@jhaoda
Mar 19 2015 11:30
@SerafimArts так и есть, это FileBag
Kirill Nesmeyanov
@SerafimArts
Mar 19 2015 11:30
константа может быть только скаляром
JhaoDa
@jhaoda
Mar 19 2015 11:30
А, в Input нет такого
Kirill Nesmeyanov
@SerafimArts
Mar 19 2015 11:30
в пыхе
а у тебя объект
JhaoDa
@jhaoda
Mar 19 2015 11:31
@SerafimArts $request->files->all()
Kirill Nesmeyanov
@SerafimArts
Mar 19 2015 11:31
так что такая коснтрукция физически невозможна
JhaoDa
@jhaoda
Mar 19 2015 11:31
Прекрасно работает
Kirill Nesmeyanov
@SerafimArts
Mar 19 2015 11:31

у тебя написано:

@azuron потому что попробуй обращаться к файлам Input::files->all()

JhaoDa
@jhaoda
Mar 19 2015 11:31
Я уже понял, что Input фасад и там так нельзя, поэтому я фасады не оч...

@SerafimArts ты читать не умеешь?

А, в Input нет такого

Kirill Nesmeyanov
@SerafimArts
Mar 19 2015 11:32
почему нету?
files()
вру
file('images')
workmi
@workmi
Mar 19 2015 11:32
Laravel на Symfony же написана ?
Kirill Nesmeyanov
@SerafimArts
Mar 19 2015 11:33
Laravel на всём, чём угодно написана
JhaoDa
@jhaoda
Mar 19 2015 11:33
@SerafimArts ну ага, прям никакой разницы между files->all() и file('images')
Kirill Nesmeyanov
@SerafimArts
Mar 19 2015 11:33
а симфони - один из кусков
зато нет разницы, между Request::files()
=)
Viktor Grachev
@azuron
Mar 19 2015 11:34
ребята я пишу dd(Input::files->all());
получаю
syntax error, unexpected '->' (T_OBJECT_OPERATOR)
или я что то не так делаю
JhaoDa
@jhaoda
Mar 19 2015 11:34
@azuron ты тоже читать не умеешь?
Kirill Nesmeyanov
@SerafimArts
Mar 19 2015 11:34
я уже написал
JhaoDa
@jhaoda
Mar 19 2015 11:34
Уже выяснили, что так нельзя
Viktor Grachev
@azuron
Mar 19 2015 11:35
@SerafimArts оки нельзя, буду пробовать дальше
workmi
@workmi
Mar 19 2015 11:36
ну из константы может её привратить обратно в переменную ? :)
Kirill Nesmeyanov
@SerafimArts
Mar 19 2015 11:36
фасад Input использует точно такой же id, как и реквест
так что Input::files()
protected static function getFacadeAccessor() { return 'request'; }
JhaoDa
@jhaoda
Mar 19 2015 11:37
@SerafimArts нету Request::files()
А, стопэ, вы же про четверку. Там может и есть, не помню...
Viktor Grachev
@azuron
Mar 19 2015 11:38
да 4 лара
Kirill Nesmeyanov
@SerafimArts
Mar 19 2015 11:39
а в чём разница?
HttpFoundation один и тот же
JhaoDa
@jhaoda
Mar 19 2015 11:39
@SerafimArts в пятерке нету Request::files()
Kirill Nesmeyanov
@SerafimArts
Mar 19 2015 11:39
сейчас открыл код фасада...
у меня нет слов
как вам такой код Тейлора?
    public static function __callStatic($method, $args)
    {
        $instance = static::getFacadeRoot();

        switch (count($args))
        {
            case 0:
                return $instance->$method();

            case 1:
                return $instance->$method($args[0]);

            case 2:
                return $instance->$method($args[0], $args[1]);

            case 3:
                return $instance->$method($args[0], $args[1], $args[2]);

            case 4:
                return $instance->$method($args[0], $args[1], $args[2], $args[3]);

            default:
                return call_user_func_array(array($instance, $method), $args);
        }
    }
может объясните мне в чём прикол?
Viktor Grachev
@azuron
Mar 19 2015 11:41

смотрите делаю так, в контроллере принимаю картинки

$images             = Input::get('images');

foreach($images as $image){
                echo $image->getClientOriginalName();
}

и у меня ошибка)) типа нету данных)) хотя на 1 сайте все так же пашет

Kirill Nesmeyanov
@SerafimArts
Mar 19 2015 11:42
почему это всё нельзя заменить на:
public static function __callStatic($method, array $args)
{
    return call_user_func_array([static::getFacadeRoot(), $method], $args);
}
?
JhaoDa
@jhaoda
Mar 19 2015 11:42
@SerafimArts в четверке тоже нету Request::files()
Kirill Nesmeyanov
@SerafimArts
Mar 19 2015 11:43
@jhaoda ты читать умеешь?
я привёл пример кода проксирования фасадов
из лары
ты можешь заметить, что files - Это поле
а фасад не ресолвит поля
так что мб только так:
Input::getFacadeRoot()->files
но проще конечно же сквозь реквест
JhaoDa
@jhaoda
Mar 19 2015 11:45
@SerafimArts мы говорим метод Request::files()
Kirill Nesmeyanov
@SerafimArts
Mar 19 2015 11:45
files - Это поле
а не метод
у реквеста тоже нет такого метода
JhaoDa
@jhaoda
Mar 19 2015 11:45
Про что я и талдычу
Kirill Nesmeyanov
@SerafimArts
Mar 19 2015 11:45
Request от Input отличается одним
unlike777
@unlike777
Mar 19 2015 11:46
@azuron Может картинки слишком большие, попробуй очень маленькую картинку загрузить
Kirill Nesmeyanov
@SerafimArts
Mar 19 2015 11:46
отсутсвием метода get
JhaoDa
@jhaoda
Mar 19 2015 11:46
Кароче, надо спасать мозг от вас
Viktor Grachev
@azuron
Mar 19 2015 11:46
@unlike777 нее там 100кб они
Kirill Nesmeyanov
@SerafimArts
Mar 19 2015 11:46
так что решение
тадам
dd(app('request')->files)
workmi
@workmi
Mar 19 2015 11:46
:)
JhaoDa
@jhaoda
Mar 19 2015 11:46
А лучше аннотациями!
Kirill Nesmeyanov
@SerafimArts
Mar 19 2015 11:47
но по-моему лучше почитать доки
JhaoDa
@jhaoda
Mar 19 2015 11:47
Всё становится лучше с аннотациями!
Kirill Nesmeyanov
@SerafimArts
Mar 19 2015 11:47
да
например так написать:
/**
 * @var Request\Files("images")
 */
potected $files = []
JhaoDa
@jhaoda
Mar 19 2015 11:47
А аннотации с аннотациями — просто оргазм...
Viktor Grachev
@azuron
Mar 19 2015 11:47
@SerafimArts делаю dd(app('request')->files);
получаю Call to undefined method Illuminate\Http\Request::files()
JhaoDa
@jhaoda
Mar 19 2015 11:47
:)
Капец, а какая разница-то?
Kirill Nesmeyanov
@SerafimArts
Mar 19 2015 11:48
получаю Call to undefined method Illuminate\Http\Request::files()
это просто лол
:D
ща
JhaoDa
@jhaoda
Mar 19 2015 11:49
@azuron пиши Request::file(). Он вернет все файлы, если не задан параметр
Kirill Nesmeyanov
@SerafimArts
Mar 19 2015 11:49
This message was deleted
да
workmi
@workmi
Mar 19 2015 11:49
И из реквеста выбирать ? )
Kirill Nesmeyanov
@SerafimArts
Mar 19 2015 11:49
пофигу
это одно и то же
просто Тейлору захотелось 10 способов получения одного и того же с разным резульатом и разными возможностями
в результате Input::get() То же самое, что и Input::input(), что и Request::input()
JhaoDa
@jhaoda
Mar 19 2015 11:51
И опять Тэйлор
Тэйлор как спит, интересно...
Viktor Grachev
@azuron
Mar 19 2015 11:51
@SerafimArts спасибо тебе огромное добрый человек!!! все пошло)) $files = Input::file('files');
JhaoDa
@jhaoda
Mar 19 2015 11:51
Серафим его склоняет по десять раз на дню...
Kirill Nesmeyanov
@SerafimArts
Mar 19 2015 11:51
@jhaoda а кто по твоему?
Viktor Grachev
@azuron
Mar 19 2015 11:51
Всем спасибо за советы, выручили очень сильно!
Kirill Nesmeyanov
@SerafimArts
Mar 19 2015 11:51
есть Symfony request
отличный и удобный класс
Input и Request фасады - тупо ссылаются на него
причём копии
но т.к. они ссылаются на него - они блочат доступ к полям инстанса
workmi
@workmi
Mar 19 2015 11:53
Серафим , а ты давно Симфони начал изучать ?
Kirill Nesmeyanov
@SerafimArts
Mar 19 2015 11:53
т.к. проксируют всё только с помощью __callStatic
JhaoDa
@jhaoda
Mar 19 2015 11:53
Я из фасадов лишь иногда юзаю Auth, но стараюсь избавиться от этого
Kirill Nesmeyanov
@SerafimArts
Mar 19 2015 11:53
я вообще симфони не изучал
JhaoDa
@jhaoda
Mar 19 2015 11:53
Чего и вам желаю. И переходить на пятерку, и не слушать Серафимов
workmi
@workmi
Mar 19 2015 11:53
А Laravel ? :)
Kirill Nesmeyanov
@SerafimArts
Mar 19 2015 11:53
лара - это мешанина из симфони и всего что есть на свете, просто скреплённая, как выяснилось только что - соплями
workmi
@workmi
Mar 19 2015 11:54
ну ...мешанина...из ...симфони...
Kirill Nesmeyanov
@SerafimArts
Mar 19 2015 11:54
и всего, что угодно, да
причём это всё заткнуто в контейнеры, которым урезают функционал
JhaoDa
@jhaoda
Mar 19 2015 11:54
@SerafimArts использую другой фреймворк, что ты возишься с ним да с нами, убогими?
workmi
@workmi
Mar 19 2015 11:54
Ну sylius такае же венегрета
Kirill Nesmeyanov
@SerafimArts
Mar 19 2015 11:55
@jhaoda потому что он мне нравится
workmi
@workmi
Mar 19 2015 11:55
Ну что в ларе нельзя новый бандл сляпить ?
Kirill Nesmeyanov
@SerafimArts
Mar 19 2015 11:55
то что он мне нравится - не значит, что он не состоит из... хм
и наоборот
workmi
@workmi
Mar 19 2015 11:55
лара - это фремворк ?
JhaoDa
@jhaoda
Mar 19 2015 11:58
@workmi а есть сомнения?
workmi
@workmi
Mar 19 2015 12:01
@jhaoda сомнений нет )
А что за анотации ? для описания сущностей ?
Kirill Nesmeyanov
@SerafimArts
Mar 19 2015 12:06
декларативщина в суровом мире императивного программирования
workmi
@workmi
Mar 19 2015 12:08
Кирилл, а вы в Баумнском учились ?
Kirill Nesmeyanov
@SerafimArts
Mar 19 2015 12:08
Да
и не "вы", а "ты"
=)
мне не 50 лет
workmi
@workmi
Mar 19 2015 12:10
ок )
про wolframalpha слашал же ?
Kirill Nesmeyanov
@SerafimArts
Mar 19 2015 12:12
нет
workmi
@workmi
Mar 19 2015 12:12
хм...как так....математический сервис-сайт
От дядьки ктоорый на фракталах помешан
Kirill Nesmeyanov
@SerafimArts
Mar 19 2015 12:15
не интересуюсь подобным
увы и ах
workmi
@workmi
Mar 19 2015 12:15
Ну в математике же соображаешь ? можешь найти точку в окружности ?
Kirill Nesmeyanov
@SerafimArts
Mar 19 2015 12:16
о, наверняка там что-то связанное с числом Пи
:D
workmi
@workmi
Mar 19 2015 12:19
ну да )) в единичной окружности....узнать координаты точки )
как вариант - пересечение двух хорд....но у хорды должны быть две точки на окружности....и через одну точку можно провести множество хорд...следовательно...не айс
Kirill Nesmeyanov
@SerafimArts
Mar 19 2015 12:24
это максимум на что я способен: http://jsbin.com/quxigoruho/1/edit?output
при нахождении точек пересечения
NelinD
@NelinD
Mar 19 2015 12:25
@workmi координаты точки относительно чего?
@workmi чем задана точка?
@workmi начни с этого
Kirill Nesmeyanov
@SerafimArts
Mar 19 2015 12:25
карандашом
относительно центра вселенной
NelinD
@NelinD
Mar 19 2015 12:26
@SerafimArts тогда и ответ примерно такой
Kirill Nesmeyanov
@SerafimArts
Mar 19 2015 12:26
я и ответил
привёл в пример старенькую наработку физического движка
если что - там кнопочка "Run with JS"
Ruslan Koloskov
@softua
Mar 19 2015 12:30
всем привет.
workmi
@workmi
Mar 19 2015 12:30
Привет
Ruslan Koloskov
@softua
Mar 19 2015 12:31

подскажите, можно ли именовать Route::group?
что бы сделать типа такого:

Route::group(['as' => 'api'], function ()
{
    Route::get('users', ['as' => 'users', 'uses' => 'AjaxController@users']);
});

и потом получать урл как route('api.users').
не?

Kirill Nesmeyanov
@SerafimArts
Mar 19 2015 12:32
можно
создать свой класс, отнаследоваться от оригинала и подменить фасад своим
но это ад
так что лучше даже не начинать
Ruslan Koloskov
@softua
Mar 19 2015 12:33
понятно. :)
спс.
Kirill Nesmeyanov
@SerafimArts
Mar 19 2015 12:33
там просто ещё надо подменять внутренности
т.к. лара считает, что она самая умная
и пермнентно инициализирует роутинг
*свой роутинг
а нужен кастомный
Ruslan Koloskov
@softua
Mar 19 2015 12:35
@SerafimArts ясно, спс.
NelinD
@NelinD
Mar 19 2015 12:36
@SerafimArts надо всего лишь провести операцию на сердце бензопилой=)
Oleg
@tremor-od
Mar 19 2015 12:38
парни, подскажите пожалуйста можно ли в 4.2 версии поместить данные в сессию с указанием времени
Session::set('user', $user, '60');
ошибку не выдает но не понятно работает ли
Kirill Nesmeyanov
@SerafimArts
Mar 19 2015 12:41
нет
Alexander Popov
@ruelephant
Mar 19 2015 12:42
Session::set('user', [microtime(true), $user]);
далее просто вычислешь, прошло ли с $user[0] время или нет
@tremor-od
Oleg
@tremor-od
Mar 19 2015 12:54
@ruelephant спасибо
Roman
@starikovr
Mar 19 2015 14:05
в блейде можно как то проверить на существование переменной?
к примеру, если передали массив с параметрами во вьюшку, то рисуем элемент с этими параметрами, если не передавали - то не рисуем
или флаг обязательно передавать какой то нужно?
Kirill Nesmeyanov
@SerafimArts
Mar 19 2015 14:05
@if(isset($var))
Roman
@starikovr
Mar 19 2015 14:06
ээм, ок)
он все таки интерпретирует такие вещи?
спасибо!
Soprun Vladislav
@vlsoprun
Mar 19 2015 14:21
@softua Ну вообще у Route::group есть prefix Route::group(['prefix' => 'api'], function () { Route::get('users', ['as' => 'users', 'uses' => 'AjaxController@users']); });
Kirill Nesmeyanov
@SerafimArts
Mar 19 2015 14:25
@vlsoprun префикс - не алиас
Soprun Vladislav
@vlsoprun
Mar 19 2015 14:27
@SerafimArts У меня prefix = manager, если все Route в нем станут начинаться с /manager/
@vlsoprun Route::group(['middleware' => 'admin', 'prefix' => 'manager'], function () { Route::resource('product', 'Product', ['except' => ['index', 'show']]); });
URL: /manager/product/{product}/edit
Kirill Nesmeyanov
@SerafimArts
Mar 19 2015 14:30
повторюсь
Soprun Vladislav
@vlsoprun
Mar 19 2015 14:33
@SerafimArts Ну так к нему можно обратиться route('manager.product.edit', $product)
Наверное я чего то не понял ))
Kirill Nesmeyanov
@SerafimArts
Mar 19 2015 14:34
можно, но это автоматом
человек просил ручной вариант
=)
Soprun Vladislav
@vlsoprun
Mar 19 2015 14:35
@SerafimArts ))
Kirill Nesmeyanov
@SerafimArts
Mar 19 2015 14:35
но ты меня убедил
тоже вариант
JhaoDa
@jhaoda
Mar 19 2015 14:47
Товарищи, а можно пихать бизнес-логику в репозиторий?
Maxim
@Big-Shark
Mar 19 2015 14:48
@jhaoda почему нет?
JhaoDa
@jhaoda
Mar 19 2015 14:48
Например, при апдейте сущности надо в зависимости от некоторых условий установить разные значений какого-то атрибута. Очень тянутся руки упихать это в репу, но правильно ли это?
@Big-Shark ну разные гуру утверждают, что репа должна быть тупо коллекцией, она ни порождать, ни изменять не должна
Я потихоньку прихожу к пониманию того, что это должны делать команды, но вводить ещё одну сущность-прослойку мне сейчас ваще влом
workmi
@workmi
Mar 19 2015 14:53
а там функция пре апдейт должна быть...тоесть когда атрибут изменяется ...функция перед
Maxim
@Big-Shark
Mar 19 2015 14:55
@jhaoda тут все на взгляд разработчика, я допустим вообще люблю КИСС, и пихаю все это в АР, в 99 процентах этого хватает, если нет то делаеш репы, если и там не хочеш апдейты делать, то делаеш команды, и переносиш логику туда, но незабывай что с каждыйм уровнем код становится все сложней и все запутаней.
Denis Isaychenko
@Rhincodon
Mar 19 2015 15:19
@jhaoda бизнес логику нужно пихать в интерфейс репозитория, а не в реализацию, вот. Или в абстрактный класс, если метод раскрыть нужно например. А условия при которых создавать/обновлять сущности это спецификация — https://ru.wikipedia.org/wiki/%D0%A1%D0%BF%D0%B5%D1%86%D0%B8%D1%84%D0%B8%D0%BA%D0%B0%D1%86%D0%B8%D1%8F_%28%D1%88%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD_%D0%BF%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F%29 . Я так понимаю, поправьте если что. :)
Alexander Popov
@ruelephant
Mar 19 2015 15:23
репозиторий вообще порочная практика
Kirill Nesmeyanov
@SerafimArts
Mar 19 2015 15:23
как и Di в методы
JhaoDa
@jhaoda
Mar 19 2015 15:23
@Rhincodon т.е. ты предлагаешь писать интерфейс для каждого репозитория?
Alexander Popov
@ruelephant
Mar 19 2015 15:23
из серии "а сможет ли наша система работать в условиях гравитационного коллапса, интересно"
Kirill Nesmeyanov
@SerafimArts
Mar 19 2015 15:24
DI в методы всё равно антипаттерн, хоть и будет работать в этих условиях
Alexander Popov
@ruelephant
Mar 19 2015 15:24
как правило ORM не меняется годами
JhaoDa
@jhaoda
Mar 19 2015 15:24
@Rhincodon Если у меня есть Post, Comment, Image, то надо написать четыре интерфейса, учитывая базовый
Alexander Popov
@ruelephant
Mar 19 2015 15:24
а вот репозитории создают дополнительные прослойки
JhaoDa
@jhaoda
Mar 19 2015 15:25
@Rhincodon не понимаю, зачем?
Это еще сложнее, чем вводить прослойку команд
Denis Isaychenko
@Rhincodon
Mar 19 2015 15:25
@jhaoda вот именно, не зачем. Твоё приложение под DDD вообще не катит. Слишком простое. Просто пиши в репозитории значит, или вообще в модели. :)
@jhaoda это нельзя назвать бизнес-логикой, нет домена как такового, набора правил и тд. И репозитории можно не использовать для приложений типа Пост, коммент, изображение. Излишне
JhaoDa
@jhaoda
Mar 19 2015 15:27
@Rhincodon что же тогда должен делать репозиторий? Где он не излишен?
Denis Isaychenko
@Rhincodon
Mar 19 2015 15:28
@jhaoda ща я супа поем, отвечу, а то остынет :)
JhaoDa
@jhaoda
Mar 19 2015 15:29
@Rhincodon и почему вы, DDD'шнутые, решили, что термин «бизнес-логика» это строго DDD'шный термин? :)
LaravelButler

Приветствуем Вас, @anasanjaria, в нашем дружном чате
В чате запрещена: реклама, спам, нецензурная лексика. Чат не место для оскорблений и выяснения отношений между участниками. За нарушение – Бан!

Русскоязычное сообщество Laravel
Самая свежая документация по Laravel 5
Документация по Laravel 4.2
Официальный сайт Laravel
Группа Вконтакте
А так же:
G+, Facebook, Twitter, GitHub

⇒ Перед тем как написать сообщение, пожалуйста, ознакомьтесь с разметкой Markdown ( Ctrl+Shift+M (Windows) Ctrl+Alt+M (Linux) Ctrl+Cmd+M (Mac) )

Denis Isaychenko
@Rhincodon
Mar 19 2015 15:55
@jhaoda итак, зачем нужен репозиторий если не использовать DDD и вообще просто — есть 2 основных преимущества: 1-я — можно легко менять ORM для доступа к данным, не меняя при этом ничего в контроллерах и других местах для доступа к данным, 2-я — декорирование репозиториев, допустим мне нужно каждый раз когда я тяну данные, писать всё это в лог, я пишу декоратор для репозитория который я хочу логировать (https://laracasts.com/lessons/decorating-repositories). Это ладно. Теперь зачем они нужны в DDD. Допустим мы пишем какое-то большое приложение с кучей всяких бизнес-правил и бизнес-логики, мы разговариваем с клиентом и определяем модель домена и все эти взаимодействия между сущностями, правилами и тд. И для примера, клиент говорит нам — «Мы можем ДОБАВИТЬ покупателя из панели управления, Мы можем ВЫБРАТЬ ТОЛЬКО АКТИВНЫХ покупателей и делать с ними то то и то то». Разработчик про себя думает, я использую Eloquent, вот значит добавить это у меня будет Client::save(), а там выбрать только активных это у меня будет Client::where(‘active’, 1) . И в этом начинается «перевод» бизнес правил в код. Причём разработчик сразу думает о реализации с помощью Eloquent. А по DDD он должен сразу создать интерфейс репозитория допустим BuyersRepository и добавить там 2 метода add и filterOnlyActive — он не думает ещё о реализации вообще, он просто создаёт интерфейс который полностью следует этим ДОБАВИТЬ и ВЫБРАТЬ ТОЛЬКО АКТИВНЫХ. Как он их будет реализовывать это сейчас не важно вообще. Потом ему допустим говорят, «если у покупателя на счету 0 то мы не позволяем ему совершать покупку» и «если у покупателя на счету больше X то мы делаем ему скидку на все покупки». Разработчик сразу же создаёт 2 спецификации чё то типа hasMoney и isDiscountAvailable например. http://culttt.com/2014/08/25/implementing-specification-pattern/ . Короче это огромнейшая наука, и для простых приложений смысла в неё лезть нет. Я сам только в теории разбираюсь пока. :)
wegas22
@wegas22
Mar 19 2015 15:57
ребят создаю админку как сделать так чтобы закрыть ее от всех пользователей и разрешить одному
Kirill Nesmeyanov
@SerafimArts
Mar 19 2015 15:59
аааа
фига километровый вброс
по DDD
нене девидблейн
wegas22
@wegas22
Mar 19 2015 16:05
ребят создаю админку как сделать так чтобы закрыть ее от всех пользователей и разрешить одному определенному например по E-mail проверку сделать
Denis Isaychenko
@Rhincodon
Mar 19 2015 16:08
здесь определённо нужен репозиторий :)
JhaoDa
@jhaoda
Mar 19 2015 16:21
@Rhincodon как ни странно, всё что, ты описал я понял :)
И да, я решил, что пока репа будет всего лишь удобным источников данных — связи сразу тянуть, выборки разные. К чему нас, тащемта, подводят разные гуру
@wegas22 для начала надо почитать в доках про аутентификацию
wegas22
@wegas22
Mar 19 2015 16:24
у меня она работает
я не очень понимаю как ограничить именно к этой странице людей
if (Auth::attempt($email->kristyadobrynina@mail.ru)) {
че то типо такого надо писать
если эмайл этот то отображай вот это
$posts = Post::getAll();
return View::make('admin/admin')->with('posts', $posts); }});
JhaoDa
@jhaoda
Mar 19 2015 16:27
@wegas22 ну так что мешает написать просто:
if ($request->get('email') != 'kristyadobrynina@mail.ru') {
    throw new ForbiddenException();
}
А еще лучше сразу проверить это в самом FormRequest'е, в правилах
wegas22
@wegas22
Mar 19 2015 16:28
где ты это читаешь можешь кинуть ссылку я throw new Forbidden() первый раз вижу
JhaoDa
@jhaoda
Mar 19 2015 16:28
@wegas22 это обычное исключение, которое ты можешь создать сам
wegas22
@wegas22
Mar 19 2015 16:30
а как ты говоришь можно в форме проверить
FormRequest'е,
wegas22
@wegas22
Mar 19 2015 17:23
я сделал еще проще есть поле в базе данных admin так вот если ты admin то ты видишь скрытую страницу если нет то гуляй
@if(Auth::check())
@if(Auth::user()->admin == 1)
wegas22
@wegas22
Mar 19 2015 17:39
только вот как в админке назначить например человека администратором))
Kirill Nesmeyanov
@SerafimArts
Mar 19 2015 17:41
Use RBAC Luke
wegas22
@wegas22
Mar 19 2015 17:42
по подробнее можно, можно кодом))))
или теорией
wegas22
@wegas22
Mar 19 2015 17:53
ладно спс по гуглил))
Alexander Popov
@ruelephant
Mar 19 2015 19:29
а в прописывании singleton всегда первый параметр должен совпадать по пути с реальным классом?
$this->app->singleton('\App\Test', function($app)
        {
            return new \App\Classes\Test\Test();
        });
другими словами
Artur Gafurov
@assurrussa
Mar 19 2015 19:30

всем привет!) не могу понять почему в первом варианте id подставляется. это эксперименты)

    public function show($slug)
    {
        $catalog = $this->catalog->get($slug);

        $res2 = DB::table('catalogs')
            ->join('products', 'catalogs.id', '=', 'products.catalog_id')
// вот тут
            ->where('products.catalog_id','=',$catalog->id)
            ->select('products.id','products.catalog_id','products.title','products.slug')->get();

        return view('catalog.show',compact('catalog','res2'));
    }

а во втором нет!

    public function show($slug)
    {
        $catalog = $this->catalog->get($slug);

        $res2 = DB::table('catalogs')
            ->join('products', 'catalogs.id', '=', 'products.catalog_id')
// вот тут
            ->where('products.catalog_id','=','catalogs.id')
            ->select('products.id','products.catalog_id','products.title','products.slug')->get();

        return view('catalog.show',compact('catalog','res2'));
    }
Alexander Popov
@ruelephant
Mar 19 2015 19:31
ну во втором вариант, это же будет два запроса
Artur Gafurov
@assurrussa
Mar 19 2015 19:31
так тут и происходит join в обоих случаях нет разве?
Alexander Popov
@ruelephant
Mar 19 2015 19:32
первый получит catalog и выкинет в мусорку, потом полезет за res2
это уже отдельный запрос
в первом случаи же, аналогично, просто ты id передаешь в виде текста, предварительно его получив из переменной первого запроса
->where('products.catalog_id','=',123)
вот чем равен запрос на этапе ORM
Artur Gafurov
@assurrussa
Mar 19 2015 19:34
да ну почему тогда когда я делаю join онсначала видит'catalogs.id' , а при проверке where уже нет - мне как раз это и не понятно)))
Alexander Popov
@ruelephant
Mar 19 2015 19:35
откуда ты знаешь что видит?
Artur Gafurov
@assurrussa
Mar 19 2015 19:36

@ruelephant

 DB::table('catalogs')->join('products', 'catalogs.id', '=', 'products.catalog_id')

вот в этот момент он разве не видит что с чем сравнивать???

Alexander Popov
@ruelephant
Mar 19 2015 19:36
видит
Artur Gafurov
@assurrussa
Mar 19 2015 19:37
@ruelephant а почему при where не видит))
это уже другой зарос что ли?
Alexander Popov
@ruelephant
Mar 19 2015 19:38
нет
у тебя есть продукты с таким catalog_id?
закоментари where и дай вывод всех записей
Artur Gafurov
@assurrussa
Mar 19 2015 19:41
да есть конечно я же вывожу их)
при первом варианте)
при втором пустой массив
а если без where то все записи выводит
при том даже с разным айди кстати
значит всё так не видит...
anfrantic
@anfrantic
Mar 19 2015 19:48
Всем привет. Есть проблема такого плана -- в модели User у меня есть констаты STATUS_ACTIVE, STATUS_INACTIVE, STATUS_BANNED. Так как все манипуляции с пользователями делаются через репозиторий, как мне обратиться к єтим константам непосредственно через него, например сброса пароля я хочу разрешить только для активных пользователей, тоесть брокеру нужно передать ['email', 'status']..
Denis Isaychenko
@Rhincodon
Mar 19 2015 19:52
@assurrussa ->where('products.catalog_id','=','catalogs.id’) буквально проверяет products.catalog_id = ‘catalogs.id’ (catalogs.id - строка, а не значение в колонке) Поэтому и пустой массив.
Artur Gafurov
@assurrussa
Mar 19 2015 19:56
@Rhincodon да вроде начинаю понимать... видимо спать пора... в любом случаи спасибо)) код же всё таки работает))
Alexander Popov
@ruelephant
Mar 19 2015 20:01
@anfrantic User::STATUS_ACTIVE ?
Alexander Popov
@ruelephant
Mar 19 2015 20:20
ух что-то я накрутил
сделал $class = $this->app->make('\app\fullpath\classname');
ругается на Undefined property: КонтроллерController::$app
Vitaliy Kravchyshyn
@freevital
Mar 19 2015 20:27
@ruelephant достать надо через репозиторий.
Alexander Popov
@ruelephant
Mar 19 2015 20:27
какой еще репозиторий?
Andrey
@Quiss
Mar 19 2015 20:28
Кто из активных с Git Flow работал? дайте туториал какой-нибудь подробный :) пожалуйста
Alexander Popov
@ruelephant
Mar 19 2015 20:29
а что надо то?
на хабре есть подробная статья
Alexander Popov
@ruelephant
Mar 19 2015 20:29
@jdiond ПРИЧЕМ ТУТ РЕПОЗИТОРИЙ?
Vitaliy Kravchyshyn
@freevital
Mar 19 2015 20:30
@ruelephant "Так как все манипуляции с пользователями делаются через репозиторий"
Alexander Popov
@ruelephant
Mar 19 2015 20:30
ты на какой вопрос отвечаешь то?
Vitaliy Kravchyshyn
@freevital
Mar 19 2015 20:31
@ruelephant User::STATUS_ACTIVE ?
Alexander Popov
@ruelephant
Mar 19 2015 20:31
проснулся
я давно уже проехал этот вопрос
Artur Gafurov
@assurrussa
Mar 19 2015 20:31
@jdiond это не он задавал вопрос)
Vitaliy Kravchyshyn
@freevital
Mar 19 2015 20:32
@assurrussa я вкурсе, он ответил. Я поправил его.
@ruelephant проехал? это как понять?
Andrey
@Quiss
Mar 19 2015 20:32
@ruelephant ну просто что-бы понимать
шаг 1 git flow init -d
шаг 2 ???
шаг 3 Profit
Alexander Popov
@ruelephant
Mar 19 2015 20:33
@Quiss он просто огранизует ветки за тебя, никакой магии
Andrey
@Quiss
Mar 19 2015 20:33
та эт я понял
прост я статью читал
там было немного магии
но не помню где эта статья
но точно не хабр был
Alexander Popov
@ruelephant
Mar 19 2015 20:36
народ почему в контролере не доступна $this->app
я не могу даже сделать make
Vitaliy Kravchyshyn
@freevital
Mar 19 2015 20:40
:sob:
Alexander Popov
@ruelephant
Mar 19 2015 20:41
ну такая блин расширенная документация
"вот так вы можете фитчу СОЗДАТЬ", а примеры использования отсуствуют
через глобал app() пришлось заюзать, не знаю почему в контролерах $this->app не доступна
JhaoDa
@jhaoda
Mar 19 2015 20:44
@ruelephant а кто сказал, что в контроллере должен быть $this->app?
Alexander Popov
@ruelephant
Mar 19 2015 20:44
я так понял документацию
JhaoDa
@jhaoda
Mar 19 2015 20:45
@ruelephant покажи где?
Alexander Popov
@ruelephant
Mar 19 2015 20:45
There are several ways to resolve something out of the container. First, you may use the make method:
This message was deleted
$fooBar = $this->app->make('FooBar');
JhaoDa
@jhaoda
Mar 19 2015 20:46
@ruelephant это просто пример
Alexander Popov
@ruelephant
Mar 19 2015 20:47
он же не корректный
JhaoDa
@jhaoda
Mar 19 2015 20:47
@ruelephant а что мешает тебе добавить это свойство в свой базовый контроллер?
Alexander Popov
@ruelephant
Mar 19 2015 20:47
ничего не мешает
но в документации все должно работать из коробки или не быть указаным
JhaoDa
@jhaoda
Mar 19 2015 20:47
@ruelephant нигде не сказано, что $this в $this->app подразумевает контроллер
Alexander Popov
@ruelephant
Mar 19 2015 20:51
мне интересно уже другое
есть класс который зарегистирован как singleton
он возращает через new классы потомки
как из классов потомков достучаться до метода родителя
я сделал через вызов app()
но это мы как то через задницу ходим
LaravelButler

Приветствуем Вас, @beaulac, в нашем дружном чате
В чате запрещена: реклама, спам, нецензурная лексика. Чат не место для оскорблений и выяснения отношений между участниками. За нарушение – Бан!

Русскоязычное сообщество Laravel
Самая свежая документация по Laravel 5
Документация по Laravel 4.2
Официальный сайт Laravel
Группа Вконтакте
А так же:
G+, Facebook, Twitter, GitHub

⇒ Перед тем как написать сообщение, пожалуйста, ознакомьтесь с разметкой Markdown ( Ctrl+Shift+M (Windows) Ctrl+Alt+M (Linux) Ctrl+Cmd+M (Mac) )

Alexander Popov
@ruelephant
Mar 19 2015 20:53
передавать себя в конструктор, это как то "не по поцански" :)
JhaoDa
@jhaoda
Mar 19 2015 20:54
Как это синглтон возвращает через new классы-потомки?
Alexander Popov
@ruelephant
Mar 19 2015 20:54
его методы
JhaoDa
@jhaoda
Mar 19 2015 20:54
Кого его?
Alexander Popov
@ruelephant
Mar 19 2015 20:54
класс Test зарегистирован как синглтон, у него есть метод find
JhaoDa
@jhaoda
Mar 19 2015 20:55
Так...
Alexander Popov
@ruelephant
Mar 19 2015 20:55
который делает return new TestChildren()
TestChildren он в этом же неймспейсе обитает
JhaoDa
@jhaoda
Mar 19 2015 20:55
И внутри инстанса TestChildren надо иметь доступ к синглтону-Test?
Alexander Popov
@ruelephant
Mar 19 2015 20:55
ага
вот я и думаю
я пока через глобал его дергаю
JhaoDa
@jhaoda
Mar 19 2015 20:56
Ну и обращайся через контейнер
Alexander Popov
@ruelephant
Mar 19 2015 20:56
но это "тяжело"
тяжело же
JhaoDa
@jhaoda
Mar 19 2015 20:56
Для этого и сделан
Alexander Popov
@ruelephant
Mar 19 2015 20:56
а если вызов там не один родителя?
JhaoDa
@jhaoda
Mar 19 2015 20:56
@ruelephant ты профайлил или так думаешь?
Alexander Popov
@ruelephant
Mar 19 2015 20:56
я уже напарывался в Yii когда так через глобальный контекст котал :)
JhaoDa
@jhaoda
Mar 19 2015 20:57
Ну передавай в потомка синглтон при создании
Alexander Popov
@ruelephant
Mar 19 2015 20:57
ну можно
JhaoDa
@jhaoda
Mar 19 2015 20:57
То тебе «тяжело», то тебе «некрасиво». Жизнь это компромиссы, чувак...
Alexander Popov
@ruelephant
Mar 19 2015 20:57
еще есть вариант потомки в биндинги прописать
и там через иньекцию :)
вызывать из родителя через контейнер конечно
JhaoDa
@jhaoda
Mar 19 2015 20:58
Чем это отличается от app->make()?
Ответ: ничем.
Alexander Popov
@ruelephant
Mar 19 2015 20:58
извращенный метод :)
ладно пока сделал с передачай
через глобал как то совсем не кашер дергать
там еще и к неймспейсу прибиваем гвоздями чилдренов
вообще не хорошо
LaravelButler

Приветствуем Вас, @metalicrust, в нашем дружном чате
В чате запрещена: реклама, спам, нецензурная лексика. Чат не место для оскорблений и выяснения отношений между участниками. За нарушение – Бан!

Русскоязычное сообщество Laravel
Самая свежая документация по Laravel 5
Документация по Laravel 4.2
Официальный сайт Laravel
Группа Вконтакте
А так же:
G+, Facebook, Twitter, GitHub

⇒ Перед тем как написать сообщение, пожалуйста, ознакомьтесь с разметкой Markdown ( Ctrl+Shift+M (Windows) Ctrl+Alt+M (Linux) Ctrl+Cmd+M (Mac) )

LaravelButler

Приветствуем Вас, @ibrainventures, в нашем дружном чате
В чате запрещена: реклама, спам, нецензурная лексика. Чат не место для оскорблений и выяснения отношений между участниками. За нарушение – Бан!

Русскоязычное сообщество Laravel
Самая свежая документация по Laravel 5
Документация по Laravel 4.2
Официальный сайт Laravel
Группа Вконтакте
А так же:
G+, Facebook, Twitter, GitHub

⇒ Перед тем как написать сообщение, пожалуйста, ознакомьтесь с разметкой Markdown ( Ctrl+Shift+M (Windows) Ctrl+Alt+M (Linux) Ctrl+Cmd+M (Mac) )

LaravelButler

Приветствуем Вас, @dracony, в нашем дружном чате
В чате запрещена: реклама, спам, нецензурная лексика. Чат не место для оскорблений и выяснения отношений между участниками. За нарушение – Бан!

Русскоязычное сообщество Laravel
Самая свежая документация по Laravel 5
Документация по Laravel 4.2
Официальный сайт Laravel
Группа Вконтакте
А так же:
G+, Facebook, Twitter, GitHub

⇒ Перед тем как написать сообщение, пожалуйста, ознакомьтесь с разметкой Markdown ( Ctrl+Shift+M (Windows) Ctrl+Alt+M (Linux) Ctrl+Cmd+M (Mac) )

LaravelButler

Приветствуем Вас, @jambik, в нашем дружном чате
В чате запрещена: реклама, спам, нецензурная лексика. Чат не место для оскорблений и выяснения отношений между участниками. За нарушение – Бан!

Русскоязычное сообщество Laravel
Самая свежая документация по Laravel 5
Документация по Laravel 4.2
Официальный сайт Laravel
Группа Вконтакте
А так же:
G+, Facebook, Twitter, GitHub

⇒ Перед тем как написать сообщение, пожалуйста, ознакомьтесь с разметкой Markdown ( Ctrl+Shift+M (Windows) Ctrl+Alt+M (Linux) Ctrl+Cmd+M (Mac) )

LaravelButler

Приветствуем Вас, @al0mie, в нашем дружном чате
В чате запрещена: реклама, спам, нецензурная лексика. Чат не место для оскорблений и выяснения отношений между участниками. За нарушение – Бан!

Русскоязычное сообщество Laravel
Самая свежая документация по Laravel 5
Документация по Laravel 4.2
Официальный сайт Laravel
Группа Вконтакте
А так же:
G+, Facebook, Twitter, GitHub

⇒ Перед тем как написать сообщение, пожалуйста, ознакомьтесь с разметкой Markdown ( Ctrl+Shift+M (Windows) Ctrl+Alt+M (Linux) Ctrl+Cmd+M (Mac) )

LaravelButler

Приветствуем Вас, @hatasuki, в нашем дружном чате
В чате запрещена: реклама, спам, нецензурная лексика. Чат не место для оскорблений и выяснения отношений между участниками. За нарушение – Бан!

Русскоязычное сообщество Laravel
Самая свежая документация по Laravel 5
Документация по Laravel 4.2
Официальный сайт Laravel
Группа Вконтакте
А так же:
G+, Facebook, Twitter, GitHub

⇒ Перед тем как написать сообщение, пожалуйста, ознакомьтесь с разметкой Markdown ( Ctrl+Shift+M (Windows) Ctrl+Alt+M (Linux) Ctrl+Cmd+M (Mac) )