| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245 |
- <?php
- /*
- * This file is part of the overtrue/wechat.
- *
- * (c) overtrue <i@overtrue.me>
- *
- * This source file is subject to the MIT license that is bundled
- * with this source code in the file LICENSE.
- */
- namespace EasyWeChat\Kernel\Traits;
- use EasyWeChat\Kernel\Exceptions\InvalidArgumentException;
- use EasyWeChat\Kernel\Support\Arr;
- use EasyWeChat\Kernel\Support\Str;
- /**
- * Trait Attributes.
- */
- trait HasAttributes
- {
- /**
- * @var array
- */
- protected $attributes = [];
- /**
- * @var bool
- */
- protected $snakeable = true;
- /**
- * Set Attributes.
- *
- * @return $this
- */
- public function setAttributes(array $attributes = [])
- {
- $this->attributes = $attributes;
- return $this;
- }
- /**
- * Set attribute.
- *
- * @param string $attribute
- * @param string $value
- *
- * @return $this
- */
- public function setAttribute($attribute, $value)
- {
- Arr::set($this->attributes, $attribute, $value);
- return $this;
- }
- /**
- * Get attribute.
- *
- * @param string $attribute
- * @param mixed $default
- *
- * @return mixed
- */
- public function getAttribute($attribute, $default = null)
- {
- return Arr::get($this->attributes, $attribute, $default);
- }
- /**
- * @param string $attribute
- *
- * @return bool
- */
- public function isRequired($attribute)
- {
- return in_array($attribute, $this->getRequired(), true);
- }
- /**
- * @return array|mixed
- */
- public function getRequired()
- {
- return property_exists($this, 'required') ? $this->required : [];
- }
- /**
- * Set attribute.
- *
- * @param string $attribute
- * @param mixed $value
- *
- * @return $this
- */
- public function with($attribute, $value)
- {
- $this->snakeable && $attribute = Str::snake($attribute);
- $this->setAttribute($attribute, $value);
- return $this;
- }
- /**
- * Override parent set() method.
- *
- * @param string $attribute
- * @param mixed $value
- *
- * @return $this
- */
- public function set($attribute, $value)
- {
- $this->setAttribute($attribute, $value);
- return $this;
- }
- /**
- * Override parent get() method.
- *
- * @param string $attribute
- * @param mixed $default
- *
- * @return mixed
- */
- public function get($attribute, $default = null)
- {
- return $this->getAttribute($attribute, $default);
- }
- /**
- * @return bool
- */
- public function has(string $key)
- {
- return Arr::has($this->attributes, $key);
- }
- /**
- * @return $this
- */
- public function merge(array $attributes)
- {
- $this->attributes = array_merge($this->attributes, $attributes);
- return $this;
- }
- /**
- * @param array|string $keys
- *
- * @return array
- */
- public function only($keys)
- {
- return Arr::only($this->attributes, $keys);
- }
- /**
- * Return all items.
- *
- * @return array
- *
- * @throws \EasyWeChat\Kernel\Exceptions\InvalidArgumentException
- */
- public function all()
- {
- $this->checkRequiredAttributes();
- return $this->attributes;
- }
- /**
- * Magic call.
- *
- * @param string $method
- * @param array $args
- *
- * @return $this
- */
- public function __call($method, $args)
- {
- if (0 === stripos($method, 'with')) {
- return $this->with(substr($method, 4), array_shift($args));
- }
- throw new \BadMethodCallException(sprintf('Method "%s" does not exists.', $method));
- }
- /**
- * Magic get.
- *
- * @param string $property
- *
- * @return mixed
- */
- public function __get($property)
- {
- return $this->get($property);
- }
- /**
- * Magic set.
- *
- * @param string $property
- * @param mixed $value
- *
- * @return $this
- */
- public function __set($property, $value)
- {
- return $this->with($property, $value);
- }
- /**
- * Whether or not an data exists by key.
- *
- * @param string $key
- *
- * @return bool
- */
- public function __isset($key)
- {
- return isset($this->attributes[$key]);
- }
- /**
- * Check required attributes.
- *
- * @throws \EasyWeChat\Kernel\Exceptions\InvalidArgumentException
- */
- protected function checkRequiredAttributes()
- {
- foreach ($this->getRequired() as $attribute) {
- if (is_null($this->get($attribute))) {
- throw new InvalidArgumentException(sprintf('"%s" cannot be empty.', $attribute));
- }
- }
- }
- }
|