gpt4 book ai didi

php - 在 Laravel 中,如何将服务依赖注入(inject)到 Controller 方法中

转载 作者:可可西里 更新时间:2023-11-01 01:13:50 25 4
gpt4 key购买 nike

抱歉新手问题,但我找不到任何关于如何实际使用服务提供者的示例(Laravel 文档仅显示如何创建它们)。

由于 Laravel 的分页器不适用于分组,我想创建自己的分页器服务,但我不知道如何将所述服务注入(inject) Controller 。论坛 Controller 抛出异常:Class App\Http\Controllers\CustomPaginator does not exist,但我认为如果我将服务类绑定(bind)到服务容器,它可以使用自定义名称解析吗?

文件如下:

app/Http/Controllers/For

<?php

namespace App\Http\Controllers;

use App\ForumModel;
use Illuminate\Http\Request;

class Forum extends Controller
{
public function index($page = 1, CustomPaginator $paginator)
{
$topics = ForumModel::orderBy("sticky", "DESC")->orderBy("lastpost", "DESC");

return view("forum", ["topics" => $topics]);
}
}

app/Providers/CustomPaginatorServiceProvider.php

<?php

namespace App\Providers;

use Illuminate\Support\ServiceProvider;

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

/**
* Register the application services.
*
* @return void
*/
public function register()
{
$this->app->bind("CustomPaginator", CustomPaginatorServiceProvider::class);
}

public function a()
{
echo "It works!";
}
}

应用配置中的提供商表

'providers' => [

/*
* Laravel Framework Service Providers...
*/
Illuminate\Auth\AuthServiceProvider::class,
Illuminate\Broadcasting\BroadcastServiceProvider::class,
Illuminate\Bus\BusServiceProvider::class,
Illuminate\Cache\CacheServiceProvider::class,
Illuminate\Foundation\Providers\ConsoleSupportServiceProvider::class,
Illuminate\Cookie\CookieServiceProvider::class,
Illuminate\Database\DatabaseServiceProvider::class,
Illuminate\Encryption\EncryptionServiceProvider::class,
Illuminate\Filesystem\FilesystemServiceProvider::class,
Illuminate\Foundation\Providers\FoundationServiceProvider::class,
Illuminate\Hashing\HashServiceProvider::class,
Illuminate\Mail\MailServiceProvider::class,
Illuminate\Notifications\NotificationServiceProvider::class,
Illuminate\Pagination\PaginationServiceProvider::class,
Illuminate\Pipeline\PipelineServiceProvider::class,
Illuminate\Queue\QueueServiceProvider::class,
Illuminate\Redis\RedisServiceProvider::class,
Illuminate\Auth\Passwords\PasswordResetServiceProvider::class,
Illuminate\Session\SessionServiceProvider::class,
Illuminate\Translation\TranslationServiceProvider::class,
Illuminate\Validation\ValidationServiceProvider::class,
Illuminate\View\ViewServiceProvider::class,

/*
* Package Service Providers...
*/
Laravel\Tinker\TinkerServiceProvider::class,

/*
* Application Service Providers...
*/
App\Providers\AppServiceProvider::class,
App\Providers\AuthServiceProvider::class,
// App\Providers\BroadcastServiceProvider::class,
App\Providers\EventServiceProvider::class,
App\Providers\RouteServiceProvider::class,
App\Providers\CustomPaginatorServiceProvider::class

],

最佳答案

不要在 CustomPaginatorServiceProvider 中绑定(bind) CustomPaginatorServiceProvider

并绑定(bind)一个实例。

$this->app->bind('CustomPaginator', function () {
return new Services\CustomPaginator();
});
  1. 创建服务提供者 CustomPaginatorServiceProvider
  2. 在应用程序配置中注册服务提供商 CustomPaginatorServiceProvider
  3. 创建服务 CustomPaginator
  4. CustomPaginatorServiceProvider
  5. 中绑定(bind) 服务 CustomPaginator

顺便说一句,您可以在 AppServiceProvider 中绑定(bind) service CustomPaginator 而不是创建新的 service provider


别名数组中的config/app.php:

...
'CustomPaginator' => \App\Services\CustomPaginator::class,
...

内部 Controller Action :

public function someAction(\CustomPaginator $paginator)
{
dd($paginator);
}

如果您需要将一些数据传递给 CustomPaginator 方法 __construct - 只需在 ServiceProvider 中写入:

$this->app->bind(\App\Services\CustomPaginator::class, function () {
return new \App\Services\CustomPaginator($firstParam, $secondParam, ...);
});

关于php - 在 Laravel 中,如何将服务依赖注入(inject)到 Controller 方法中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45276246/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com