These are chat archives for LaravelRUS/chat

28th
Jan 2017
Роман Сохарев
@greabock
Jan 28 2017 01:10
Кек... Тейлор просто взял и сломал контейнер XD
Kirill Nesmeyanov
@SerafimArts
Jan 28 2017 01:11
@greabock это чойто, а?
Роман Сохарев
@greabock
Jan 28 2017 01:12
метод make() больше не принимает дополнительных параметров
Kirill Nesmeyanov
@SerafimArts
Jan 28 2017 01:13
@greabock а что взамен? о_0
Роман Сохарев
@greabock
Jan 28 2017 01:13
ничего
Kirill Nesmeyanov
@SerafimArts
Jan 28 2017 01:13
ээээ
JhaoDa
@jhaoda
Jan 28 2017 01:21
@SerafimArts @greabock laravel/framework#17556
Чот там предлагают взамен, но всё тухленько
Роман Сохарев
@greabock
Jan 28 2017 01:27
Я полагаю, что Тейлор подгоняет контейнер под грядущий psr-11
потом типа заменит make() на get() и всё в ажуре
Kirill Nesmeyanov
@SerafimArts
Jan 28 2017 01:28
ну так не проще ли просто добавить get и всё?
который будет вызывать make без аргументов
короче, плохой вариант
Роман Сохарев
@greabock
Jan 28 2017 01:28
меня больше смущает другое
Kirill Nesmeyanov
@SerafimArts
Jan 28 2017 01:28
Тейлор просто иногда больной, по-моему
Такое ощущение, что не он писал это всё, а сделно было на фрилансе
а он тупо менеджер
Роман Сохарев
@greabock
Jan 28 2017 01:29
хрен с ним с make... но build-то за что пострадал???
Kirill Nesmeyanov
@SerafimArts
Jan 28 2017 01:30
в 5.4 получается из улучшений только чуть отрефакторенный Eloquent
и то, рефакторинг местами бессмысленный
Kirill Nesmeyanov
@SerafimArts
Jan 28 2017 01:35
блин, придётся до 5.3 откатываться
или как-то патчить руками контейнер...
Роман Сохарев
@greabock
Jan 28 2017 01:36
Фишка в чем. Я реально часто юзал метод build, как абстрактную фабрику. А теперь, я просто хз че делать.
@SerafimArts ну а че остается? Теперь только реально руками дописывать и подменять Application в bootstrap/app.php
Kirill Nesmeyanov
@SerafimArts
Jan 28 2017 01:39
вместо того, чтобы наконец поправить контекстуальный биндинг - занимаются непонятно чем...
Роман Сохарев
@greabock
Jan 28 2017 01:40
а че там с контекстами? Вродеж норм все было, не?
Kirill Nesmeyanov
@SerafimArts
Jan 28 2017 01:41
@greabock
1) У них нет приоритетов (нельзя одновремнно забиндить A и перезаписать поверх конфиг, что в месте N этот A будет являться объектом Б)
2) Оно не работает в DD
Dave
@aios
Jan 28 2017 04:42
Блин.... теперь систему интервью придется пеерписывать при обнове
Olexiy
@AlekseiiShevchuk
Jan 28 2017 09:06
Всем привет!
наткнулся на проблему
не работает апдейт модели в ресурс контроллере в апи (в веб части все работает)
вылетает ошибка что мол не разрешенный метод PUT (типа разрешены только GET, HEAD)
В списке роутов все есть, то есть должно принимать PUT но не принимает
подскажите в какую сторону копать?
лара 5,3
Cyber Xucyc
@Cyber-host
Jan 28 2017 09:08

@AlekseiiShevchuk

апдейт модели в ресурс контроллере

это как?

