结构

目录结构

Yesf应用的基本目录结构如下:

|+ application //应用目录
  |+ Config //配置文件
    |- Project.php //项目相关配置文件
    |- Server.php //服务器相关配置文件
    |- env.ini //其他环境配置
  |+ Model //Model目录
    |- test.php //某个Model
  |+ Module //模块目录
    |+ Index //例如有一个名为Index的模块
      |+ Controller //Index模块的控制器
        |- Index.php //默认控制器
      |+ View //视图(模板)目录
        |+ Index //对应Index控制器
          |- Index.phtml //对应Index方法
          |- User.phtml //对应User方法
  |+ Library //本地类库
  |+ Plugin //插件目录
| + vendor //Composer生成目录
| - start.php //入口文件
| - composer.json //Composer文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20

除了ConfigModule外,其他目录名称都可以自行定义

入口文件

Yesf不同于传统的PHP框架,Yesf将会持久运行,这也就意味着Yesf不需要依赖于nginx/Apache。入口文件只用做启动,内容如下:

<?php
error_reporting(E_ALL &~ E_NOTICE);
require('vendor/autoload.php');
//应用所在目录
define("APP_PATH",  __DIR__ . '/application/');
//初始化
$app = new Yesf\Yesf();
$app->run(APP_PATH . "/Config/env.ini");
1
2
3
4
5
6
7
8

之后,在shell中执行php start.php即可运行

重写规则

尽管Swoole并不依赖于nginx/Apache,但是仍推荐使用nginx来处理请求,例如:(假设/web/wwwroot/public/存放一些静态文件)

server {
  root /web/wwwroot/public/;
  server_name example.com;
  underscores_in_headers on;

  proxy_http_version 1.1;
  proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  proxy_set_header X-Real-IP $remote_addr;
  proxy_set_header Host $host;
  proxy_set_header Connection "keep-alive";

  location / {
    try_files /$uri $uri/ @proxy;
  }

  location @proxy {
    proxy_pass http://127.0.0.1:9000;
  }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19

配置文件

Yesf将配置文件分为三类:

  • Project.php 项目配置

项目配置中一般会存放项目相关的配置,例如项目名称、项目的namespace等,一般来说,不论在任何机器上部署,此处的配置都是相同的。

此配置中部分项目支持热重载。

  • Server.php 服务器配置

主要是Swoole相关配置,一般来说,不同服务器上此处配置可能不同

  • env.ini 环境配置

此配置支持热重载。用于一些其他配置,如数据库连接信息等。

配置文件的详细说明,请参考配置章节

控制器

默认的模块/控制器/动作, 都是以Index命名的。其中,默认的模块可以在配置文件中进行修改

控制器处于应用的命名空间\Module\模块名称\Controller\,名称首字母大写

动作的命名规则是"名字+Action"。

例如,这是一个控制器:

namespace YesfApp\Module\Index\Controller\Index;

class Index {
   	public function IndexAction($request, $response) { //默认Action
       	$response->assign("content", "Hello World");
   	}
}
1
2
3
4
5
6
7

注意:

  • 所有请求均会传入$request$response两个参数,这两个参数分别包括了请求的基本信息和回复请求的方法。详细说明请参考《请求处理》
  • 所有echo、var_dump等输出函数,均不会对浏览器输出任何内容
  • 不要抛出异常

视图文件

Yesf自带的视图引擎十分简单

视图文件的路径是在相应模块目录下的View目录中,文件名称与动作名称相同。

例如,Index模块,User控制器,Login动作的默认模板为application/Module/Index/View/User/Login.phtml

<html>
 <head>
   <title>Hello World</title>
 </head>
 <body>
  <?=$content?>
 </body>
</html>
1
2
3
4
5
6
7
8

运行

使用php start.php启动,之后,在浏览器中访问http://127.0.0.1:9000,即可看到“Hello World”的输出