程序入口
入口文件位于项目的htdocs
目录下, CP
的入口文件也是项目编码中很重要的一部分, 在这里可以根据项目需求处理各种事件
├─admin
│ └─static
│ ├─css
│ ├─images
│ ├─js
│ └─lib
├─api
└─web
└─static
├─images
└─lib
htdocs下的文件夹对app目录下的文件夹名称. 一个app对应一个入口. app之间的资源文件也是独立的.
>css, js, images等都是独立的, 存放在static文件夹下, 入口文件指的是目录下面的index.php
文件
引入启动文件
首先引入启动文件
require __DIR__ . '/../../crossboot.php';
在启动文件中我们定义了项目的绝对路径, 并引入了框架.
指定要启动的app
指定要加载的app名称, 并自动解析uri
Cross\Core\Delegate::loadApp('web')->run()
此时通过浏览器访问htdocs/web/
, 就可以看到默认输出了.
错误处理
CP中并没有开发模式和生产模式的开关, 开发模式下如果有异常发生会自动捕获, 并输出简洁的trace
信息给开发者, 便于调试, 这时的入口文件一般如下
require __DIR__ . '/../../crossboot.php';
Cross\Core\Delegate::loadApp('web')->run();
在生产环境下, 需要在程序入口自己捕获异常.
require __DIR__ . '/../../crossboot.php';
$web = Cross\Core\Delegate::loadApp('web');
try {
$web->run();
} catch (Exception $e) {
$web->get('error', array('exception' => $e));
}
当有异常发生时, 捕获异常, 调用错误处理控制器, 并把捕获的异常信息当参数传递给错误处理控制器. 下例是一个简单的错误处理控制器:
namespace app\web\controllers;
use Cross\Core\Helper;
use Cross\Core\Loader;
class Error extends Web
{
/**
* @return mixed
*/
function index()
{
$exception = $this->params['exception'];
$log['msg'] = $exception->getMessage();
$log['trace'] = explode("\n", $exception->getTraceAsString());
$log['u'] = $this->u;
$log['date'] = date('H:i:s', TIME);
$log['client_ip'] = Helper::getIp();
$exception_log_file = Loader::getFilePath('::cache/exception/'.date('Y-m/d').'.txt');
Helper::mkfile($exception_log_file);
error_log(print_r($log, true), 3, $exception_log_file);
$this->display($this->data);
}
}
这里保存了异常消息, trace, 还会保存用户信息, 日期, 和客户端IP, 按日期保存在一个文本文件中. 这个控制器和项目中的其他普通控制器并没有差别, 你可以在这里调用Module, 把异常数据存在数据库中, 还可以数据库中返回一些你推荐数据展示给用户.
>"错误页面"不再只是一个页面, 也可以多姿多彩