catchAdmin/extend/catcher/base/CatchController.php

136 lines
2.7 KiB
PHP
Raw Normal View History

2019-12-06 09:17:40 +08:00
<?php
namespace catcher\base;
use catcher\CatchAdmin;
use think\facade\View;
2019-12-12 09:14:08 +08:00
abstract class CatchController
2019-12-06 09:17:40 +08:00
{
2019-12-13 17:26:54 +08:00
protected $data = [];
2019-12-17 09:03:04 +08:00
public function __construct()
{
$this->loadConfig();
}
2019-12-06 09:17:40 +08:00
/**
*
* @time 2019年11月28日
* @param array $data
* @param string $template
* @return string
* @throws \Exception
*/
protected function fetch(array $data = [], $template = ''): string
{
$stack = \debug_backtrace(DEBUG_BACKTRACE_PROVIDE_OBJECT, 2);
$end = end($stack);
2019-12-19 07:18:39 +08:00
View::config($this->getViewPath($end['class']));
$this->setLayout();
2019-12-13 17:26:54 +08:00
2019-12-19 07:18:39 +08:00
$template = $template ? : $this->getTemp($end['class'], $end['function']);
2019-12-17 09:03:04 +08:00
2019-12-19 07:18:39 +08:00
return View::fetch($template, array_merge($this->data, $data));
}
2019-12-06 09:17:40 +08:00
2019-12-19 07:18:39 +08:00
/**
*
*
* @time 2019年12月17日
* @param $module
* @return array
*/
protected function getViewPath($module): array
{
return [
'view_path' => CatchAdmin::getViews()[$this->getModule($module)],
];
}
/**
*
* @time 2019年12月17日
* @return void
*/
protected function setLayout(): void
{
$this->data['layout'] = root_path('view') . 'layout.html';
2019-12-06 09:17:40 +08:00
}
/**
*
* @time 2019年12月03日
* @param $class
* @param $func
* @return string
*/
2019-12-19 07:18:39 +08:00
protected function getTemp($class, $func): string
2019-12-06 09:17:40 +08:00
{
$viewPath = CatchAdmin::getModuleViewPath($this->getModule($class));
$class = explode('\\', $class);
2019-12-14 17:50:54 +08:00
$className = lcfirst(end($class));
2019-12-06 09:17:40 +08:00
if (is_dir($viewPath . $className)) {
return sprintf('%s/%s', $className, $func);
}
return $func;
}
/**
*
* @time 2019年12月03日
* @param $class
* @return mixed
*/
protected function getModule($class)
{
return explode('\\', $class)[1];
}
2019-12-13 17:26:54 +08:00
2019-12-17 09:03:04 +08:00
/**
*
*
* @time 2019年12月15日
* @return void
*/
protected function loadConfig()
{
$module = explode('\\', get_class($this))[1];
$moduleConfig = CatchAdmin::moduleDirectory($module) . 'config.php';
if (file_exists(CatchAdmin::moduleDirectory($module) . 'config.php')) {
app()->config->load($moduleConfig);
}
}
2019-12-13 17:26:54 +08:00
/**
*
* @time 2019年12月13日
* @param $name
* @param $value
* @return void
*/
public function __set($name, $value)
{
// TODO: Implement __set() method.
$this->data[$name] = $value;
}
public function __get($name)
{
// TODO: Implement __get() method.
}
public function __isset($name)
{
// TODO: Implement __isset() method.
}
2019-12-06 09:17:40 +08:00
}