app = $app; $this->request = $app->request; $this->app->bind('DtApp\ThinkLibrary\Controller', $this); if (in_array($this->request->action(), get_class_methods(__CLASS__))) { $this->error('Access without permission.'); } $this->initialize(); } /** * 控制器初始化 */ protected function initialize() { } /** * 返回失败的操作 * @param mixed $info 消息内容 * @param mixed $data 返回数据 * @param integer $code 返回代码 */ public function error($info, $data = '{-null-}', $code = 0) { if ($data === '{-null-}') { $data = new stdClass(); } throw new HttpResponseException(json([ 'code' => $code, 'info' => $info, 'data' => $data, ])); } /** * 返回成功的操作 * @param mixed $info 消息内容 * @param mixed $data 返回数据 * @param integer $code 返回代码 */ public function success($info, $data = '{-null-}', $code = 1) { if ($data === '{-null-}') { $data = new stdClass(); } throw new HttpResponseException(json([ 'code' => $code, 'info' => $info, 'data' => $data, ])); } /** * URL重定向 * @param string $url 跳转链接 * @param integer $code 跳转代码 */ public function redirect($url, $code = 301) { throw new HttpResponseException(redirect($url, $code)); } /** * 返回视图内容 * @param string $tpl 模板名称 * @param array $vars 模板变量 */ public function fetch($tpl = '', $vars = []) { foreach ($this as $name => $value) { $vars[$name] = $value; } throw new HttpResponseException(view($tpl, $vars)); } /** * 模板变量赋值 * @param mixed $name 要显示的模板变量 * @param mixed $value 变量的值 * @return $this */ public function assign($name, $value = '') { if (is_string($name)) { $this->$name = $value; } elseif (is_array($name)) { foreach ($name as $k => $v) { if (is_string($k)) { $this->$k = $v; } } } return $this; } /** * 数据回调处理机制 * @param string $name 回调方法名称 * @param mixed $one 回调引用参数1 * @param mixed $two 回调引用参数2 * @return boolean */ public function callback($name, &$one = [], &$two = []) { if (is_callable($name)) { return call_user_func($name, $this, $one, $two); } foreach ([$name, "_{$this->app->request->action()}{$name}"] as $method) { if (method_exists($this, $method) && false === $this->$method($one, $two)) { return false; } } return true; } }