<div class="article-content">
<h1>CSpeed micro framework written in C</h1>
<div></div>
<h2>开发环境</h2>
<pre class="hljs bash"><code class="copyable">Linux kernel 4.4.x、PHP7.1.8、Nginx1.12.1
Github:
https://github.com/liqiongfan/cspeed
扩展只支持PHP7.x以上版本,低于PHP7.x的版本请先升级PHP
在WEB应用模式下,扩展通过解析 PATH_INFO 参数信息进行路由转发,请先确保 WEB服务器支持 PATH_INFO 模式,并且需要隐藏index.php
否则系统不生效,无法完成路由解析。
推荐的Nginx配置:
location / {
<span class="hljs-comment"># try_files $uri $uri/ /index.php$uri;</span>
<span class="hljs-keyword">if</span> (!<span class="hljs-_">-e</span> <span class="hljs-variable">$request_filename</span>) {
rewrite ^/(.*)$ /index.php/<span class="hljs-variable">$1</span> last;
}
<span class="hljs-comment"># 如果是二级目录请设置为二级目录形式</span>
}
location ~ \.php {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_split_path_info ^(.+\.php)(.*)$;
fastcgi_param PATH_INFO <span class="hljs-variable">$fastcgi_path_info</span>;
fastcgi_param SCRIPT_FILENAME <span class="hljs-variable">$document_root</span><span class="hljs-variable">$fastcgi_script_name</span>;
include fastcgi_params;
}
<span class="copy-code-btn">复制代码</span></code></pre>
<div></div>
<h2>简单的 WEB 示例</h2>
<p>WEB 目录设置为如下:</p>
<pre class="blockcode"><code class="language-php"><code class="copyable">+<span class="hljs-keyword">public</span>
|--index.php 入口文件
+controllers
|--Index.php Index默认控制器
+admin 新增admin模块
|--controllers admin模块下的控制器目录
|--Index admin模块的Index控制器
+fronted fronted模块
|--controllers fronted模块控制器目录
|--Index fronted模块Index控制器
<span class="copy-code-btn">复制代码</span></code></code></pre>
<p>public 目录下 index.php 内容如下:</p>
<pre class="hljs bash"><code class="copyable"><span class="hljs-variable">$app</span> = new \Cs\App();
<span class="hljs-variable">$app</span>->run();
/* 超简单的框架已经完成 */
<span class="copy-code-btn">复制代码</span></code></pre>
<p>在 public 同级的目录controllers下创建一个 Index.php 文件,内容如下:</p>
<pre class="blockcode"><code class="language-php"><code class="copyable">Index.php:
<span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">Index</span> </span>{
<span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">indexAction</span><span class="hljs-params">()</span></span>{
<span class="hljs-comment">// 当需要渲染视图的时候,请使用 $this->view 获得 View 引擎然后使用引擎具有的方法进行视图渲染 </span>
<span class="hljs-keyword">echo</span> <span class="hljs-string">'<h1>Hello CSpeed</h1>'</span>;
}
}
<span class="copy-code-btn">复制代码</span></code></code></pre>
<p>配置好 Nginx 路由,打开浏览器,输入配置好的网站地址就会看到刚刚输入的内容:</p>
<pre class="hljs bash"><code class="copyable">http://path_to_cspeed
<span class="copy-code-btn">复制代码</span></code></pre>
<p>WEB应用路由规则:</p>
<pre class="hljs bash"><code class="copyable">假设配置的Nginx如上,配置网站 www.supjos.cn 指向:public目录下的index.php文件
那么,路由规则如下三种情况所示:
1)、www.supjos.cn
不带PATH_INFO的路由指向与public目录同级的controllers下的Index.php控制器的indexAction方法
2)、www.supjos.cn/backend/goods/lists
路由到backend模块的goods控制器下的listsAction方法
3)、www.supjos.cn/sys/info
路由到与public同级的controllers目录下Sys.php下的infoAction方法
<span class="copy-code-btn">复制代码</span></code></pre>
<h2>注意</h2>
<pre class="blockcode"><code class="language-php"><code class="copyable">控制器文件首字母必须大写
如下路由所示:
www.supjos.cn/web/index/lists
模 块: web 一个模块对应一个目录,此处对应web目录
控制器: index 控制器文件命名为 Index.php
方 法: listsAction CSpeed系统方法名都以Action结尾
<span class="copy-code-btn">复制代码</span></code></code></pre>
<h2>简单的 API 应用</h2>
<p>public 目录下的 index.php 内容如下:</p>
<pre class="blockcode"><code class="language-php"><code class="copyable">index.php
<span class="hljs-comment">/* 当实例化一个 \Cs\App 类后,系统自动进行 autoload, autoload的机制参见下面介绍 */</span>
$app = <span class="hljs-keyword">new</span> \Cs\App();
<span class="hljs-comment">/**
* 方法的第一个参数支持正则匹配,第二个参数是一个Closure闭包函数
*/</span>
$app->get(<span class="hljs-string">'/index$'</span>, <span class="hljs-function"><span class="hljs-keyword">function</span><span class="hljs-params">()</span></span>{
<span class="hljs-keyword">echo</span> |
|