Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
50 changes: 36 additions & 14 deletions reference/yaf/appconfig.xml
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: f4ff30a7a6a555fc825577d2cb877e3a07094d6b Maintainer: Carbyn Wu Status: ready -->
<!-- CREDITS: mowangjuanzi -->
<!-- EN-Revision: ddcf673c59d1708557680946fbffeee361d7fca6 Maintainer: mowangjuanzi Status: ready -->
<chapter xml:id="yaf.appconfig" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
<title xmlns="http://docbook.org/ns/docbook">应用程序配置</title>
<para>
Expand Down Expand Up @@ -46,6 +45,30 @@ yaf.dispatcher.catchException = 0
]]>
</programlisting>
</example>
<tip>
<simpara>
当配置变得庞大时,每次请求都会重新解析 ini 文件的 <classname>Yaf_Config_Ini</classname>
会带来明显的开销。
<link xlink:href="&url.pecl.package;yaconf">Yaconf</link> 只在 PHP 启动时
把某个目录下的所有 ini 文件解析一次,并把解析结果保存在共享内存中。
将 <literal>yaconf.directory</literal> 设置为存放配置的目录,然后把返回的数组传给
<methodname>Yaf_Application::__construct</methodname>:
</simpara>
<programlisting role="php">
<![CDATA[
<?php
// in php.ini: yaconf.directory = /path/to/app/conf
$app = new Yaf_Application(Yaconf::get("application"));
?>
]]>
</programlisting>
<simpara>
包含 <literal>[section]</literal> 标头的文件会按分节暴露为多个条目(继承关系,
如 <literal>[product : yaf]</literal>,会被自动解析)。可以用点号获取单个分节,
<literal>Yaconf::get("application.product")</literal>,然后改传该数组;
它的键恰好是该分节合并后的各个条目。
</simpara>
</tip>
</para>
<para>
<table>
Expand Down Expand Up @@ -159,9 +182,9 @@ yaf.dispatcher.catchException = 0
</para>
<para>
<note>
<para>
此为唯一没有默认值的配置条目,应该始终手动定义它。
</para>
<simpara>
此为唯一没有默认值的配置条目,应该始终手动定义它。
</simpara>
</note>
</para>
</listitem>
Expand Down Expand Up @@ -213,10 +236,10 @@ yaf.dispatcher.catchException = 0
<link linkend="ini.yaf.library">yaf.library</link>。
</para>
<note>
<para>
Yaf 2.1.6 以后,该配置项可以是数组。类库的路径将尝试使用 <link
linkend="configuration.yaf.library.directory">application.library.directory</link> 中设置的条目。
</para>
<simpara>
Yaf 2.1.6 以后,该配置项可以是数组。类库的路径将尝试使用 <link
linkend="configuration.yaf.library.directory">application.library.directory</link> 中设置的条目。
</simpara>
</note>
</listitem>
</varlistentry>
Expand All @@ -227,9 +250,8 @@ yaf.dispatcher.catchException = 0
</term>
<listitem>
<para>
Alias of <link
linkend="configuration.yaf.library">application.library</link>. Introduced
in Yaf 2.1.6
<link linkend="configuration.yaf.library">application.library</link> 的别名。
自 Yaf 2.1.6 引入
</para>
</listitem>
</varlistentry>
Expand Down Expand Up @@ -355,9 +377,9 @@ yaf.dispatcher.catchException = 0
在application.ini中设置Yaf运行时配置,如:
<link linkend="ini.yaf.lowcase-path">application.system.lowcase_path</link>
<note>
<para>
<simpara>
仅有 <constant>INI_ALL</constant> 配置项能这样设置
</para>
</simpara>
</note>
</para>
</listitem>
Expand Down
31 changes: 20 additions & 11 deletions reference/yaf/book.xml
Original file line number Diff line number Diff line change
@@ -1,23 +1,30 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: 68c2c871505aadf983f16113c5b077b335ce8d76 Maintainer: Carbyn Wu Status: ready -->
<!-- CREDITS: mowangjuanzi -->
<!-- EN-Revision: ddcf673c59d1708557680946fbffeee361d7fca6 Maintainer: mowangjuanzi Status: ready -->
<book xml:id="book.yaf" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
<?phpdoc extension-membership="pecl" ?>
<title>Yet Another Framework</title>
<titleabbrev>Yaf</titleabbrev>

