# LazyYUE
**Repository Path**: OpenYanxi/LP3_YUE
## Basic Information
- **Project Name**: LazyYUE
- **Description**: No description available
- **Primary Language**: Unknown
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2016-08-11
- **Last Updated**: 2020-12-19
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# LazyYUE (LAZYPHP 3 - MOD修改版简介)
基于LP 3 基础上修改
主要改动:
* 调整目录结构,更加简洁,控制器等统一到app目录下
* 增加了pathinfo 信息处理,可以用 /main/index/id/1 方便获取信息,可选择关闭
* 数据库改为 mysqli驱动和PDO驱动
* 增加伪静态路由
Apache规则
<html>
<body>
<div id="hd" ><?php @include_once( dirname(__FILE__) ) . DS . 'header.tpl.html'; ?></div>
<div id="bd">
<div id="side">
<?php
include( AROOT . 'view' . DS . 'layout' . DS . g('layout') . DS . 'side' . DS . g('c') . DS . g('a') . '.tpl.html' );
?>
</div>
<div id="main">
<?php
include( AROOT . 'view' . DS . 'layout' . DS . g('layout') . DS . 'main' . DS . g('c') . DS . g('a') . '.tpl.html' );
?>
</div>
</div>
</div>
<div id="ft"><?php @include_once( dirname(__FILE__) ) . DS . 'footer.tpl.html'; ?></div>
</body>
</html>
当一个sharp满足不了需求时,我们可以再创建sharpB.tpl.html。styleB可以选择性的共享sharpA的header和footer,也可以载入自己特定的header。我们把sharpA,sharpB…等通用模板放到一个目录下,叫做一个Layout。
目前Layout按照访问方式分为Web,Ajax,Mobile和Rest四种。当你为你的游戏机或者电视机创建一组特定风格的sharp模板时,你可以创建一个名叫TV或者PFP的Layout目录。
切换Sharp和Layout非常简单,只需要修改Render函数中第二和第三个参数就可以了。在没有指定的情况下,LP3会启用Layout下的default sharp模板,同时还会根据请求的方式,自动加载Web,Mobile或者Ajax Layout。
再回过头来说MVC,我们已经了解了C和V在LP的使用。而M就是根据请求参数,从数据库或者其他地方取得数据的过程。在LP3之前,数据是直接在Controller中查询数据库取得的。
```php
function show()
{
$uid = intval($_REQUEST['uid']);
if( $uid < 1 ) return info_page(‘错误的uid’);
$data['user'] = get_line( “SELECT * FROM `user` WHERE `uid` = ‘” . $uid . “‘ LIMIT 1″ );
render( $data );
}
```
这种方式将SQL散落在各个Action中,不利于重用和修改。所以在LP3中,我们采用专门的model文件来放置Controller中用到的数据操作函数。还是用上边的例子,我们假设这是一个名为User的Controller的Show Action。那么在LP3中我们推荐的做法如下:
首先在 AROOT/model目录下创建一个名为user.function.php的文件。
然后在文件中写入获取用户信息的函数:
```php
function get_user_info_by_id( $uid )
{
return get_line( “SELECT `name` ,`email` , `bod` FROM `user` WHERE `uid` = ” . intval($uid) . ” LIMIT 1 ” )
}
```
user.function.php将在请求参数包含?c=user 时自动加载。所以我们可以把show改为下边的样子:
```php
function show()
{
$uid = intval($_REQUEST['uid']);
if( $uid < 1 ) return info_page(‘错误的uid’);
$data['user'] = get_user_info_by_id( $uid );
render( $data );
}
```
这样在其他的Action,比如User/settings 中,我们可以通过get_user_info_by_id 函数重用代码。通过函数封装重复SQL还有一个好处是方便对SQL进行统一处理,加手工Cache就是一个经常能遇到的需求。
## 常用函数
LP3中的函数主要有3类,迅捷函数,功能函数和数据库函数,一共20个左右。
### 迅捷函数
迅捷函数是一系列的函数缩写:
function c( $str ) // 读取配置文件中$str为key的对应的value function v( $str ) // 取得 $_REQUEST[$str] 的数据,不存在不会报warning function z( $str ) // strip_tags function g( $str ) // 取得 $GLOBALS[$str] 的数据 function t( $str ) // trim function u( $str ) // urlencode### 功能性函数
function render( $data = NULL , $layout = NULL , $style = ‘default’ ) // Layout function info_page( $info ) // 系统提示信息 function ajax_echo( $info ) // 输出提示信息,包含永不过期的header function uses( $file ); // 载入lib目录下的文件### 数据库函数
function s( $str , $db = NULL ) // mysql_real_escape_string function prepare( $sql , $array ) // 将数组中的变量顺序替换SQL中的? function db() // 使用config目录下的数据库设置,创建并返回数据库链接 function get_data( $sql , $db = NULL ) // 以二维数组的方式返回$sql对应的结果 function get_line( $sql , $db = NULL ) // 以一维数组的方式返回$sql对应的单行结果 function get_var( $sql , $db = NULL ) // 以变量的方式返回一个数值 function last_id( $db = NULL ) // last id function run_sql( $sql , $db = NULL ) // 运行sql,不返回结果集 function db_error() // 数据库错误信息 function db_errno() // 数据库错误编号 function close_db( $db ) // 显式关闭数据库链接### 特别说明 其中要详细说明的有两个: #### C($KEY)和配置文件 LP将应用配置信息保存在AROOT/config/app.config.php下,使用$GLOBALS['config']超全局变量以数组形式保存。使用c($key)的方式,可以在MVC各个地方获取。 #### PREPARE()函数 这个函数是LP3新引入的,主要是希望减少SQL注入的问题。使用方式如下:
echo $sql = prepare( “SELECT * FROM `user` WHERE `name` = ?s AND `uid` = ?i AND `level` = ?s LIMIT 1″ , array( “Easy’” , ‘-1′, ’9.56′ ) );输出结果为:
SELECT * FROM `user` WHERE `name` = ‘Easy\” AND `uid` = ‘-1′ AND `level` = ’9.56′ LIMIT 1使用prepare函数时要注意:SQL必须使用双引号,【?i】表示整数,【?s】表示整数以外的其他值。prepare会无例外的mysql_real_escape_string,然后在两边加上单引号。 ## CSS,JAVASCRIPT和AJAX LP3采用BootStrap这个流行的前端框架,[你可以从这里看到它的详细介绍](http://twitter.github.com/bootstrap/)。 JavaScript库上,LP3开始换为JQuery。[这里是JQuery API的参考手册](http://api.jquery.com/)。 为了方便不熟悉的同学也能使用好Ajax,LP3自己实现了Ajax传输数据的JS函数。这些函数都放在AROOT/static/script/app.js中。 ```javascript $(‘#标签ID’).load(‘URL’); // 是由JQuery自身实现的,可以方便的无刷新载入页面。 send_form_in( ‘FROMID’ ); // 将form表单中的数据通过Ajax提交(file类型除外),并将服务器返回的HTML显示在Form表单顶部 send_form_pop(‘FROMID’); // 将form表单中的数据通过Ajax提交(file类型除外),并将服务器返回的HTML显示在浮动图层中 ``` 好了,这里就是关于LP3 的一切了,希望LP3能让你更快的完成工作。