CodeIgniter 4:控制器构造函数中的“参数太少”错误

34gzjxbg  于 8个月前  发布在  其他
关注(0)|答案(1)|浏览(89)

我在CodeIgniter项目中遇到了一个问题,其中一个控制器的构造函数中出现了“Too few arguments to function”错误。我不知道为什么会出现这个错误,我需要帮助解决它。

错误信息:

函数App\Controllers\RestAPI\V1\OTP\OTPController::__construct()的参数太少,传入0...

控制器构造器:

public function __construct(JWTService $jwtService, UserModel $userModel, ReferralCodeModel $referralCodeModel, ReferralHistoryModel $referralHistoryModel)
{
    $this->jwtService = $jwtService;
    $this->userModel = $userModel;
    $this->referralCodeModel = $referralCodeModel;
    $this->referralHistoryModel = $referralHistoryModel;
}

我检查的内容:

1.我已经验证了依赖项(JWTService、UserModel、ReferralCodeModel、ReferralHistoryModel)在CodeIgniter项目中的配置是否正确。
1.我已经检查了CodeIgniter配置文件(app/Config/Services.php和app/Config/Autoload.php),以确保服务和模型都已注册。
1.我已确保配置文件中没有拼写错误或名称空间问题。
1.我已经运行composer dump-autoload来重新生成autoloader文件。

**请求帮助:**我将感谢任何关于如何解决此错误并将所需依赖项正确注入控制器的指导。如果您有CodeIgniter依赖注入系统的经验,并且可以提供关于为什么会发生此错误的见解,请分享您的专业知识。谢谢你,谢谢!

sshcrbum

sshcrbum1#

错误是0 passed in…,所以构造函数没有接收到四个必需的值中的任何一个。它还应该告诉你它在代码中的什么位置,你试图在哪里示例化OTPContrader。
你能给我们完整的错误信息吗?
在你的代码中的某个地方,你会有这样的东西:

模型和库的依赖注入:

//instantiating the model somewhere in your code
$model = new model();

//and then pass it to the OTPModel
$OTPModel = new OTPModel($model)

//OTPModel class:

class OTPModel {

    public function __construct($model){

          $this->model = $model;

    }
}

对于控制器:

在__construct()中加载模型,而不是将它们作为参数传递:

class OTPController extends BaseAPIController
    {

        public function __construct()
        {
            $this->userModel = new UserModel();
            ...
        }

更新:
使用Codeigniter的服务

或者使用Codeigniter的服务功能来获得Dependency Injection的好处。看看CI的文档“Codeigniter 4概述->服务”,看看是否有帮助。
看看这个链接:https://www.patreon.com/posts/services-in-4-20830710
服务是项目中的依赖项。使用服务,而不是仅仅在控制器中创建一个新示例,可以为您提供三个主要好处:
1.允许您始终获取相同的示例,无论您调用该服务多少次。
1.您可以在一个地方设置服务的依赖项。
1.如果您需要将服务交换为共享相同接口的另一个类,那么您可以在Service文件中更改它,并且现在您可能在应用程序中使用它的任何地方都将更改它。

相关问题