Laravel по-русски

Русское сообщество разработки на PHP-фреймворке Laravel.

Ты не вошёл. Вход тут.

#1 Re: Laravel 5.x » Resolving данных из контейнера Laravel » 25.04.2018 17:55:58

Не совсем. Нужно добавить функционал именно в ларавельный реквест (Illuminate\Http\Request) , так как он уже много где используется в приложении и не хотелось бы менять все Illuminate\Http\Request на App\Http\Requests\ArticleRequest. На данный момент сделал так. Как и раньше создал свой реквест, унаследованный от ларавельного, но не биндил его в контейнер, а подменил инстанцирование оригинального реквеста своим на стадии обработки ядром реквеста для полчучения респонса. Получилось так

$response = $kernel->handle(
    //$request = Illuminate\Http\Request::capture() // Оригинальны реквест
    $request = App\Overload\Request::capture()
);

Не думаю, что это лучший вариант, но другого я не нашел. Если кто знает иное решение, буду рад услышать.

#2 Laravel 5.x » Resolving данных из контейнера Laravel » 23.04.2018 13:18:27

asubarov
Ответов: 2

Приветствую. Ситуация такая, мне необходимо добавить кое-какой функционал в класс Request. Я сделал так. Создал свой класс Request унаследованный от ларавельного.

<?php

namespace App\Overload;
use Illuminate\Http\Request as LaravelRequest;

class Request extends LaravelRequest
{
    ...
}

Затем в сервиспровайдере я биндю в контейнер свой Request вместо ларавельного.

<?php

namespace App\Providers;

use Illuminate\Support\ServiceProvider;
use App\Overload\Request;

class AppServiceProvider extends ServiceProvider
{
    /**
     * Bootstrap any application services.
     *
     * @return void
     */
    public function boot()
    {
    }

    /**
     * Register any application services.
     *
     * @return void
     */
    public function register()
    {
        $this->app->bind('\Illuminate\Http\Request',Request::class);
    }
}

И далее в приложении предстает следующая картина.

    protected function logRequest(\Illuminate\Http\Request $request)
    {
        $request1 = app()->make('\Illuminate\Http\Request');
        dump($request1); // Resolving Illuminate\Http\Request
        dump($request); // Resolving App\Overload\Request
    }

Иначе говоря, когда я инстанцирую объект из контейнера посредством метода make - все работает так как и предполагается. Если же использовать метод через typehint, то инстанцируется экземпляр оригинального реквеста, вместо моего. Может кто-нибудь объяснить почему так происходит? Правильный ли вообще подход я использую? Может можно как-то по другому добавить пару методов в Request?

Подвал раздела