Внедрение класса с использованием DI: не удалось открыть поток - PullRequest
0 голосов
/ 07 июня 2019

У меня есть класс с именем ModelFactory, который должен возвращать экземпляр объекта Model. Но почему-то PHP не может его найти.

Предупреждение: require_once (../../../../../ model.php): не удалось открыть поток: нет такого файла или каталога

Вот мой класс ModelFactory, который загружается через DI для справки:

namespace jas\Pdf\Factory;

require_once "../../../../../model.php";

use Model;

class ModelFactory
{
    /**
     * @return Model
     */
    public function create(){
        return new Model(false);
    }
}

А вот мой класс Model, который на 5 уровней выше класса ModelFactory, загруженный через require_once:

class Model
{

    public function __construct($serverRequest = false)
    {
        if(!$serverRequest){
            $this->checkIfLocal();
        }
        $this->conn = $this->connectToDB();
    }
}

Я немного растерялся. Выдает ли PHP ошибку из-за того, что у класса Model нет пространства имен, или потому, что пространство имен ModelFactory конфликтует с путями файлов? Большое спасибо за любые идеи, которые вы можете предоставить.

1 Ответ

0 голосов
/ 07 июня 2019

Я исправил это, обратившись к этому вопросу: PHP - Не удалось открыть поток: нет такого файла или каталога

Я использовал __DIR__ в качестве базовой линии пути. Применяя это, путь теперь выглядит так:

namespace jas\Pdf\Factory;

require_once __DIR__."/../../../../../model.php";

use Model;

class ModelFactory
{
    /**
     * @return Model
     */
    public function create(){
        return new Model(false);
    }
}

Итак, класс теперь правильно загружен.

...