abstract general Repository
This commit is contained in:
parent
d6e810da4a
commit
c849ed21fa
@ -34,6 +34,6 @@ class AppServiceProvider extends ServiceProvider
|
|||||||
public function register()
|
public function register()
|
||||||
{
|
{
|
||||||
$this->app->singleton('database', \App\Services\Database\Database::class);
|
$this->app->singleton('database', \App\Services\Database\Database::class);
|
||||||
$this->app->singleton('option', \App\Services\OptionRepository::class);
|
$this->app->singleton('option', \App\Services\Repositories\OptionRepository::class);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -7,6 +7,7 @@ use Illuminate\Contracts\Events\Dispatcher;
|
|||||||
use Illuminate\Filesystem\Filesystem;
|
use Illuminate\Filesystem\Filesystem;
|
||||||
use Illuminate\Support\Arr;
|
use Illuminate\Support\Arr;
|
||||||
use Illuminate\Support\Collection;
|
use Illuminate\Support\Collection;
|
||||||
|
use App\Services\Repositories\OptionRepository;
|
||||||
use App\Events\PluginWasDisabled;
|
use App\Events\PluginWasDisabled;
|
||||||
use App\Events\PluginWasEnabled;
|
use App\Events\PluginWasEnabled;
|
||||||
use App\Events\PluginWasUninstalled;
|
use App\Events\PluginWasUninstalled;
|
||||||
|
@ -1,21 +1,17 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
namespace App\Services;
|
namespace App\Services\Repositories;
|
||||||
|
|
||||||
use DB;
|
use DB;
|
||||||
use ArrayAccess;
|
|
||||||
use Illuminate\Support\Arr;
|
use Illuminate\Support\Arr;
|
||||||
use Illuminate\Contracts\Config\Repository as ConfigContract;
|
|
||||||
|
|
||||||
class OptionRepository implements ArrayAccess, ConfigContract
|
class OptionRepository extends Repository
|
||||||
{
|
{
|
||||||
/**
|
/**
|
||||||
* All of the option items.
|
* All of the option items that is modified.
|
||||||
*
|
*
|
||||||
* @var array
|
* @var array
|
||||||
*/
|
*/
|
||||||
protected $items = [];
|
|
||||||
|
|
||||||
protected $items_modified = [];
|
protected $items_modified = [];
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -33,17 +29,6 @@ class OptionRepository implements ArrayAccess, ConfigContract
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Determine if the given option value exists.
|
|
||||||
*
|
|
||||||
* @param string $key
|
|
||||||
* @return bool
|
|
||||||
*/
|
|
||||||
public function has($key)
|
|
||||||
{
|
|
||||||
return Arr::has($this->items, $key);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get the specified option value.
|
* Get the specified option value.
|
||||||
*
|
*
|
||||||
@ -82,25 +67,10 @@ class OptionRepository implements ArrayAccess, ConfigContract
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Set a given option value.
|
* Do really save modified options to database.
|
||||||
*
|
*
|
||||||
* @param array|string $key
|
|
||||||
* @param mixed $value
|
|
||||||
* @return void
|
* @return void
|
||||||
*/
|
*/
|
||||||
public function set($key, $value = null)
|
|
||||||
{
|
|
||||||
if (is_array($key)) {
|
|
||||||
foreach ($key as $innerKey => $innerValue) {
|
|
||||||
Arr::set($this->items, $innerKey, $innerValue);
|
|
||||||
$this->items_modified[] = $innerKey;
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
Arr::set($this->items, $key, $value);
|
|
||||||
$this->items_modified[] = $key;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
protected function save()
|
protected function save()
|
||||||
{
|
{
|
||||||
$this->items_modified = array_unique($this->items_modified);
|
$this->items_modified = array_unique($this->items_modified);
|
||||||
@ -134,31 +104,11 @@ class OptionRepository implements ArrayAccess, ConfigContract
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Push a value onto an array option value.
|
* Return the options with key in the given array.
|
||||||
*
|
|
||||||
* @param string $key
|
|
||||||
* @param mixed $value
|
|
||||||
* @return void
|
|
||||||
*/
|
|
||||||
public function push($key, $value)
|
|
||||||
{
|
|
||||||
$array = $this->get($key);
|
|
||||||
|
|
||||||
$array[] = $value;
|
|
||||||
|
|
||||||
$this->set($key, $array);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get all of the option items for the application.
|
|
||||||
*
|
*
|
||||||
|
* @param array $array
|
||||||
* @return array
|
* @return array
|
||||||
*/
|
*/
|
||||||
public function all()
|
|
||||||
{
|
|
||||||
return $this->items;
|
|
||||||
}
|
|
||||||
|
|
||||||
public function only(Array $array)
|
public function only(Array $array)
|
||||||
{
|
{
|
||||||
$result = [];
|
$result = [];
|
||||||
@ -172,51 +122,6 @@ class OptionRepository implements ArrayAccess, ConfigContract
|
|||||||
return $result;
|
return $result;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Determine if the given option option exists.
|
|
||||||
*
|
|
||||||
* @param string $key
|
|
||||||
* @return bool
|
|
||||||
*/
|
|
||||||
public function offsetExists($key)
|
|
||||||
{
|
|
||||||
return $this->has($key);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get a option option.
|
|
||||||
*
|
|
||||||
* @param string $key
|
|
||||||
* @return mixed
|
|
||||||
*/
|
|
||||||
public function offsetGet($key)
|
|
||||||
{
|
|
||||||
return $this->get($key);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Set a option option.
|
|
||||||
*
|
|
||||||
* @param string $key
|
|
||||||
* @param mixed $value
|
|
||||||
* @return void
|
|
||||||
*/
|
|
||||||
public function offsetSet($key, $value)
|
|
||||||
{
|
|
||||||
$this->set($key, $value);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Unset a option option.
|
|
||||||
*
|
|
||||||
* @param string $key
|
|
||||||
* @return void
|
|
||||||
*/
|
|
||||||
public function offsetUnset($key)
|
|
||||||
{
|
|
||||||
$this->set($key, null);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Save all modified options into database
|
* Save all modified options into database
|
||||||
*/
|
*/
|
158
app/Services/Repositories/Repository.php
Normal file
158
app/Services/Repositories/Repository.php
Normal file
@ -0,0 +1,158 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Services\Repositories;
|
||||||
|
|
||||||
|
use ArrayAccess;
|
||||||
|
use Illuminate\Support\Arr;
|
||||||
|
|
||||||
|
class Repository implements ArrayAccess // Illuminate\Contracts\Cache\Repository
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* All of the items.
|
||||||
|
*
|
||||||
|
* @var array
|
||||||
|
*/
|
||||||
|
protected $items;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Determine if an item exists in the repository.
|
||||||
|
*
|
||||||
|
* @param string $key
|
||||||
|
* @return bool
|
||||||
|
*/
|
||||||
|
public function has($key)
|
||||||
|
{
|
||||||
|
return Arr::has($this->items, $key);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Retrieve an item from the repository by key.
|
||||||
|
*
|
||||||
|
* @param string $key
|
||||||
|
* @param mixed $default
|
||||||
|
* @return mixed
|
||||||
|
*/
|
||||||
|
public function get($key, $default = null)
|
||||||
|
{
|
||||||
|
return Arr::get($this->items, $key, $default);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set a given option value.
|
||||||
|
*
|
||||||
|
* @param array|string $key
|
||||||
|
* @param mixed $value
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function set($key, $value = null)
|
||||||
|
{
|
||||||
|
if (is_array($key)) {
|
||||||
|
// If given key is an array
|
||||||
|
foreach ($key as $innerKey => $innerValue) {
|
||||||
|
Arr::set($this->items, $innerKey, $innerValue);
|
||||||
|
$this->items_modified[] = $innerKey;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
Arr::set($this->items, $key, $value);
|
||||||
|
$this->items_modified[] = $key;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Push an item into the repository.
|
||||||
|
*
|
||||||
|
* @param mixed $item
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function push($item)
|
||||||
|
{
|
||||||
|
array_push($this->items, $item);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get all of the items stored in the repository.
|
||||||
|
*
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
public function all()
|
||||||
|
{
|
||||||
|
return $this->items;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get an item from the repository, or store the default value.
|
||||||
|
*
|
||||||
|
* @param string $key
|
||||||
|
* @param \Closure $callback
|
||||||
|
* @return mixed
|
||||||
|
*/
|
||||||
|
public function remember($key, Closure $callback)
|
||||||
|
{
|
||||||
|
// If the item exists in the repository we will just return this immediately
|
||||||
|
// otherwise we will execute the given Closure and repository the result
|
||||||
|
// of that execution for the given number of minutes in storage.
|
||||||
|
if (! is_null($value = $this->get($key))) {
|
||||||
|
return $value;
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->put($key, $value = $callback());
|
||||||
|
|
||||||
|
return $value;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Remove an item from the repository.
|
||||||
|
*
|
||||||
|
* @param string $key
|
||||||
|
* @return bool
|
||||||
|
*/
|
||||||
|
public function forget($key)
|
||||||
|
{
|
||||||
|
Arr::forget($this->items, $key);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Determine if the given option option exists.
|
||||||
|
*
|
||||||
|
* @param string $key
|
||||||
|
* @return bool
|
||||||
|
*/
|
||||||
|
public function offsetExists($key)
|
||||||
|
{
|
||||||
|
return $this->has($key);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get a option option.
|
||||||
|
*
|
||||||
|
* @param string $key
|
||||||
|
* @return mixed
|
||||||
|
*/
|
||||||
|
public function offsetGet($key)
|
||||||
|
{
|
||||||
|
return $this->get($key);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set a option option.
|
||||||
|
*
|
||||||
|
* @param string $key
|
||||||
|
* @param mixed $value
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function offsetSet($key, $value)
|
||||||
|
{
|
||||||
|
$this->set($key, $value);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Unset a option option.
|
||||||
|
*
|
||||||
|
* @param string $key
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function offsetUnset($key)
|
||||||
|
{
|
||||||
|
$this->forget($key);
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user