# etview
**Repository Path**: WhenCome/etview
## Basic Information
- **Project Name**: etview
- **Description**: etview是一个简单易用、轻量化的MVC框架。它通过自定义标签完成了常规需要繁琐代码才能展示的数据以及逻辑控制。
- **Primary Language**: PHP
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2021-12-22
- **Last Updated**: 2021-12-22
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# etview
etview是一个简单易用、轻量化的MVC框架。它通过自定义标签完成了常规需要繁琐代码才能展示的数据以及逻辑控制。etview具有如下特点:
1. 轻量化 : 整个框架代码不压缩也才几十KB;
2. 简单: 我们只提供了一些常用且必须的标签和功能,其他比如数据库操作等,开发者可以根据自己需要选择不同的组件然后集成;
3. 支持布局文件: 使用布局的好处是不言而喻,而使用布局也只需要一行代码,开发者在引入布局后,在view层面只需要关心需要修改的部分即可;
4. 入手方便: etview应该来说几乎不要学习成本,几分钟即可完全掌握。
## 内容介绍
* nginx配置(示例)
* 使用框架
* 配置
* 创建入口
* 控制器
* 展示数据
* 布局
## nginx配置(示例)
```
server {
listen 80;
listen [::]:80;
server_name www.etview.org; # 请自行修改server_name
root /mnt/e/test/www;
access_log /var/log/nginx/etview_access.log;
error_log /var/log/nginx/etview_error.log;
location / {
index index.php index.html;
if (!-f $request_filename) {
rewrite (.*) /index.php?_route_=$1 last;
break;
}
}
location ~ \.md$ {
return 404;
}
location ~ \.php$ {
if ($request_filename !~* \/index\.php$) {
return 404;
}
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
}
}
```
## 使用框架
代码地址:
下载好代码后,将etview目录放入项目的vendor目录下(或者其他目录),包含自动加载文件,使得可以直接通过 **\etview** 命名空间直接访问etview相关的功能代码。
## 配置
当前的版本是默认将配置放在 **\config\ETView** 中,配置示例可见 **\etview\config\ETView.php** 。 配置内容如下:
```php
array(
'controller', // 用于指明当前需要访问哪个控制器,以“.”作为路径分隔符
'action', // Action用于生成数据,是控制器中的"actionXXX"方法,此处配置需要填“XXX”,不需要"action"前缀
'view' // 页面展示的视图,没有则置空,如果有,则以“.”号作为路劲分隔符
),
);
我们来看一个简单的示例:
```php
$routeMaps = array(
'/home' => array('controller.Index', 'Index', 'index.index'),
'/article' => array('controller.Index', 'View', 'index.view'),
'/cate' => array('controller.Index', 'Category', 'index.index'),
'/api' => array('controller.Index', 'Api'), // 没有view
);
```
route maps配置好之后,我们再使用几行代码就可以了。看下面的例子:
```php
// 第一步,我们需要创建一个Page对象,这个整个站点的入口
$page = new \etview\Page();
// 第二步,我们需要设置默认的route,即没有任何匹配route的情况下我们指向哪个页面
$page->setDefaultRoute('/home');
// 第三步,设置route maps,其中第二个参数告诉etview通过哪个请求参数获取route信息
$page->init($routeMaps, '_route_');
// 第四步,展示页面
$page->display();
```
至此,一个完整的入口就搭建好了,下面我们就开始准备数据以及展示数据。
## 控制器
### controller简单入门
etview对控制器有一点强制性的要求:
1. 继承 \etview\ControllerBase 类;
2. action是以“action”开头的无参方法,如:“actionIndex”;
至于返回值,其实并不特别要求。那么,如何将数据反馈到页面呢?有两种方式:
1. 返回一个数组,其中键用于标识一个数据;
2. 在action中直接调用 *$this->addFieldData($key, $value); * 方法向页面添加数据。
一个简单的示例:
```php
addFieldData('title', 'This is a title');
// 返回需要向页面添加的内容
return array(
"content" => "Hello, World!"
);
}
}
```
通常,我们既然使用了模板,意味着我们在页面数据上也会有一部分始终是通用的,如果在每个action中都取一次,就算我们封装了方法,也会很麻烦。这个时候我们只需要在controller中实现一个initPage()方法即可。如:
```php
addFieldData('title', 'This is a title');
}
public function actionIndex()
{
// 返回需要向页面添加的内容
return array(
"content" => "Hello, World!",
'a' => array(
'b' => 'c'
)
);
}
}
```
### controller提供的方法
controller提供了几个基本方法,用于向页面中添加数据、错误信息以及注册自定义函数,下面简单列出了这些方法的定义。我们将在数据展示一部分介绍如果将添加的数据在页面中展示。
```php
/**
* 添加批量数据.
*
* @param array $data
*/
public function addData(array $data)
/**
* 添加指定字段名的数据.
*
* @param string $field
* @param mixed $data
*/
public function addFieldData($field, $data)
/**
* 添加错误.
*
* @param string $error 错误信息.
*/
public function addError($error)
/**
* 添加错误到指定字段.
*
* @param string $field
* @param string $error
*/
public function addFieldError($field, $error)
/**
* 注册一个方法.
*
* @param string $funcName 方法名称.
* @param \Closure $callback 方法.
*
* @return void
*/
public function registerFunction($funcName, $callback)
```
控制器就是这么简单,下面我们看下如何展示数据。
## 展示数据
展示数据分几种情况,简单来说就是:
1. 简单变量
2. 按条件展示
3. 批量数据处理
4. 错误展示
下面详细说明下以上各种情况的数据展示。
### 简单变量
如果我们需要简单展示一个变量的值,我们有两种方式:
1. <et:val /> 通过标签展示数据
如果我们需要在页面中展示一个数据,我们就使用标签的形式展示,这样可以让整个html模板内容风格更加接近。etview定义了 **<et:val />** 标签用于基本数据展示,比如我们在之前controller中添加了title以及content两项内容的数据,那么我们可以使用下面的方式来输出对应的内容:
```html