Внедрение зависимостей в несколько аргументов

#php

#php

Вопрос:

я действительно не понимаю, почему я получаю это сообщение об ошибке, и я надеюсь, что вы, ребята, сможете помочь:

Неустранимая ошибка: неперехваченный аргумент: слишком мало аргументов для функции App ControllerHome::__construct(), 0 передано в /mnt/c/mvc/index.php в строке 25 и ровно 1 ожидается в /mnt/c/mvc/src/Controller/Home.php:12 Трассировка стека: #0 /mnt/c/mvc/index.php(25): добавлено AppControlylerHome->__construct() #1 {main} /mnt/c/mvc/src/Controller/Home.php в строке 12

index.php

 declare(strict_types=1);


ini_set('display_errors', '1');
ini_set('display_startup_errors', '1');
error_reporting(E_ALL);

use AppCore{Router, Request};
use AppServiceView;


require_once __DIR__ . '/vendor/autoload.php';
require_once __DIR__ . '/src/Core/Bootstrap.php';


$routerLoad = Router::load('src/core/Routes.php')
    ->direct(Request::uri());

$routerAction = new $routerLoad;

$routerAction->action();

$view = new View();
$view->display();

 

Home.php

 namespace AppController;

use AppServiceViewInterface;
use AppServiceView;

class Home implements Controller
{
    private ViewInterface $view;

    public function __construct(View $view)
    {
        $this->view = $view;
    }

    public function action(): void
    {
        $this->view->addTemplate('layout.tpl');
        $this->view->addTlpParam('headline', 'Home');
        $this->view->addTlpParam('info', 'Welcome');
        $this->view->addTlpParam('name', 'User');
        $this->view->display();
    }
}
 

View.php

 namespace AppService;

class View implements ViewInterface
{
    private Smarty  $smarty;
    private string $template;

    public function __construct()
    {
        $this->smarty = new Smarty();
        $this->smarty->setTemplateDir('/mnt/c/mvc/src/View/templates');
        $this->smarty->setCompileDir('/mnt/c/mvc/src/smarty/templates_c');
        $this->smarty->setCacheDir('/mnt/c/mvc/src/smarty/cache');
        $this->smarty->setConfigDir('/mnt/c/mvc/src/smarty/configs');
    }

    public function addTemplate(string $template):void
    {
        $this->template = $template;
    }

    public function addTlpParam(string $name, $value): void
    {
        $this->smarty->assign($name, $value);
    }

    public function display(): void
    {
        try {
            $this->smarty->display($this->template);
        } catch (SmartyException $e) {
        } catch (Exception $e) {
        }
    }
}
 

Комментарии:

1. Где-то в ваших других сценариях что-то пытается создать экземпляр Home контроллера и не передает представление в конструктор.

2. «Неустранимая ошибка: неперехваченный аргумент: слишком мало аргументов для функции App ControllerHome::__construct(), 0 передано в /mnt/c/mvc/index.php в строке 25 …» Вы передаете не все аргументы, как следует из сообщения. Где именно находится строка 25 в index.php ?