Русское сообщество разработки на PHP-фреймворке Laravel.
Ты не вошёл. Вход тут.
Страницы 1
Приветствую. Ситуация такая, мне необходимо добавить кое-какой функционал в класс 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?
Не в сети
ээммм, создать в папке Requests файл ArticleRequest.php и в нем переопределить / добавить че хотите.
namespace App\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
use Illuminate\Support\Facades\Auth;
class ArticleRequest extends FormRequest
{
бла бла
}
и дальше уже юзать
public function store(ArticleRequest $request)
{
$result = $this->a_rep->storeArticle($request); // Метод сохранит инфу о новом создаваемом материале.
if ($result) {
return redirect('admin/moder')->with(Session::flash('status', 'Материал добавлен!'));
} else {
return back();
}
}
или я не правильно понял?
Изменено sam (25.04.2018 17:02:31)
Не в сети
Не совсем. Нужно добавить функционал именно в ларавельный реквест (Illuminate\Http\Request) , так как он уже много где используется в приложении и не хотелось бы менять все Illuminate\Http\Request на App\Http\Requests\ArticleRequest. На данный момент сделал так. Как и раньше создал свой реквест, унаследованный от ларавельного, но не биндил его в контейнер, а подменил инстанцирование оригинального реквеста своим на стадии обработки ядром реквеста для полчучения респонса. Получилось так
$response = $kernel->handle(
//$request = Illuminate\Http\Request::capture() // Оригинальны реквест
$request = App\Overload\Request::capture()
);
Не думаю, что это лучший вариант, но другого я не нашел. Если кто знает иное решение, буду рад услышать.
Не в сети
Страницы 1