<?php
declare(strict_types=1);
namespace App\Controller;
use App\Constants\StatusCode;
class BaseController extends AbstractController
{
public function __get($key)
{
if ($key == 'app') {
return $this->container;
} else {
$suffix = strstr($key,'Repo');
if ($suffix && ($suffix == 'Repo' || $suffix == 'Repository')) {
$repoName = $suffix == 'Repo' ? $key.'sitory':$key;
return $this->getRepositoriesInstance($repoName);
} else {
throw new \RuntimeException("仓库{$key}不存在,书写错误!", StatusCode::ERR_SERVER);
}
}
}
public function getRepositoriesInstance($key)
{
$key = ucfirst($key);
$module = $this->getModuleName();
if (!empty($module)) {
$module = "{$module}";
} else {
$module = "";
}
if ($module) {
$filename = BASE_PATH."/app/Core/Repositories/{$module}/{$key}.php";
$className = "Core\\Repositories\\{$module}\\{$key}";
} else {
$filename = BASE_PATH."/app/Core/Repositories/{$key}.php";
$className = "Core\\Repositories\\{$key}";
}
if (file_exists($filename)) {
return $this->container->get($className);
} else {
throw new \RuntimeException("仓库{$key}不存在,文件不存在!", StatusCode::ERR_SERVER);
}
}
private function getModuleName()
{
$className = get_called_class();
$name = substr($className, 15);
$space = explode('\\', $name);
if(count($space) > 1){
return $space[0];
}else{
return '';
}
}
public function success($data = [], $msg = null)
{
return $this->response->success($data,$msg);
}
public function error($code = StatusCode::ERR_EXCEPTION, $msg = null)
{
return $this->response->error($code,$msg);
}
}