Olexiy
@AlekseiiShevchuk
Jan 28 2017 09:12
ну в ресурс контроллере есть метод update
для обновления/редактирования сущности/модели
Cyber Xucyc
@Cyber-host
Jan 28 2017 09:13
@AlekseiiShevchuk RESTfull?
Olexiy
@AlekseiiShevchuk
Jan 28 2017 09:13
так точно
Cyber Xucyc
@Cyber-host
Jan 28 2017 09:13
CORS настроен?
Olexiy
@AlekseiiShevchuk
Jan 28 2017 09:14
никогда его не настраивал, всегда все работало
даже не знаю где это делать
я работаю на локалке с ОпенСервером
Cyber Xucyc
@Cyber-host
Jan 28 2017 09:15
@AlekseiiShevchuk у тебя есть API. ты с другого домена/девайса пробуешь работать с ним?
Olexiy
@AlekseiiShevchuk
Jan 28 2017 09:16
нет, все пробую локально через Постмен
Cyber Xucyc
@Cyber-host
Jan 28 2017 09:17
@AlekseiiShevchuk Постмен не другой девайс? ошибку покажи еще
Cyber Xucyc
@Cyber-host
Jan 28 2017 09:22
@AlekseiiShevchuk покажи роут и скрин реквеста(method, params)
Olexiy
@AlekseiiShevchuk
Jan 28 2017 09:25
http://clip2net.com/s/3GTcTL9 - запрос (недеры пустые)
http://clip2net.com/s/3GTd0fu - роуты
http://clip2net.com/s/3GTd3aR - еще роуты
*хедеры пустые
самое интересное что все остальное работает
удаление, создание, просмотр
Cyber Xucyc
@Cyber-host
Jan 28 2017 09:30
хм
Olexiy
@AlekseiiShevchuk
Jan 28 2017 09:32
ссылка на репу, может она что то прояснит )
https://github.com/AlekseiiShevchuk/samepage
Anton Vorontsov
@symbios-zi
Jan 28 2017 09:33
@AlekseiiShevchuk в форме нужно поместить хелпер который будет слать нужный тип
Olexiy
@AlekseiiShevchuk
Jan 28 2017 09:34
у меня проблема в АПИ
там нет формы
веб версия работает без проблем
Anton Vorontsov
@symbios-zi
Jan 28 2017 09:36
@AlekseiiShevchuk шли пост запрос и сделай доп поле _method где будет put
Хотя странно. Вроде должно и так работать
Cyber Xucyc
@Cyber-host
Jan 28 2017 09:38
эт да
Olexiy
@AlekseiiShevchuk
Jan 28 2017 09:39
@symbios-zi
POST не пройдет, тк его вообще для такого роута нету
собсно, проверил - не прошло
Anton Vorontsov
@symbios-zi
Jan 28 2017 09:39
@AlekseiiShevchuk _method добавил?
Olexiy
@AlekseiiShevchuk
Jan 28 2017 09:40
да
Anton Vorontsov
@symbios-zi
Jan 28 2017 09:40
Может в логах что сыпится?
Olexiy
@AlekseiiShevchuk
Jan 28 2017 09:40
до _method дело не доходит тк впринципе ПОСТ запрос не обрабатывается по этому роуту
Anton Vorontsov
@symbios-zi
Jan 28 2017 09:41
@AlekseiiShevchuk если у тебя ресурс то должен проходить
Ларавел сам разрулит
Об этом в доке сказано. Но и без этих свистоперделок должно работать
access log nginx что говорит? Ты там видишь свои запросы?
Olexiy
@AlekseiiShevchuk
Jan 28 2017 09:47
в логах все красиво
запросы идут
тут сам ларавель не отрабатывает, это 100%
но почему
вот вопрос
Ivan
@Hunternnm
Jan 28 2017 09:48
@AlekseiiShevchuk какой код ответа на запрос?
Olexiy
@AlekseiiShevchuk
Jan 28 2017 09:53
405
Ivan
@Hunternnm
Jan 28 2017 09:57
@AlekseiiShevchuk дальше намекать что у тебя не так?
Olexiy
@AlekseiiShevchuk
Jan 28 2017 10:02
для этого сюда и написал
Ivan
@Hunternnm
Jan 28 2017 10:02
@AlekseiiShevchuk в доке что сказано про то, какой запрос слать на этот роут?
Olexiy
@AlekseiiShevchuk
Jan 28 2017 10:05
PUT/PATCH
Ivan
@Hunternnm
Jan 28 2017 10:06
@AlekseiiShevchuk покажи скрин постмана
Olexiy
@AlekseiiShevchuk
Jan 28 2017 10:07
@AlekseiiShevchuk
http://clip2net.com/s/3GTcTL9 - запрос (хедеры пустые)
http://clip2net.com/s/3GTd0fu - роуты
http://clip2net.com/s/3GTd3aR - еще роуты
Ivan
@Hunternnm
Jan 28 2017 10:08
@AlekseiiShevchuk и _method не помогает?
@AlekseiiShevchuk стоп
поставь галку x-www-url-formurlencoded
Olexiy
@AlekseiiShevchuk
Jan 28 2017 10:10
галка эта ничего не даст
я рав запрос посылаю, это одно и то же
_method не помогает также
qooco
@qooco
Jan 28 2017 10:46
Как думаете можно сделать так: responder($response, 'json')->redirect('myroute') что вернет json ['redirect'=>'url'] и js пойдет редирект
Alexander
@Dualse
Jan 28 2017 10:54
@qooco Ну ты попробовал так сделать?
qooco
@qooco
Jan 28 2017 11:06
я думаю нормально ли это, просто не хочется отправлять каждый раз $response->json(['status'=>'success', 'redirect'=>$url]);
или $response->json(['status'=>'error','errors'=>['myerror']])
да и если потом мне надо перейти с ajax-json на обычные запросы
и уже делать реальный редирект и использовать Session::flash('errors', 'myerr');
Дмитрий Мязин
@d4c0
Jan 28 2017 11:59

