This commit is contained in:
2021-07-21 13:49:55 +08:00
parent 088745109f
commit d7302ceba5
7 changed files with 309 additions and 244 deletions
+2 -1
View File
@@ -8,6 +8,7 @@ namespace PHPSTORM_META {
override(Container::get(0), map('@'));
// override(\Hyperf\Utils\Context::get(0), map('@'));
// override(\make(0), map('@'));
// override(\di(0), map('@'));
override(\di(0), map('@'));
override(\duplicate(0), map('@'));
}
+21 -6
View File
@@ -7,6 +7,7 @@ namespace Annotation;
use Exception;
use ReflectionException;
use ReflectionProperty;
use Snowflake\Core\Str;
use Snowflake\Snowflake;
/**
@@ -37,16 +38,12 @@ use Snowflake\Snowflake;
public function execute(mixed $class, mixed $method = null): bool
{
$injectValue = $this->parseInjectValue();
if (!($method instanceof ReflectionProperty)) {
$method = Snowflake::getDi()->getClassProperty($class, $method);
if (!$method) {
if (!($method = $this->getProperty($class, $method))) {
return false;
}
}
/** @var ReflectionProperty $class */
if ($method->isPrivate() || $method->isProtected()) {
$method = 'set' . ucfirst($class->getName());
$method = 'set' . ucfirst(Str::convertUnderline($method->getName()));
if (!method_exists($class, $method)) {
return false;
}
@@ -58,6 +55,24 @@ use Snowflake\Snowflake;
}
/**
* @param $class
* @param $method
* @return ReflectionProperty|bool
*/
private function getProperty($class, $method): ReflectionProperty|bool
{
if ($method instanceof ReflectionProperty) {
return $method;
}
$method = Snowflake::getDi()->getClassProperty($class, $method);
if (!$method) {
return false;
}
return $method;
}
/**
* @return mixed
* @throws Exception
+3 -3
View File
@@ -47,10 +47,10 @@ abstract class AbstractCollection extends Component implements \IteratorAggregat
*
* @param $query
* @param array $array
* @param null|string|ActiveRecord $model
* @param string|ActiveRecord|null $model
* @throws Exception
*/
public function __construct($query, array $array = [], $model = null)
public function __construct($query, array $array = [], string|ActiveRecord $model = null)
{
$this->_item = $array;
$this->query = $query;
@@ -111,7 +111,7 @@ abstract class AbstractCollection extends Component implements \IteratorAggregat
public function getModel(): ActiveRecord
{
if (!is_object($this->model)) {
$this->model = $this->model::populate([]);
$this->model = duplicate($this->model);
$this->model->setIsCreate(false);
}
return $this->model;
+10 -8
View File
@@ -24,7 +24,6 @@ use Database\Relation;
use Database\SqlBuilder;
use Database\Traits\HasBase;
use Exception;
use HttpServer\Http\Context;
use ReflectionException;
use Snowflake\Abstracts\Component;
use Snowflake\Abstracts\Config;
@@ -141,13 +140,21 @@ abstract class BaseActiveRecord extends Component implements IOrm, ArrayAccess
}
/**
* @param Relation $relation
*/
public function setRelation(Relation $relation)
{
$this->_relation = $relation;
}
/**
* @throws Exception
*/
public function init()
{
$this->container = Snowflake::app();
$an = Snowflake::app()->getAnnotation();
$an->injectProperty($this);
}
@@ -1010,12 +1017,7 @@ abstract class BaseActiveRecord extends Component implements IOrm, ArrayAccess
*/
public static function populate(array $data): static
{
// $class = Snowflake::app()->getChannel();
// /** @var static $model */
// $model = $class->pop(static::class, function () {
// return new static();
// });
$model = new static();
$model = duplicate(static::class);
$model->_attributes = $data;
$model->_oldAttributes = $data;
$model->setIsCreate(false);
+1 -1
View File
@@ -41,7 +41,7 @@ class CollectionIterator extends \ArrayIterator
* @param int $flags
* @throws Exception
*/
public function __construct($model, $query, $array = array(), $flags = 0)
public function __construct($model, $query, array $array = [], int $flags = 0)
{
$this->model = $model;
$this->query = $query;
+12
View File
@@ -262,4 +262,16 @@ class Str
return preg_replace('/(\w{10})(\w{3})(\w{4})(\w{9})(\w{6})/', '$1-$2-$3-$4-$5', $md5);
}
/**
* @param string $str
* @param bool $unfairest
* @return string
*/
public static function convertUnderline(string $str, bool $unfairest = true): string
{
$str = ucwords(str_replace('_', ' ', $str));
$str = str_replace(' ', '', lcfirst($str));
return $unfairest ? ucfirst($str) : $str;
}
}
+36 -1
View File
@@ -21,6 +21,7 @@ use Snowflake\Core\Json;
use Snowflake\Error\Logger;
use Snowflake\Event;
use Snowflake\Exception\ConfigException;
use Snowflake\Exception\NotFindClassException;
use Snowflake\Snowflake;
use Swoole\WebSocket\Server;
@@ -681,13 +682,47 @@ if (!function_exists('env')) {
}
if (!function_exists('di')) {
/**
* @param string $className
* @return mixed
* @throws ReflectionException
* @throws NotFindClassException
*/
function di(string $className): mixed
{
return Snowflake::getDi()->get($className);
}
}
if (!function_exists('duplicate')) {
/**
* @param string $className
* @return mixed
* @throws ReflectionException
* @throws NotFindClassException
*/
function duplicate(string $className): mixed
{
$class = di($className);
return clone $class;
}
}
if (!function_exists('sweep')) {
/**
* @param string $configPath
* @return array|false|string|null
*/
function sweep($configPath = APP_PATH . 'config'): bool|array|string|null
function sweep(string $configPath = APP_PATH . 'config'): bool|array|string|null
{
$array = [];
foreach (glob($configPath . '/*') as $config) {