| | <?php |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| |
|
| | namespace think\view\driver; |
| |
|
| | use think\App; |
| | use think\exception\TemplateNotFoundException; |
| | use think\Loader; |
| | use think\Log; |
| | use think\Request; |
| |
|
| | class Php |
| | { |
| | |
| | protected $config = [ |
| | |
| | 'view_base' => '', |
| | |
| | 'view_path' => '', |
| | |
| | 'view_suffix' => 'php', |
| | |
| | 'view_depr' => DS, |
| | |
| | 'auto_rule' => 1, |
| | ]; |
| | protected $template; |
| | protected $content; |
| |
|
| | public function __construct($config = []) |
| | { |
| | $this->config = array_merge($this->config, $config); |
| | } |
| |
|
| | |
| | |
| | |
| | |
| | |
| | |
| | public function exists($template) |
| | { |
| | if ('' == pathinfo($template, PATHINFO_EXTENSION)) { |
| | |
| | $template = $this->parseTemplate($template); |
| | } |
| | return is_file($template); |
| | } |
| |
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | public function fetch($template, $data = []) |
| | { |
| | if ('' == pathinfo($template, PATHINFO_EXTENSION)) { |
| | |
| | $template = $this->parseTemplate($template); |
| | } |
| | |
| | if (!is_file($template)) { |
| | throw new TemplateNotFoundException('template not exists:' . $template, $template); |
| | } |
| | $this->template = $template; |
| | |
| | App::$debug && Log::record('[ VIEW ] ' . $template . ' [ ' . var_export(array_keys($data), true) . ' ]', 'info'); |
| |
|
| | extract($data, EXTR_OVERWRITE); |
| | include $this->template; |
| | } |
| |
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | public function display($content, $data = []) |
| | { |
| | $this->content = $content; |
| |
|
| | extract($data, EXTR_OVERWRITE); |
| | eval('?>' . $this->content); |
| | } |
| |
|
| | |
| | |
| | |
| | |
| | |
| | |
| | private function parseTemplate($template) |
| | { |
| | if (empty($this->config['view_path'])) { |
| | $this->config['view_path'] = App::$modulePath . 'view' . DS; |
| | } |
| |
|
| | $request = Request::instance(); |
| | |
| | if (strpos($template, '@')) { |
| | |
| | list($module, $template) = explode('@', $template); |
| | } |
| | if ($this->config['view_base']) { |
| | |
| | $module = isset($module) ? $module : $request->module(); |
| | $path = $this->config['view_base'] . ($module ? $module . DS : ''); |
| | } else { |
| | $path = isset($module) ? APP_PATH . $module . DS . 'view' . DS : $this->config['view_path']; |
| | } |
| |
|
| | $depr = $this->config['view_depr']; |
| | if (0 !== strpos($template, '/')) { |
| | $template = str_replace(['/', ':'], $depr, $template); |
| | $controller = Loader::parseName($request->controller()); |
| | if ($controller) { |
| | if ('' == $template) { |
| | |
| | $template = str_replace('.', DS, $controller) . $depr . (1 == $this->config['auto_rule'] ? Loader::parseName($request->action(true)) : $request->action()); |
| | } elseif (false === strpos($template, $depr)) { |
| | $template = str_replace('.', DS, $controller) . $depr . $template; |
| | } |
| | } |
| | } else { |
| | $template = str_replace(['/', ':'], $depr, substr($template, 1)); |
| | } |
| | return $path . ltrim($template, '/') . '.' . ltrim($this->config['view_suffix'], '.'); |
| | } |
| |
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | public function config($name, $value = null) |
| | { |
| | if (is_array($name)) { |
| | $this->config = array_merge($this->config, $name); |
| | } elseif (is_null($value)) { |
| | return isset($this->config[$name]) ? $this->config[$name] : null; |
| | } else { |
| | $this->config[$name] = $value; |
| | } |
| | } |
| |
|
| | } |
| |
|