Товарищи, а какой смысл в следующем коде?

public function register()
{
  $this->app->bind('key', function() {
    return new ClassName();
  });
}

Т.е. мне не понятно, зачем привязывать к ключу? Порылся в разных пакетах, там иногда так делают... Зачем это, когда можно привязать к имени интерфейса, или ещё проще, если реализация одна и интерфейс не нужен - передавать в методы тип класса, и Лара сама разрешит зависимость. Или на крайняк, если нам нужно произвести базовую настройку, то сделать так:

public function register()
{
  $this->app->bind(\Name\Space\ClassName::class, function() {
    return new ClassName(['parameter' => 42]);
  });
}

Как можно использовать привязку по конкретному строковому ключу?

Ваня Devium
@webdevium
Jan 28 2017 12:01
@d4c0 у меня так настройки в коде доступны, но у меня не класс возвращается
Дмитрий Мязин
@d4c0
Jan 28 2017 12:03
@webdevium Пожалуйста, подробнее?)
Ваня Devium
@webdevium
Jan 28 2017 12:04
@d4c0
    public function register()
    {
        $this->app->bind('settings', function () {

            $key = with(new Settings)->getTable();

            $closure = function () {
                return Settings::first();
            };

            if (config('database.CACHE_QUERIES')) {
                return Cache::remember($key, config('database.CACHE_QUERIES_TTL', 60), $closure);
            } else {
                return $closure();
            }
        });
это старый вариант, счас не так, но мысль ты уловишь
Дмитрий Мязин
@d4c0
Jan 28 2017 12:04
@webdevium ага, спасибо) Я как то и не думал использовать сервис-контейнер для хранения настроек и прочих вещей)
Ваня Devium
@webdevium
Jan 28 2017 12:06
@d4c0 я тоже не думал, пока не задолбался с базы их каждый раз тянуть
закешировал, и плюс 100 к RPS
Дмитрий Мязин
@d4c0
Jan 28 2017 12:06
@webdevium не плохо)
Ваня Devium
@webdevium
Jan 28 2017 12:08
шарманка не работает
Alexander Bobrov
@kca66y
Jan 28 2017 12:36
@nejtr0n Спасибо!)

Добрый день. Поскажите, как передать email получателя?

$user_email = $data['email'];
Mail::send('letters.registration', $data, function ($message) {
                            $message->from('test@test.c', 'foo');
                            $message->to($user_email)->subject('foo');
                        });

Так не выходит.

$user_email = $data['email'];
Mail::send('letters.registration', $data, function ($message,$user_email ) {
                            $message->from('test@test.c', 'foo');
                            $message->to($user_email)->subject('foo');
                        });

Так тоже(

Cyber Xucyc
@Cyber-host
Jan 28 2017 12:41
@kca66y ... use($someVar) { ...
Alexander Bobrov
@kca66y
Jan 28 2017 12:42
@Cyber-host Благодарю!
alex iTakov
@alexTitakoff
Jan 28 2017 12:55

ребят, привет всем.
оч нуб ;)
....
скажите, что за хэш-теги в объекте? ..что за свойства, как получить то их
Tweet {#213

table: "tweets"

fillable: array:1 [▶]

connection: null

primaryKey: "id"

keyType: "int"

perPage: 15

+incrementing: true
+timestamps: true
}

ой блин , как тут картинку то... )
alt
alex iTakov
@alexTitakoff
Jan 28 2017 13:02
larQuest.png
Дмитрий Мязин
@d4c0
Jan 28 2017 13:17

Ребята, как при создании класса передать параметры в конструктор, при этом не сломать ларавелевскую магию, которая рекурсивно удовлетворяет зависимости? Пример:

// Контроллер
private $class_one;
public function __construct(One $class_one) {
  $this->class_one = $class_one;
}

// ----------------------------------------------------------

class One {
  private $class_two;
  public function __construct(Two $class_two) {
    $this->class_two = $class_two;
  }
}

Тут лара создаст экземпляр класса One, потом рекурсивно создаст внутри конструктора One экземпляр класса Two. А что если мне помимо создания экземпляра Two нужно передать какие то настройки в конструктор One? Как не сломать автовайринг (если я правильно понял это так называется)?

