Функция автоматического ввода из другого файла с Laravel - PullRequest
0 голосов
/ 21 марта 2020

Я хочу создать код в файле DiManager.php в зависимости от функций других файлов в моем проекте laravel. Я использую контейнер для внедрения зависимостей.

Вот мой код ....

DictionaryDataDAO. php

<?php


namespace App\actions\dictionary\dbdaos;


use App\actions\dictionary\datamodels\DictionaryWord;

class DictionaryDataDAO
{
    public function createWord($reqData)
    {
        $dictionary = new DictionaryWord();

        $dictionary->word = $reqData->getWord();
        $dictionary->word_meaning = $reqData->getWordMeaning();

        return $dictionary->save();

    }
}

VldCreateWord. php

<?php


namespace App\actions\dictionary\validation;


class VldCreateWord
{
    public static function getUserRolesForCreateWord() : array
    {
        return ['admin','user'];
    }
    public static function getCreateWordReqField() : array
    {
        return ['word','word_meaning'];
    }
}

CreateWord. php

<?php


namespace App\actions\dictionary\command;


use App\actions\dictionary\datamodels\CreateDictionaryWordData;

class CreateWord
{
    public $requestData;
    public $userRoles;
    public $dao;

    public function __construct($requestData, $userRoles, $dao)
    {
        parent::__construct($userRoles, $requestData, CreateDictionaryWordData::class);
        $this->userRoles = $userRoles;
        $this->requestData = $requestData;
        $this->dao = new $dao;
    }
}

UserDataDAO. php

<?php


namespace App\actions\user\dbdaos;


use App\actions\user\datamodels\User;

class UserDataDAO
{
    public function createUser($reqData,$bizUser)
    {
        $user = new User;

        $user->first_name = $reqData->getFirstName();
        $user->last_name = $reqData->getLastName();
        $user->designation = $reqData->getDesignation();

        return $user->save();

    }

}

VldCreateUser. php

<?php


namespace App\actions\user\validation;


class VldCreateUser
{
    public static function getUserRolesForCreateUser() : array
    {
        return ['admin'];
    }
    public static function getCreateUserReqField() : array
    {
        return ['first_name','last_name'];
    }
}

CreateUser. php

<?php


namespace App\actions\user\command;



use App\actions\user\datamodels\CreateUserData;

class CreateUser
{
    public $requestData;
    public $userRoles;
    public $dao;

    public function __construct($requestData, $userRoles, $dao)
    {
        parent::__construct($requestData,$userRoles, CreateUserData::class);

        $this->requestData = $requestData;
        $this->userRoles = $userRoles;
        $this->dao = new $dao;
    }
}

DiManager. php

<?php


namespace App\actions\BlockingAction;

use League\Container\Container;

class DiManager
{
    private $class;

    /**
     * @return mixed
     */
    public function getClass($className)
    {
        $this->class = $className;
        return $this->getInjectedClass();
    }

    public function getInjectedClass()
    {
        $container = new Container;


        $this->addCreateUserDependency($container);
        $this->addCreateWordDependency($container);



        $this->class = $container->get($this->class);
        return $this->class;
    }

    /**
     * @param Container $container
     */
    public function addCreateWordDependency(Container $container): void
    {
        $container->add(\App\actions\dictionary\command\CreateWord::class)
            ->addArgument(\App\actions\dictionary\validation\VldCreateWord::getCreateWordReqField())
            ->addArgument(\App\actions\dictionary\validation\VldCreateWord::getUserRolesForCreateWord())
            ->addArgument(\App\actions\dictionary\dbdaos\DictionaryDataDAO::class);
    }

    /**
     * @param Container $container
     */
    public function addCreateUserDependency(Container $container): void
    {
        $container->add(\App\actions\user\command\CreateUser::class)
            ->addArgument(\App\actions\user\validation\VldCreateUser::getCreateUserReqField())
            ->addArgument(\App\actions\user\validation\VldCreateUser::getUserRolesForCreateUser())
            ->addArgument(\App\actions\user\dbdaos\UserDataDAO::class);
    }
}

пробег. php

$className = CreateWord::class;
$diManager = new DiManager();
$temp= $diManager->getClass($className);
print_r($temp);

CreateWord.php - это действие класс и VldCreateWord.php класс проверки и DictionaryDataDAO.php класс операций базы данных для этого класса действий. Точно так же CreateUser.php - это класс действий и VldCreateUser.php класс проверки и UserDataDAO.php класс операций базы данных для этого класса действий.

Когда я запускаю run.php, я получаю данные класса проверки и класс операций базы данных данные в конструкторе класса действий CreateWord по addCreateWordDependency(), который находится в классе getInjectedClass() из DiManager. Теперь мне нужно добавить эту функцию зависимости в DiManager.php, так как я создаю новый класс действия, класс проверки и класс операций базы данных для этого нового класса действия. Но я хочу добавить эту функцию зависимости автоматически или с помощью специальной команды.

Есть ли способ автоматически сгенерировать эту функцию зависимости в DiManager классе, таком как addCreateWordDependency()? Есть ли команда ремесленников, чтобы сделать это? Если мне нужно использовать собственную команду ремесленника, то как я могу сделать это с помощью специальной команды?

Спасибо.

...