<preface xml:id="intro.yaf">
&reftitle.intro;
<para>
<literal>Yet Another Framework</literal> (<acronym>Yaf</acronym>) 扩展是一个用来开发 web 应用程序的 PHP 框架。
</para>
<para>
可以在 <link xlink:href="&url.yaf.benchmarks;">Yaf Performance</link> 中找到简单的 Yaf 基准测试。
</para>
<para>
快速入门请参见<link linkend="yaf.tutorials">教程</link>部分。
</para>
<simpara>
<literal>Yet Another Framework</literal>(<acronym>Yaf</acronym>)扩展是一个用来开发 web 应用程序的 PHP 框架。
</simpara>
<simpara>
与典型的 PHP 框架不同,Yaf 使用 C 语言编写并编译为扩展:框架类、自动加载器、路由器和分发循环都运行在编译后的代码中,因此单次请求的框架开销以微秒而非毫秒计,也没有需要加载的框架 PHP 文件。它为引导成本至关重要的高流量应用,以及每个请求都需要一个干净的分发周期的长生命周期服务运行时(例如 Swoole)而设计。
</simpara>
<simpara>
Yaf 实现了经典的 <acronym>MVC</acronym> 架构:单一入口脚本、带有环境分节的配置文件、引导钩子、具有七个分发钩子的插件系统、六种内置路由类型、PSR-0 风格的自动加载器(<classname>Yaf_Loader</classname>)以及轻量级的 PHP 模板视图(<classname>Yaf_View_Simple</classname>)。
</simpara>
<simpara>
可以在 <link xlink:href="&url.yaf.benchmarks;">Yaf Performance</link> 中找到简单的 Yaf 基准测试。快速入门指南请参见 <link linkend="yaf.tutorials">教程</link> 部分。
</simpara>
<note>
<simpara>
Yaf 需要 PHP 7.0 或更高版本(其源码仓库的 master 分支);另有 php5 分支支持 PHP 5.2 及更高版本。
</simpara>
</note>
</preface>