Ваня Devium
@webdevium
Jan 28 2017 13:19
просто передай свою фигню последней
@alexiTakov Слушай, оч нуб, это обыкновенный ОБЪЕКТ
@alexiTakov Если развернешь attributes, то поймешь, что это - свойства модели. А чтоб их получить, надо написать $переменная->свойство.
А вообще, это написано в документации к любому объектному языку.
Потому иди и читай.
Дмитрий Мязин
@d4c0
Jan 28 2017 13:28
@webdevium не пойдёт. Т.к. мне придётся руками передавать инстанс класса One в конструктор контроллера, и только после этого свои параметры. Или я что-то не так понял?
@webdevium вообще я конечно могу просто сразу свойствам класса задать значения по умолчанию, как бы это решит проблему, тем более что они не меняются. Но я надеялся на то, что это можно разрулить в сервис провайдере, как то красиво, не поломав при этом автовайринг.
Ваня Devium
@webdevium
Jan 28 2017 13:34
я думаю, если ты класс Two забиндишь в app, думаю, можно будет получить желаемое
но я в этом вопросе не силен, сорри
JhaoDa
@jhaoda
Jan 28 2017 13:39
@kca66y или ты начнешь изучать РНР и читать доку по ларавел или в следующий раз будет бан
Дмитрий Мязин
@d4c0
Jan 28 2017 15:25

Как лучше поступить? У меня есть класс, он работает со сторонним API, в нём множество методов. Каждый метод конфигурирует новый Guzzle объект и осуществляет запрос. Дело в том, что если я внедряю Guzzle через конструктор, и передаю в свойство класса, то во всех методах у меня юзается один этот объект, а мне нужно что-бы в каждом методе класса создавался и заново конфигурировался новый Guzzle объект, т.к. в контексте одного запроса могут отрабатывать несколько методов моего класса. Как лучше это сделать, что-бы избежать конструкции new GuzzleHttp\Client(); в каждом методе и не наворотить связанный код?

Вроде бы проблему решает App::make(); но я ни разу не видел, что-бы эту конструкцию кто-то юзал в своих пакетах/сервисах/контроллерах, за сим и спрашиваю.

Дмитрий Мязин
@d4c0
Jan 28 2017 15:41
Моя тяга к перфекцианизму меня доканает ><, вечный рефакторинг, желание сделать всё универсальным и чувство что я что-то делаю не так, возникающие на пустом месте.
в общем сделал фабричный метод makeClient(). Народ, вы где?)
asvae
@asvae
Jan 28 2017 15:54
@d4c0 расскажи немного деталей насчет разных инстантов гузлы. Зачем они новые создаются?
Дмитрий Мязин
@d4c0
Jan 28 2017 15:56

@asvae ну, если я правильно понял - то мы для разных запросов должны инстанцировать объект, и настраивать его. Собственно по этому. Как то мне не нравится ПЕРЕНАСТРАИВАТЬ инстанс гузла, настроенный для предыдущего запроса. Лучше взять новый, и настроить. Поправь, если не прав.

Просто не хотелось бы переиспользовать.

asvae
@asvae
Jan 28 2017 15:58
@d4c0 гузловый клиент же легко переиспользовать. Создаешь дефолты. Потом в запросах указываешь отличные вещи.
@d4c0 если не хочешь реюзать. Тоже флаг в руки.
Можешь забиндать в сервис провайдере. И потом дергать бинды.
Можешь построить фабрику, которая тебе будет городить клиенты по нужным критериям.
asvae
@asvae
Jan 28 2017 16:03
Насчет не использования App::make дунно. Я его повсеместно использую. Например, типичный метод контроллера:
public function create()
{
    $result = app()
        ->call(UserPersonaStorageService::class.'@create')
        ->transform(new PersonaTransformer());

    return new ApiJsonResponse2($result);
}
Дмитрий Мязин
@d4c0
Jan 28 2017 16:07

@asvae я так понимаю что без разницы как мы регистрируем класс в сервис контейнере, хоть как синглтон, хоть как фабрику - если мы используем внедрение зависимости через конструктор, то любые вызовы методов этого класса будут работать с единым объектом (т.е. он передан в свойсто объекта, а методы работают со свойством). Именно поэтому я и удивляюсь что редко вижу App::или app() в каких либо пакетах, т.к. именно этот метод раскрывает смысл сервис контейнера полностью.

И вообще, зомби аппокалипсис что-ли произошел? Где люди, которые хотять дискутировать?

