调用指定控制器
不通过路由, 直接调用指定的控制器和方法
程序入口
require __DIR__ . '/../../crossboot.php';
Cross\Core\Delegate::loadApp('web')->get('main:index');
get()
方法接受三个参数:
- 第一个参数指明要调用的控制器和方法, 如果省略方法名, 会调用控制器的
index
方法 - 第二个参数为运行时要传给指定控制器的参数数组
- 第三个参数为一个布尔值, 默认是
flase
, 表示直接输出结果, 如果该参数的值为true
, 则返回输出内容
一般使用方法
和run()
配合实现访问权限控制, 比如admin
这个app的入口定义如下:
session_start();
require __DIR__ . '/../../crossboot.php';
$admin = Cross\Core\Delegate::loadApp('admin');
//登录成功后$_SESSION['u']会被赋值
//如果$_SESSION['u']为空,访问任何页面都只会输出登录界面
if (empty($_SESSION['u'])) {
$admin->get('Main:login');
} else {
$admin->run();
}
除此之外还可以把框架当脚手架来用, 手动解析URL参数, 调用指定的控制器
require __DIR__ . '/../../crossboot.php';
$web = Cross\Core\Delegate::loadApp('web');
//例如url为:http://localhost/?controller=main&action=index&a=b&b=2&c=3
$request = $_GET + $_POST;
$controller = !empty($request['controller'])?$request['controller']:'defaultController';
$action = !empty($request['action'])?$request['action']:'defaultAction';
unset($request['controller'], $request['action']);
try {
//调用指定控制器和方法并传参
$web->get("{$controller}:{$action}", $request);
} catch (Exception $e) {
//正式环境下捕获运行过程中的异常信息
//调用指定的控制器处理异常信息
$web->get('error');
}
还易于与第三方程序配合, 实现更强大的功能, 例如用workerman
处理socket链接, 用cp处理逻辑
//框架依赖的唯一常量
define('PROJECT_PATH', __DIR__);
//使用composer install来进行安装
//require PROJECT_PATH . '/vendor/autoload.php';
//使用压缩包安装时候,需要引入框架根目录下的boot.php文件
require PROJECT_PATH . '/lib/crossphp/boot.php';
//载入workerman
require PROJECT_PATH . '/lib/workerman-for-win-master/Autoloader.php';
use Workerman\Worker;
$app = Cross\Core\Delegate::loadApp('api');
$worker = new Worker('tcp://0.0.0.0:1234');
$worker->count = 3;
$worker->onMessage = function($connection, $data) use($app) {
//解析客户端参数
//调用指定控制器将结果交给workerman发送至客户端
$content = $app->get('main:index', array(), true);
$connection->send($content);
};
Worker::runAll();