Я хочу создать код в файле 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()
? Есть ли команда ремесленников, чтобы сделать это? Если мне нужно использовать собственную команду ремесленника, то как я могу сделать это с помощью специальной команды?
Спасибо.