These are chat archives for LaravelRUS/chat

3rd
Dec 2017
Roman
@DoctorLines
Dec 03 2017 03:29
Привет всем!
Проблема такая: на laravel5.5 юзаю сторонний пакет, который подрубается сам, через package discovery.
В сервис провайдере этого пакета юзается DB (просто такой вызов: $this->app['db']->…. )
У меня настроен свой собственный connection driver для базы
Ну тоесть в AppServiceProvider делается вот так:
public function register()
{
    Connection::resolverFor('mariadb', function ($connection, $database, $prefix, $config) {
        return new MariaDbConnection($connection, $database, $prefix, $config);
    });
}
Roman
@DoctorLines
Dec 03 2017 03:34
и в конфиге database.php соответственно:
'mysql' => [
            'driver'      => 'mariadb',
            'host'        => env('DB_HOST', '127.0.0.1'),
            ...
            …
Ну так вот, этот сторонний пакет (точнее его сервис провайдер), сволочь, срабатывает раньше (его метод register()), чем срабатывает register в AppServiceProvider
И как следствие, имеем ахтунг: Unsupported driver [mariadb]
Что делать - хз
Roman
@DoctorLines
Dec 03 2017 03:40
Вот бы можно было скзать ларе, чтобы делала register одного сервис-провайдера сразу после другого. Но такого в документации нет. А в коде пока не нашел.
Roman
@DoctorLines
Dec 03 2017 06:10
Короче, порывшись в коде, уже сам нашел как сделать.
в composer.json есть новая сканируемая опция extra.laravel.dont-discover, в нее надо записать пакет, который не должен автоматом регистрироваться.
А далее зарегать пакет ручками в одном из своих провайдеров
JhaoDa
@jhaoda
Dec 03 2017 09:09
@DoctorLines а кто сказал, что есть драйвер mariadb?
Roman
@DoctorLines
Dec 03 2017 10:23
@jhaoda Нету, я сам написал
ну по большей части базируется на Mysql драйвере
JhaoDa
@jhaoda
Dec 03 2017 10:23
@DoctorLines драйвер? И чем он отличается от драйвера mysql?
Roman
@DoctorLines
Dec 03 2017 10:24
Захотелось сделать поддерку length в integer типе для миграций)
JhaoDa
@jhaoda
Dec 03 2017 10:25
@DoctorLines так это в билдере схемы делается
Roman
@DoctorLines
Dec 03 2017 10:25
еще float чтобы не как double был, а как float
@jhaoda а как в билдере?
JhaoDa
@jhaoda
Dec 03 2017 10:27
@DoctorLines расширяешь билдер схемы, чтобы он генерил нужный sql-код
Или я что-то путаю и он юзает те же грамматики, что и билдер запросов...
Roman
@DoctorLines
Dec 03 2017 10:28
Вроде как sql код генерируется через Grammar
MysqlGrammar
JhaoDa
@jhaoda
Dec 03 2017 10:29
А, в билдере методы для Blueprint добавлять надо, точно
Roman
@DoctorLines
Dec 03 2017 10:29
например вот как доработан integer тип:
class MariaDbGrammar extends BaseMySqlGrammar
{
    /**
     * Create the column definition for a float type.
     *
     * @param  \Illuminate\Support\Fluent  $column
     * @return string
     */
    protected function typeInteger(Fluent $column)
    {
        return 'int' . ($column->length ? '(' . $column->length . ')' : '');
    }

}
JhaoDa
@jhaoda
Dec 03 2017 10:29
@DoctorLines ну тогда надо запретить package discovery
Mikhail Donskoy
@mdnsk
Dec 03 2017 10:30
@DoctorLines Зачем указывать length для int?
Roman
@DoctorLines
Dec 03 2017 10:30
Архитектор базы данных указал)) вот мне теперь тоже приходится
Roman
@DoctorLines
Dec 03 2017 10:37
Screen Shot 2017-12-03 at 20.36.36.png
Вот такого полно. Но хорошо хоть комменты по каждой колонке есть с разъяснениями)))
Roman
@DoctorLines
Dec 03 2017 12:18
2017/12/03 12:11:31 [error] FastCGI sent in stderr: 
"PHP message: PHP Fatal error:  Allowed memory size of 536870912 bytes exhausted (tried to allocate 20480 bytes) 
in .../vendor/league/oauth2-server/src/Exception/OAuthServerException.php on line 168
Мдаа, и как мне это дебажить..
фапал еррор при выбросе исключения, вот это прекрасно
projct1
@projct1
Dec 03 2017 19:07

подскажите плз как застравить работать куки глобально
в методе контроллера я лочу сайт куками так:

    public function edit(Call $call)
    {
        return response(
            view('admin.call.edit', compact('call'))
        )->withCookie(\Cookie::forever('lock.call', $call->id));
    }

теперь надо чтобы при открытии любой страницы с любой вкладки проверить, если есть такая кука (lock.call), то редиректить на страницу редактирования
для этого я создал мидлвер:

class LockUntilCallUpdate
{
    public function handle(Request $request, \Closure $next)
    {
        if (!$request->routeIs('call.edit') && $request->hasCookie('lock.call')) {
            return redirect()->route('call.edit', $request->cookie('lock.call'));
        }

        return $next($request);
    }
}

но $request->hasCookie('lock.call') всегда возвращает null

как сделать чтобы видно было мою куку, созданную в методе контроллера edit?
projct1
@projct1
Dec 03 2017 19:12
если поменять всё на сессии, то работает
но мне надо навечно заблочить, пока не обновят звонок)
Roman
@DoctorLines
Dec 03 2017 19:37

Народ, где я туплю, подскажите пожалуйста.

В laravel есть такой класс Illuminate\Foundation\Exceptions\Handler который обрабатывает исключения.

Исключение подается на его метод report()

Этот метод создает логгер, чтобы записать исключение.

$logger->error(
    $e->getMessage(),
    array_merge($this->context(), ['exception' => $e]
));

Весь ппц начаниется после вызова $this->context(), ибо там дергается Auth:

protected function context()
{
    try {
        return array_filter([
            'userId' => Auth::id(),
            'email' => Auth::user() ? Auth::user()->email : null,
        ]);
    } catch (Throwable $e) {
        return [];
    }
}
Auth генерирует исключение \League\OAuth2\Server\Exception\OAuthServerException и так вечный цикл.
Screen Shot 2017-12-04 at 05.36.13.png
Ёмаё, как оборвать этот порочный круг?)
} catch (Throwable $e) { не срабатывает. Я понимаю что это код фреймворка, и он не прикосновенный, но блин, что за подстава такая
Roman
@DoctorLines
Dec 03 2017 20:00
писец laravel/passport#440 ну, буду знать