asvae
@asvae
Jan 28 2017 16:12
@d4c0 так выходной же.
Дмитрий Мязин
@d4c0
Jan 28 2017 16:12
@asvae именно! Суббота - наконец-то можно поработать!) (имею в виду над чем то своим, а не по нудным и не интересным рабочим задачам)
JhaoDa
@jhaoda
Jan 28 2017 16:14
Выходные от будней отличатся тем, что в будни я работаю на одних, а в выходные — на других.
asvae
@asvae
Jan 28 2017 16:16
@d4c0 хотя все же довольно странно делать свежий инстант гузла для каждого запроса. Ток если сессия не нужна и токенов нет никаких.
Дмитрий Мязин
@d4c0
Jan 28 2017 16:17
@asvae я уже прикинул, и в моём случае это действительно ни к чему)
asvae
@asvae
Jan 28 2017 16:18
@d4c0 и прям и в будущем не будет кейсов, когда нужно два запроса счейнить?
Дмитрий Мязин
@d4c0
Jan 28 2017 16:25
@asvae думаю, что нет.
alexforce2
@alexforce2
Jan 28 2017 17:17
Добрый вечер! У меня такой вопрос, как в ларавель правильно реализовать роутинг для многоязычного приложения?
я вижу такой подход
$router->group(['prefix' => 'en'], function ($router) { $router->get('orders', 'OrdersController@index'); }); $router->group(['prefix' => 'ru'], function ($router) { $router->get('orders', 'OrdersController@index'); });
как тут форматировать код?
но мне этот вариант не нравиться - он приводит к дублированию кода
а дублирование, на мой взгляд, одно из ужаснейших вещей в программировании
asvae
@asvae
Jan 28 2017 17:40
@alexforce2 ctrl + shift + m
alexforce2
@alexforce2
Jan 28 2017 17:42
$router->group(['prefix' => 'en'], function ($router) {
    $router->get('orders', 'OrdersController@index');
});
$router->group(['prefix' => 'ru'], function ($router) {
    $router->get('orders', 'OrdersController@index');
});
вот этот вариант как-то не очень, но зато работает
Anton Vorontsov
@symbios-zi
Jan 28 2017 17:48
@alexforce2 middleware напиши которое будет куда то записывать локализацию пользователя. Например в сессию
Kirill Nesmeyanov
@SerafimArts
Jan 28 2017 17:49

@alexforce2

$router->pattern('lang', '[a-z]{2}');

$router->group(['prefix' => '{lang}'], function() {
    ....
});

?

alexforce2
@alexforce2
Jan 28 2017 17:54
@SerafimArts спасибо! Выглядит здорово!
Anton Vorontsov
@symbios-zi
Jan 28 2017 18:16
@SerafimArts бот умер?
Kirill Nesmeyanov
@SerafimArts
Jan 28 2017 18:45
@symbios-zi вчера ещё
База накрылась
а рестартануть не могу, т.к. я опять похерил ключики от сервера
Роман Сохарев
@greabock
Jan 28 2017 19:34
@SerafimArts могу свой дать
или скажи че сделать
Kirill Nesmeyanov
@SerafimArts
Jan 28 2017 19:35
@greabock рестартануть mysql сервер
я же отписал: https://gitter.im/LaravelRUS/GitterBot
Роман Сохарев
@greabock
Jan 28 2017 19:38
привет
хрена не помог рестарт мускула
Kirill Nesmeyanov
@SerafimArts
Jan 28 2017 19:38
@greabock ну так подожди, он апнется
процесс бота т.е.
Роман Сохарев
@greabock
Jan 28 2017 19:40
мож пнуть его как-то?
Kirill Nesmeyanov
@SerafimArts
Jan 28 2017 19:42
@greabock предлагаю
1) echo /dev/null > /var/www/gitter/storage/logs/laravel.log
2) php /var/www/gitter/artisan gitter:pool
Роман Сохарев
@greabock
Jan 28 2017 19:43
ну говорит типа стартанул
давай на ботовый канал, не будем тут спамить
wagwandude
@wagwandude
Jan 28 2017 20:06
Всем салют. Как получить в middleware сессию?
Session::all();
JhaoDa
@jhaoda
Jan 28 2017 20:07
@wagwandude так же, как и не в мидлваре
wagwandude
@wagwandude
Jan 28 2017 20:07
выдает пустой массив, несмотря на то, что в сессии есть значения
@jhaoda есть идеи?
JhaoDa
@jhaoda
Jan 28 2017 20:10
@wagwandude https://laravel.com/docs/5.3/upgrade, «Session In The Constructor»
wagwandude
@wagwandude
Jan 28 2017 20:15
@jhaoda спасибо