&reference.yaf.setup;
Expand All @@ -41,6 +48,8 @@
&reference.yaf.yaf-request-http;
&reference.yaf.yaf-request-simple;
&reference.yaf.yaf-response-abstract;
&reference.yaf.yaf-response-cli;
&reference.yaf.yaf-response-http;
&reference.yaf.yaf-route-interface;
&reference.yaf.yaf-route-map;
&reference.yaf.yaf-route-regex;
Expand Down
52 changes: 40 additions & 12 deletions reference/yaf/constants.xml
Original file line number Diff line number Diff line change
@@ -1,10 +1,12 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: 86e6094e86b84a51d00ab217ac50ce8dde33d82a Maintainer: Carbyn Wu Status: ready -->
<!-- CREDITS: mowangjuanzi -->
<!-- EN-Revision: ddcf673c59d1708557680946fbffeee361d7fca6 Maintainer: mowangjuanzi Status: ready -->
<appendix xml:id="yaf.constants" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
&reftitle.constants;
&extension.constants;
<simpara>
当启动、路由、分发或自动加载过程中发生错误时,Yaf 要么抛出一个异常代码为 <literal>YAF_ERR_*</literal> 常量之一的 <exceptionname>Yaf_Exception</exceptionname> 子类,要么触发相应类型的 PHP 错误——参见 <methodname>Yaf_Dispatcher::throwException</methodname> 和 <methodname>Yaf_Application::getLastErrorNo</methodname>。
</simpara>
<para>
<variablelist>
<varlistentry xml:id="constant.yaf-version">
Expand All @@ -14,6 +16,7 @@
</term>
<listitem>
<simpara>
已加载的 Yaf 扩展的版本,例如 <literal>"3.3.8"</literal>。
</simpara>
</listitem>
</varlistentry>
Expand All @@ -24,6 +27,7 @@
</term>
<listitem>
<simpara>
扩展启动时 <link linkend="ini.yaf.environ">yaf.environ</link> 指令的值,<classname>Yaf_Application</classname> 用它来选择配置分节。默认值为 <literal>"product"</literal>。
</simpara>
</listitem>
</varlistentry>
Expand All @@ -34,6 +38,7 @@
</term>
<listitem>
<simpara>
启动失败,值为 <literal>512</literal>。当 <classname>Yaf_Application</classname> 无法启动时以 <exceptionname>Yaf_Exception_StartupError</exceptionname> 抛出,例如应用目录缺失或配置无效。
</simpara>
</listitem>
</varlistentry>
Expand All @@ -44,6 +49,7 @@
</term>
<listitem>
<simpara>
路由失败,值为 <literal>513</literal>。当没有任何路由能够处理该请求时以 <classname>Yaf_Exception_RouterFailed</classname> 抛出。
</simpara>
</listitem>
</varlistentry>
Expand All @@ -54,16 +60,7 @@
</term>
<listitem>
<simpara>
</simpara>
</listitem>
</varlistentry>
<varlistentry xml:id="constant.yaf-err-autoload-failed">
<term>
<constant>YAF_ERR_AUTOLOAD_FAILED</constant>
(<type>int</type>)
</term>
<listitem>
<simpara>
分发失败,值为 <literal>514</literal>。当请求无法被分发时以 <classname>Yaf_Exception_DispatchFailed</classname> 抛出,例如超出 <link linkend="ini.yaf.forward-limit">yaf.forward_limit</link>。
</simpara>
</listitem>
</varlistentry>
Expand All @@ -74,6 +71,7 @@
</term>
<listitem>
<simpara>
找不到模块,值为 <literal>515</literal>。以 <classname>Yaf_Exception_LoadFailed_Module</classname> 抛出。
</simpara>
</listitem>
</varlistentry>
Expand All @@ -84,6 +82,7 @@
</term>
<listitem>
<simpara>
找不到控制器,值为 <literal>516</literal>。以 <classname>Yaf_Exception_LoadFailed_Controller</classname> 抛出。
</simpara>
</listitem>
</varlistentry>
Expand All @@ -94,6 +93,7 @@
</term>
<listitem>
<simpara>
找不到动作,值为 <literal>517</literal>。以 <classname>Yaf_Exception_LoadFailed_Action</classname> 抛出。
</simpara>
</listitem>
</varlistentry>
Expand All @@ -104,6 +104,7 @@
</term>
<listitem>
<simpara>
找不到视图脚本,值为 <literal>518</literal>。以 <classname>Yaf_Exception_LoadFailed_View</classname> 抛出。
</simpara>
</listitem>
</varlistentry>
Expand All @@ -114,6 +115,18 @@
</term>
<listitem>
<simpara>
调用方法失败,值为 <literal>519</literal>。当动作方法或其他可调用对象无法被调用时使用。
</simpara>
</listitem>
</varlistentry>
<varlistentry xml:id="constant.yaf-err-autoload-failed">
<term>
<constant>YAF_ERR_AUTOLOAD_FAILED</constant>
(<type>int</type>)
</term>
<listitem>
<simpara>
自动加载失败,值为 <literal>520</literal>。当类的文件无法被加载时由 <classname>Yaf_Loader</classname> 触发,例如解析出的路径过长。
</simpara>
</listitem>
</varlistentry>
Expand All @@ -124,6 +137,21 @@
</term>
<listitem>
<simpara>
发生类型错误,值为 <literal>521</literal>。当参数或类定义的类型不符合预期时以 <exceptionname>Yaf_Exception_TypeError</exceptionname> 抛出,例如控制器不是一个继承自 <classname>Yaf_Controller_Abstract</classname> 的类。
</simpara>
</listitem>
</varlistentry>
<varlistentry xml:id="constant.yaf-err-access-error">
<term>
<constant>YAF_ERR_ACCESS_ERROR</constant>
(<type>int</type>)
</term>
<listitem>
<simpara>
不允许访问,值为 <literal>522</literal>。例如尝试调用一个非 public 的动作方法时使用。
</simpara>
<simpara>
(自 Yaf 3.2.0 起可用。)
</simpara>
</listitem>
</varlistentry>
Expand Down
Loading