add options to service container
This commit is contained in:
parent
b7dc5e395e
commit
ca775a2809
@ -24,5 +24,6 @@ class AppServiceProvider extends ServiceProvider
|
||||
public function register()
|
||||
{
|
||||
$this->app->singleton('database', \App\Services\Database\Database::class);
|
||||
$this->app->singleton('option', \App\Services\OptionRepository::class);
|
||||
}
|
||||
}
|
||||
|
@ -1,6 +1,6 @@
|
||||
<?php
|
||||
|
||||
namespace App\Services;
|
||||
namespace App\Services\Facades;
|
||||
|
||||
use \Illuminate\Support\Facades\Facade;
|
||||
|
18
app/Services/Facades/Option.php
Normal file
18
app/Services/Facades/Option.php
Normal file
@ -0,0 +1,18 @@
|
||||
<?php
|
||||
|
||||
namespace App\Services\Facades;
|
||||
|
||||
use \Illuminate\Support\Facades\Facade;
|
||||
|
||||
class Option extends Facade
|
||||
{
|
||||
/**
|
||||
* Get the registered name of the component.
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
protected static function getFacadeAccessor()
|
||||
{
|
||||
return 'option';
|
||||
}
|
||||
}
|
@ -1,76 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace App\Services;
|
||||
|
||||
use \Illuminate\Database\Eloquent\Model;
|
||||
use \Exception;
|
||||
|
||||
class Option
|
||||
{
|
||||
public static function get($key, $default_value = null)
|
||||
{
|
||||
$option = OptionModel::where('option_name', $key)->first();
|
||||
|
||||
if (!$option) {
|
||||
if (!is_null($default_value)) {
|
||||
return $default_value;
|
||||
} else {
|
||||
$options = require BASE_DIR."/config/options.php";
|
||||
|
||||
if (array_key_exists($key, $options)) {
|
||||
self::add($key, $options[$key]);
|
||||
return $options[$key];
|
||||
}
|
||||
throw new Exception('Unexistent option.', 1);
|
||||
}
|
||||
}
|
||||
|
||||
return $option->option_value;
|
||||
}
|
||||
|
||||
public static function set($key, $value)
|
||||
{
|
||||
$option = OptionModel::where('option_name', $key)->first();
|
||||
|
||||
if (!$option)
|
||||
throw new Exception('Unexistent option.', 1);
|
||||
|
||||
$option->option_value = $value;
|
||||
return $option->save();
|
||||
}
|
||||
|
||||
public static function add($key, $value)
|
||||
{
|
||||
if (self::has($key))
|
||||
return true;
|
||||
|
||||
$option = new OptionModel;
|
||||
$option->option_name = $key;
|
||||
$option->option_value = $value;
|
||||
$option->save();
|
||||
}
|
||||
|
||||
public static function has($key)
|
||||
{
|
||||
try {
|
||||
OptionModel::where('option_name', $key)->firstOrFail();
|
||||
} catch (\Illuminate\Database\Eloquent\ModelNotFoundException $e) {
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
public static function delete($key)
|
||||
{
|
||||
OptionModel::where('option_name', $key)->delete();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
class OptionModel extends Model
|
||||
{
|
||||
protected $table = 'options';
|
||||
public $timestamps = false;
|
||||
|
||||
protected $fillable = ['option_value'];
|
||||
}
|
185
app/Services/OptionRepository.php
Normal file
185
app/Services/OptionRepository.php
Normal file
@ -0,0 +1,185 @@
|
||||
<?php
|
||||
|
||||
namespace App\Services;
|
||||
|
||||
use DB;
|
||||
use ArrayAccess;
|
||||
use Illuminate\Support\Arr;
|
||||
use Illuminate\Contracts\Config\Repository as ConfigContract;
|
||||
|
||||
class OptionRepository implements ArrayAccess, ConfigContract
|
||||
{
|
||||
/**
|
||||
* All of the option items.
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
protected $items = [];
|
||||
|
||||
protected $items_modified = [];
|
||||
|
||||
/**
|
||||
* Create a new option repository.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function __construct()
|
||||
{
|
||||
$options = DB::table('options')->get();
|
||||
|
||||
foreach ($options as $option) {
|
||||
$this->items[$option->option_name] = $option->option_value;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* 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.
|
||||
*
|
||||
* @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)) {
|
||||
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()
|
||||
{
|
||||
$this->items_modified = array_unique($this->items_modified);
|
||||
|
||||
foreach ($this->items_modified as $key) {
|
||||
DB::table('options')
|
||||
->where('option_name', $key)
|
||||
->update(['option_value' => $this[$key]]);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Prepend a value onto an array option value.
|
||||
*
|
||||
* @param string $key
|
||||
* @param mixed $value
|
||||
* @return void
|
||||
*/
|
||||
public function prepend($key, $value)
|
||||
{
|
||||
$array = $this->get($key);
|
||||
|
||||
array_unshift($array, $value);
|
||||
|
||||
$this->set($key, $array);
|
||||
}
|
||||
|
||||
/**
|
||||
* Push a value onto an array option value.
|
||||
*
|
||||
* @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.
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function all()
|
||||
{
|
||||
return $this->items;
|
||||
}
|
||||
|
||||
/**
|
||||
* 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
|
||||
*/
|
||||
public function __destruct()
|
||||
{
|
||||
$this->save();
|
||||
}
|
||||
|
||||
}
|
@ -215,12 +215,12 @@ return [
|
||||
* Blessing Skin
|
||||
*/
|
||||
'View' => App\Services\View::class,
|
||||
'Option' => App\Services\Option::class,
|
||||
'Option' => App\Services\Facades\Option::class,
|
||||
'Utils' => App\Services\Utils::class,
|
||||
'Minecraft' => App\Services\Minecraft::class,
|
||||
'Validate' => App\Services\Validate::class,
|
||||
'Updater' => App\Services\Updater::class,
|
||||
'Database' => App\Services\Database::class,
|
||||
'Database' => App\Services\Facades\Database::class,
|
||||
'Http' => App\Services\Http::class
|
||||
|
||||
],
|
||||
|
Loading…
Reference in New Issue
Block a user