没有不值得去解决的问题,也没有不值得去学习的技术!

How to Inject Dependencies in Laravel 6 Middleware

Review the existing code, which is implemented based on the app function. The app function returns a service container instance. Cannot click getByName() to jump to the corresponding method

1. Review the existing code, which is implemented based on the app function. The app function returns a service container instance. I cannot click getByName() to jump to the corresponding method. See Figure 1.

Review the existing code, which is implemented based on the app function. The app function returns a service container instance. Cannot click getByName() to jump to the corresponding method
Figure 1
PHP
<?php
 
namespace App\Http\Middleware;
 
use App\Services\ThemeService;
use Carbon\Carbon;
use Closure;
use Illuminate\Support\Facades\Route;
 
class CurrentTheme
{
    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return mixed
     */
    public function handle($request, Closure $next)
    {
        $service = app(ThemeService::class);
 
        // ...
 
        $theme = $service->getByName($decrypt['name']);
 
        // ...
 
        return $next($request);
    }
}

2. Refer to the automatic injection of the service container. You can simply use “type-hinting” to inject dependencies that need to be resolved by the container in a class’s constructor, including controllers, event listeners, queue jobs, middleware, and so on. In fact, this is how most objects should be resolved by the container.

3. Reference URL: https://stackoverflow.com/questions/35439234/laravel-dependency-injection-in-middleware

4. Implement based on the constructor. I can now click getByName() to jump to the corresponding method. See Figure 2.

Implement based on the constructor. Can now click getByName() to jump to the corresponding method
Figure 2
PHP

    protected $themeService;

    public function __construct(ThemeService $themeService)
    {
        $this->themeService = $themeService;
    }

    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return mixed
     */
    public function handle($request, Closure $next)
    {

        $theme = $this->themeService->getByName('vogue');
	}

关于作者 · 持续学习与技术实践

我是一名拥有 15 年以上开发经验的技术从业者,自 2013 年起持续运营个人技术博客,记录工作与个人项目中遇到的真实问题,以及解决问题过程中的探索、实践和思考。

除了技术写作,我也在持续开发和维护自己的独立项目,探索新技术和新工具在实际场景中的应用。我始终相信,没有不值得去解决的问题,也没有不值得去学习的技术。

如果这篇文章对你有所帮助,欢迎浏览博客中的其他文章,也欢迎交流技术经验与想法。

关于我  ·  GitHub  ·  邮件联系