Skip to content

Commit

Permalink
♻️ 重構(Model.php):改進物件創建邏輯以使用反射和容器
Browse files Browse the repository at this point in the history
🔧 移除(composer.json):刪除不必要的laminas/laminas-di依賴

這次提交的重構旨在提升物件創建的靈活性,通過使用反射來獲取建構函數的參數,並從容器中解析依賴,這樣可以更好地支持依賴注入。同時,移除不再需要的laminas/laminas-di依賴,以簡化依賴管理。
  • Loading branch information
mathsgod committed Sep 24, 2024
1 parent d14822d commit dba70d7
Show file tree
Hide file tree
Showing 3 changed files with 23 additions and 81 deletions.
1 change: 0 additions & 1 deletion composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,6 @@
"laminas/laminas-paginator": "^2.11",
"vlucas/phpdotenv": "^5.4",
"psr/container": "*",
"laminas/laminas-di": "^3.12",
"illuminate/collections": "^9.52|^10.0"
},
"require-dev": {
Expand Down
79 changes: 1 addition & 78 deletions composer.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

24 changes: 22 additions & 2 deletions src/Model.php
Original file line number Diff line number Diff line change
Expand Up @@ -119,9 +119,29 @@ function jsonSerialize()
static function Create(?array $data = [])
{

$injector = new Injector(null, self::GetSchema()->getContainer());
//container
$container = self::GetSchema()->getContainer();

$obj = $injector->create(static::class);
//reflector class
$ref_class = new ReflectionClass(static::class);

//get contructor
$constructor = $ref_class->getConstructor();

//get parameters
$parameters = $constructor->getParameters();

$args = [];
foreach ($parameters as $parameter) {
if ($container->has($parameter->getType()->getName())) {
$args[] = $container->get($parameter->getType()->getName());
} else {
$args[] = null;
}
}

//create instance with args
$obj = $ref_class->newInstanceArgs($args);

$fields = $obj->__fields();
foreach ($data as $field => $value) {
Expand Down

0 comments on commit dba70d7

Please sign in to comment.