HLEB2框架引入了一些自定义功能,不同的用途旨在减少代码大小并加快应用程序开发,因为它们是常见操作的简写。
一些内置框架的功能名称以hl_开头,并且这些功能也有不带该前缀的重复。因此,如果忘记所需函数的名称,只需在代码中键入hl_,您的IDE应该会自动建议可用选项。
HLEB2框架具有自己的路由系统。以下功能旨在与此系统进行交互。如果您习惯为路由分配自定义名称,它们可能会在此处派上用场。
此函数返回当前路由的名称或null如果未分配名称。
尽管这是一条非常有用的信息,但它可能只有在使用另一个与地址结合的函数时才需要。
url()函数根据路由名称及替换必要参数返回相对URL地址。
函数参数:
routeName - 需要获取地址的路由名称。
replacements - 如果路由是动态的, 替换部分的数组。
endPart - 布尔值, 确定地址的最后一部分是否需要, 如果在路由中是可选的。
method - 需要哪个HTTP方法的地址。某些方法可能不适合此路由,在这种情况下将返回错误。默认是'get'。
通过路由名称一致地使用内部 URL,应用程序可以改变路由中地址的静态部分,而无需更改其余代码。
address()函数返回基于路由名的完整URL,并替换当前域。由于域名仅为当前域名,对于其他域,请使用与url()的连接。
参数集与url()函数类似。此函数可用生成项目页面的正确链接。然而,对于应用内导航,最好使用相对的URL。
返回包含当前请求的相对URL信息的对象。
由request_uri()函数返回的对象基于PSR-7中的UriInterface(方法getUri()),由此可以获取以下请求数据:
request_uri()->getHost() - 当前请求的域名,例如'mob.example.com'。根据请求中的存在,可能包括端口。
request_uri()->getPath() - 主机后的地址路径,例如'/ru/example/page'或'/ru/example/page/'。
request_uri()->getQuery() - 请求参数,例如'?param1=value1¶m2=value2'。
request_uri()->getPort() - 请求端口。
request_uri()->getScheme() - 请求的HTTP方案,'http'或'https'。
request_uri()->getIp() - 请求的IP地址。
在这些request_uri()的例子中,一个表达式中使用了两种命名风格(snake_case和camelCase),因为大多数HLEB2框架的函数采用类似于PHP函数的snake_case,而返回对象的方法按照PSR-12采用camelCase。如果您习惯其他函数格式,则将当前函数包装为所需的格式。
request_host()函数允许获取当前主机,可能包含端口。例如,example.com或example.com:8080,如果它在请求URL中指定。这对生成项目页面的正确链接非常有用。然而,应用程序内部导航最好使用相对URL。
request_path()函数从URL中返回当前请求的相对路径,不包含GET参数。例如,/ru/example/page或/ru/example/page/。
request_address()函数从URL中返回当前请求的完整地址,不包含GET参数。例如,`https://example.com/ru/example/page`或`https://example.com/ru/example/page/`。
重定向到应用程序的其他页面或其他URL。
hl_redirect() 函数使用指定的头执行重定向并退出脚本。因此,如果在应用此函数之前已经输出了内容,标题不会被发送,而是会显示警告而不是重定向。它基于 'Location' 头操作。在基于框架的类中,例如控制器中,更适合使用类似的方法 Redirect::to()。
框架或自定义设置中的配置数据可以在应用程序代码中使用。以下函数允许在项目代码的任何地方检索这些数据。
项目参数和设置应被收集在其配置文件中,并且它们不仅可以用于应用程序的需求,也可用于配置连接的第三方库。
每个配置参数根据主文件名按组分配。
这些可能是标准组 ('common', 'database', 'main', 'system') 或为项目创建的附加组。组名作为第一个参数传递给 config() 函数。
参数名本身是第二个参数。函数返回该参数的值。例如:
如 get_config_or_fail() 名称所示,此函数返回配置参数的值或在找不到参数或其为 null 时抛出错误。 参数与 config() 函数类似。
由于建议将自定义值添加到 'main' 组中,因此为频繁使用此配置提供了一个单独的函数 setting()。 它的用法类似于 config() 函数,第一个参数为 'main'。
特殊函数 hl_db_config() 是 config() 函数的等效函数,第一个参数为 'database'。
hl_db_connection() 函数用于从 'database' 设置组的 'db.settings.list' 列表中获取任何现有连接的数据。它返回包含设置的数组,如果找不到设置则抛出错误。
hl_db_active_connection() 函数类似于 hl_db_connection() 函数,但用于返回在 'base.db.type' 参数中标记为 "active" 的连接设置数组。
这些访问数据库参数的函数在添加需要特定数据库连接配置的第三方库时非常重要。
框架包含几个用于快速代码调试的函数。它们以多种方式补充和扩展了 PHP 的 var_dump() 函数。可以根据情况选择合适的函数。
这个函数保留自框架的第一个版本。它用于以可读的格式显示数据,以便在调试面板中查看。因此,在关闭 DEBUG 模式时,传递给函数的调试数据不会显示,因为调试面板已禁用。这在开发过程中很方便,因为无需担心它在非调试模式下的可见性。print_r2() 函数的第二个可选参数允许您为显示的数据添加描述,以便在面板中轻松识别。示例:
var_dump2() 函数是 var_dump() 的完全等价物,但输出的信息更具结构性。如果输出用于浏览器,则会保留原始的换行和缩进。
dump() 函数是 var_dump() 的另一个封装,但它将结果转换为 HTML 代码,比标准输出更清晰和信息丰富。
类似于 dump(),它输出 HTML 代码,但在输出后终止脚本。dd() 函数在应用页面中很容易找到,因为它的输出将显示在页面的最下方。
HLEB2 框架在项目根目录下通过相对路径组织文件和目录操作。这样的路径以 '@/' 开头以表示根目录。这种方法在框架中的许多标准服务中被使用,且推荐保持一致使用。以下函数是对相应的 PHP 函数的封装,增加了 '@' 前缀的支持。
hl_file_exists() 函数是 PHP 函数 file_exists() 的类似功能,但它也接受以 '@' 开头的特殊路径。
hl_file_get_contents() 函数类似于 PHP 函数 file_get_contents(),但允许使用以 '@' 开头的特殊路径。
hl_file_put_contents() 函数与 PHP 函数 file_put_contents() 相同,也接受以 '@' 开头的路径。
hl_is_dir() 函数类似于 PHP 函数 is_dir(),但它也可以接受带有 '@' 前缀的路径。
框架中关于 CSRF 攻击保护 的详细实现文档。
csrf_token() 函数返回一个用于防护 CSRF 攻击的安全令牌。
csrf_field() 函数返回用于插入表单的 HTML 内容,以保护免受 CSRF 攻击。
虽然框架支持集成 Twig 模板引擎,但它还提供了一种简单的内置模板实现,不使用不同于标准 PHP 或 HTML 的自定义语法。了解更多关于框架的标准模板。
使用 insertTemplate() 函数,生成的模板会插入在调用该函数的位置。主要参数:
viewPath - 指向模板文件的特定路径。格式类似于 view() 函数中使用的路径类型。
extractParams - 一个关联数组,将被转换为模板变量。
template() 函数返回框架模板的文本表示。如果需要将内容传递到其他地方,例如用于邮件模板时,这非常有用。参数与 insertTemplate() 函数类似。
insertCacheTemplate() 函数类似于 insertTemplate(),区别在于模板会缓存指定在 sec 参数中的秒数。其他参数与 insertTemplate() 函数相同。
各种专用功能。
以比PHP函数empty()更挑剔的方式检查值是否为空。 is_empty函数只会在四种情况下返回false:传入空字符串、null、false或空数组。传入未声明的变量将导致错误,因此为了模拟原始函数,可以通过在函数前添加'@'来抑制此错误,例如:
尽管使用错误抑制是一种不良实践,但在is_empty()函数中的代码不意味着会发生其他错误。
日志记录函数logger()返回一个对象,该对象具有记录各种级别数据的方法。
once()函数使代码只对单个请求执行一次,并且在随后的调用中返回先前的结果。
执行结果在请求的整个持续期间内存储在内存中。
在此场景中,传递给once()的匿名函数将在第一次调用once时执行:
返回按参数名获取的动态请求数据对象,并可以选择值的格式。
例如,如果动态路由指定参数 /{test}/,而请求是 /example/,则 param('test')->value 将返回 'example'。
param('test')->value; - 直接获取值。
param('test')->value(); - 直接获取值。
param('test')->asInt(); - 返回转换为 integer 的值,不存在则为 null。
param('test')->asInt($default); - 返回转换为 integer 的值,
不存在则返回 $default。
如果路由的最后一部分是可选变量值,该值将为 null。
对于作为直接值获取的用户数据,需要注意安全。
在大多数情况下,框架的标准功能是相应服务的包装器,因此其测试类似于该服务的测试。