路由设置
路由定义一般都是在 入口文件 index.php 中定义的,如果使用默认的路由规则,我们可以简单的使用以下代码定义路由规则。
如 /www/index.php 的简单定义。
use beacon\core\App;
#设置时区
date_default_timezone_set('PRC');
###开发可打开调试模式,上线时一定要关闭
const DEV_DEBUG = true;
#调试日志输出
const DEBUG_LOG = true;
#调试sql语句输出
const DEBUG_MYSQL_LOG = true;
#使用 REDIS_SESSION
const USE_REDIS_SESSION = false;
#定义根目录
define('ROOT_DIR', dirname(__DIR__));
#以上定义常量---------
#引入composer 启动文件
require(ROOT_DIR . '/vendor/autoload.php');
#定义路由
App::route('home', '/');
App::route('admin', '/admin');
App::route('service', '/service');
#运行应用
App::run();
其中 定义路由 可以使用
App::route() 来定义,
第1个参数是模块名称,如 home admin
第2个参数是 url 链接的模块路径(在BeaconPHP中也称为模块基础路径base),
第3个参数是模块命名空间(如果不填 默认是 \app\模块名称 )
例如 1. 我们需要请求链接
www.xxx.com/
www.xxx.com/ctl/
www.xxx.com/ctl/act
指向我们的 home 模块,那么我们 第2个参数可以设置为 '/' 默认情况下 www.xxx.com/ 也会指向 home
如果我们有后台模块 admin
我们希望
www.xxx.com/admn/
www.xxx.com/admn/ctl
www.xxx.com/admin/ctl/act
指向我们的 admin 模块,那么我们第二个参数配置为 '/admin'
每个模块不能设置相同的名称 和 模块路径。
App::route('admin','/mm')
我们不一定需要路径前缀和我的模块名称保持一致,例如上行,中 www.xxx.com/mm 被设置为admin模块的base(基础路径)请求路径。
在beaconPHP 框架中,我们一般定义:
控制器名称 用 ctl 表示,
操作名称 用 act 表示,
模块名称用 app 表示,
基础路径 用 base 表示
在项目代码中,我们可以使用 App::get($name) 来获取相应的值。
如:
#获取当前 基础路径
$base=App::get('base');
#获取当前模块名称
$app=App::get('app');
#获取当前控制器名称,返回的值会转换成小写+下划线组合,例如 my_book 会映射到控制器类 MyBook 控制器。
$ctl=App::get('ctl');
#获取当前操作名称,在控制器中Method 可以指定绑定的控制器方法,只存在小写+下划线
$act=App::get('act');
在控制器和模板代码中我们可以使用 $this->route($name) 来获取相应的值,与全局App::get($name) 参数和返回值一致。
class Index extends Controller
{
/**
* /index
* 直接输出字符串
* @return string
*/
#[Method(act: 'index', method: Method::GET)]
public function index()
{
echo $this->route('base') . '</br>';
echo $this->route('app') . '</br>';
echo $this->route('ctl') . '</br>';
echo $this->route('act') . '</br>';
}
}
或者在模板中使用:
class Index extends Controller
{
#[Method(act: 'index', method: Method::GET)]
public function index()
{
#字符串模板
$template = <<< 'EOF'
base:{$this->route('base')}<br>
app:{$this->route('app')}<br>
ctl:{$this->route('ctl')}<br>
act:{$this->route('act')}<br>
EOF;
$this->display('string:' . $template);
}
}