Code Monkey home page Code Monkey logo

windphp's Introduction

#框架说明文档:

###一、说明 windphp是一个轻量级的,高效的,安全的,组件化的php框架,它具有以下特性: (0)支持php7 (1)mvc模式,模型,视图,控制器分离 (2)分层设计,用户请求==》控制器==》service服务层==》dao数据访问层 , 控制器获取到数据后==》视图 (3)使用命名空间特性,框架可以自动加载组件,无需到处include (4)支持url rewrite,有利于seo (5)项目目录自动创建,减少手动创建目录文件烦恼,只需第一次访问加载框架即可自动创建 (6)支持多个数据库分别操作,多个缓存实例分别操作 (7)内置模板解析引擎,可以使用原生php语法也支持模板分离 (8)支持swoole的http,tcp,webSocket服务创建,同时可以方便使用windphp提供的框架服务 (9)debug,exception,日志,翻页,http请求等常用开发组件支持 (10)简单方便的魔法操作,使用该框架,你会发现各种操作真的很简单 (11)安全,对各种输入进行了处理,目录安全隔离等

###二、创建web应用

1、虚拟主机环境
   (1)下载Windphp,放到虚拟主机web目录
   (2)在web目录建立index.php,内容如下:
 	<?php
		use Windphp\Windphp;
		$root_path = __DIR__ . DIRECTORY_SEPARATOR;
		require  $root_path.'Windphp/Windphp.php';
		Windphp::createWebApplication($root_path);
?>
   (3)访问index.php ,框架会在web目录下生成项目所需的目录
   (4)这种方式就是框架和应用文件都放在了web目录,用户可以请求到web里面的文件,特别需要注意的是这种模式下线上环境不要
		开启sql日志存储,防止黑客请求利用,或者通过服务器配置禁止访问日志目录
   
   
2、服务器环境(云,虚拟主机,本机等)
   (1)下载Windphp,放到虚拟主机web目录
   (2)参考demo的helloWorld,把域名绑定到webroot目录
   (3)访问index.php ,框架会在web目录下生成项目所需的目录
   (4)这样做的好处是,用户只能访问webroot目录的文件,不能访问框架和其应用文件,提高安全性,其实就是做安全隔离
   
3、应用目录说明
  (1)components 第三方组件目录,例如短信通知,支付,七牛文件上传等
  (2)config 文件配置目录
  (3)controllers 控制器目录
  (4)daos 数据访问层目录
  (5)service 服务层目录
  (6)runtimes 程序运行时产生的数据,例如日志,模板缓存,文件缓存等
  (7)views 模板文件目录
   
2、url说明:
	(1)http://www.test.com/?index-index-name-lijinhuan.html
	(2)http://www.test.com/?controller=index&action=index&name=lijinhuan
	上面的请求是一样的,表示请求Index控制器下的Index方法,并且带上参数name
	控制器对应的文件是/controllers/IndexController.php

###三、创建控制台命令行执行应用 1、查看demo的cliApp 2、在命令行下执行,如/usr/local/php cli.php CliIndex Index lijinhuan 3、表示访问CliIndex控制器,Index方法,参数lijinhuan 4、控制器对应的文件是/controllers/CliIndexController.php,注意控制器继承的是CliController控制器, 5、具体可以参考demo/test/controllers/CliIndexController.php

###四、创建swoole应用 1、swoole的并发能力很强,具体可以到其官网查看。

2、查看demo的swoole

3、如果创建的是http服务,执行:/usr/local/php swoole.php  Http
   默认使用的端口是9501,可以在配置文件里面修改,然后访问http://www.test.com:9501/?controller=index&action=index&name=lijinhuan,
   表示访问SwooleHttpIndexController控制器,Index方法,参数name值为lijinhuan,
   控制器对应的文件是/controllers/SwooleHttpIndexController.php,注意控制器继承的是SwooleController控制器,
   具体可以参考demo/test/controllers/SwooleHttpIndexController.php

4、如果创建的是websocket服务,执行:/usr/local/php swoole.php  WebSocket
   默认使用的端口是9502,可以在配置文件里面修改,然后使用html5的websocket测试请求连接http://www.test.com:9502,
   默认表示访问SwooleWebSocketIndexController控制器,Index方法,WebSocket请求参数和其他不一一样,建立连接后,
   使用json格式,发送{"controller","test"},表示访问test控制器
   控制器对应的文件是/controllers/SwooleWebSocketIndexController.php,注意控制器继承的是SwooleController控制器,
   具体可以参考demo/test/controllers/SwooleWebSocketIndexController.php
   
5、如果创建的是tcp服务,执行:/usr/local/php swoole.php  Tcp
   默认使用的端口是9503,可以在配置文件里面修改,然后使用telnet  测试连接服务器 9502端口,
   默认表示访问SwooleTcpIndexController控制器,Index方法,tpc请求参数和其他不一致,使用json格式,发送{"controller","test"},表示访问test控制器
   控制器对应的文件是/controllers/SwooleTcpIndexController.php,注意控制器继承的是SwooleController控制器,
   具体可以参考demo/test/controllers/SwooleTcpIndexController.php

###五、控制器说明 1、在controllers下,如 IndexController.class.php 表示Index控制器。 同理,TestController.class.php 表示Test控制器。

2、IndexController.class.php 定义方法 actionIndex() 表示Index方法。
   同理,actionTest 表示Test方法。
 	<?php
	namespace Controllers;
	use Windphp\Controller\CController;
	class IndexController extends CController {
			public function actionIndex(){
				echo '<h2>windphp framework hello world!</h2>';
			}
	}
	?>
3、注意不同应用例如swoole和cli继承的控制器不一样,这里以php-fpm+nginx为例  
4、参考demo/test

###六、服务层 1、在控制器我们可以这样子调用服务,非常方便; $this->userService->getUserInfo($uid); 表示访问services目录下的userService.php的userService类,所有服务类需要继承IService

2、参考demo/test

###七、dao层 1、在服务层中我们可以这样子调用dao: $this->userDao->fetchOne(array('where'=>array('uid'=>1))); 表示获取uid为1的用户数据 表示访问daos目录下的userDao.php的userDao类,所有dao类需要继承IDao类

2、userDao里面的初始化
<?php
/**
 * Copyright (C) windphp framework
 * @todo ShopDao
 */
namespace Daos;


use Windphp\Dao\IDao;
class UserDao extends IDao {
		
	
	public function init(){
		$this->database = 'user';
		$this->table = 'user';
	}
	
		
}
?>
3、其实$this->database = 'user';表示访问user这个数据库
4、其实$this->table = 'user';表示访问user数据库的user表
5、其中数据库配置,在配置文件内如下
	    'db' => array(
			'user' => array(
				'type' => 'mysqli',
 				'host'	=> 'localhost:3306',
 				'username'	=> 'root',
 				'password'	=> '123456',
 				'database'	=> 'user',
 				'_charset'	=> 'utf8',
			)
            ),
  那么user就取自这里的'user' => array('type'=>...)的user属性

###八、dao数据库操作 #####1、查询: (1)普通查询

        $this->userDao->fetchAll(array(
				'where' => array('uid'=>2),
				'select' => 'id',
				'order' => 'sort desc',
				'limit' => '1,30',
		 ));
	 $this->userDao->fetchOne(array('uid'=>2));
	 说明:fetchOne表示只获取一条,fetchAll表示获取所有结果集
	 
(2)in 条件查询,'where' => array('uid'=>array('in'=>array(3,4))) 查找uid为3,4的用户

(3)<  条件查询,'where' => array('uid'=>array('lte'=>3))
     查找uid小于等于3的用户,其中lte表示小于等于,gte大于等于,lt小于,gt大于,neq不等于
	

(4)like 条件查询,'where' => array('name'=>array('like'=>'a%')) 查询a开头的用户

#####2、删除:

	$this->userDao->delete(array('where' => array('uid'=>2),'limit'=>1)); 

#####3、修改: (1)普通更新

		$this->userDao->update(array(
				'where' => array('uid'=>2),
				'set' => array('name'=>'fourm2')
		 ));
(2)统计更新
		$this->userDao->update(array(
				'where' => array('fid'=>2),
				'set' => array('num'=>array('count'=>'+5'),'updatetime'=>12346,'dig'=>array('count'=>'-1'))
		 ));
	前缀+表示增加,-表示减去

#####4、增加: (1)添加主要使用insert

		$this->userDao->insert(array(
				'set' => array('name'=>'fourm2')
		 ));
(2)replace 同上$this->userDao->replace()

#####5、统计: 其实后台翻页经常需要统计条数,我们可以这样子来获取统计 $where = array('uid'=>1); $this->userDao->count($where); 表示获取uid为1的用户数量,返回一个数字

#####5、其他说明 (1)fetchOne,fetchAll 除了支持数组形式输入之外,还支持sql操作, 如 $this->userDao->fetchAll($sql)

(2)$this->userDao->query($sql) 执行查询操作

###五、缓存操作 (1)confing/conf.inc.php 配置

		'memd'=> array(
        			'user' => array(
        					'servers'=>array(
        							'host'=>'127.0.0.1',
        							'port'=>11211,
        							'height'=>75,
        							'auth' => array(
        									//'user' => 'test',
        									//'password'=>'test',
        							),
        					)
        			),
        	 		'other' => array(
        	 				'servers'=>array(
        	 						'host'=>'127.0.0.1',
        	 						'port'=>11213,
        	 						'height'=>75,
        	 						'auth' => array(
        	 								//'user' => 'test',
        	 								//'password'=>'test',
        	 						),
        	 				)
        	 		),
        	 ),	
        	 'redis' => array(
        	 		'user' => array(
        	 				'servers'=>array(
        	 						'host'=>'127.0.0.1',
        	 						'port'=>6379,
        	 						'timeout'=>5,
        	 						'auth' => array(
        	 								//'user' => 'test',
        	 								//'password'=>'test',
        	 						),
        	 				)
        	 		),
        	 		'other' => array(
        	 				'servers'=>array(
        	 						'host'=>'127.0.0.1',
        	 						'port'=>6381,
        	 						'timeout'=>5,
        	 						'auth' => array(
        	 								//'user' => 'test',
        	 								//'password'=>'test',
        	 						),
        	 				)
        	 		),
        	 ),
(2)在控制或者模型中使用缓存实例
	$this->userMemcache->get('name'); 获取key为name的缓存。‘userMemcache’,
	memcache表示使用memcache缓存,user表示使用user这个memcache实例,同理,使用redis
	$this->userRedis->get('name');
	默认缓存:$this->cache->get('name'),cache_type配置哪种类型,就使用哪种,redis会默认使用第一个实例,memcache支持分布式
	

(3)缓存操作
	1、添加缓存数据,$this->cache->set('name','lijinhuan',3600);
	2、获取缓存数据,$this->cache->get('name');
	3、更新缓存数据,$this->cache->update('name','lijinhuan',3600);
	4、删除缓存数据,$this->cache->delete('name');
	5、其实redis支持更多的数据操作,具体可以看Windphp/Cache/RedisCache.php源码

###五、视图操作 1、在Index控制器的Index的方法中添加代码 $this->tpl->show() ; 表示加载views下的default主题(在conf.inc.php中配置)下的Index目录的tpl.Index.php的文件

2、把控制器获取到的数据传到模板中使用,如 $this->tpl->assign('a',$a);
   表示把$a表示渲染到模板中,在模板中可以{$a}这样子调用
 
3、支持原生模式,include $this->tpl->getFile();
   则表示直接加载文件到控制器,在文件中可以 <?php echo $a;?>这样子使用,
   而不需要做$this->tpl->assign('a',$a);渲染。

4、模板语法:在模板文件中,如tpl.Index.php,如果我们是通过 $this->tpl->show() ;这种方式进渲染的,
   那么使用控制器传过来的变量,就需要使用到模板语法进行调用了。
   (1)默认使用{}大括号来进行标明是模板语句,如{$a}表示输出$a变量。这个符号可以在
        confing/conf.inc.php文件中进行配置,添加'tpl_tag' => array('left'=>"\<\!\-\-\{",'right'=>"\}\-\-\>"),
        则表示使用<!--{}-->来标明模板语句,<!--{$a}--> 表示输出$a变量,推荐使用这种方式(也是默认使用的),避免与javascript的冲突
      
   (2)遍历数组
   	<!--{loop $user $k $v}-->
   		<li>第<!--{$k}-->个用户,名字叫<!--{$v['name']}--></li>
   	<!--{/loop}-->
   	
   (3)判断语句
   	<!--{if $a==1}-->
   	    我等于1
   	<!--{elseif $a==2}-->
   	    我等于2
   	<!--{else}-->
   	    我什么都不是
   	<!--{if}-->
	
  (4)加载模板文件
  	<!--{template 'Header','Common'}-->
  	表示加载 /views/default/Common/tpl.Header.php 文件
  	
  (5)执行php代码
  	<!--{php echo $a;}-->
  	
  (6)执行一个函数
  	<!--{func phpinfo()}-->
  	
  (7)输出一个函数的返回值
  	<!--{funcecho date('Y-m-d')}-->
  	
  (8)循环
  	<!--{for $i=0;$i<10;$i++}-->
  		<!--{$i}-->
	<!--{/for}-->

  (9)读取配置文件中的参数
  	<!--{$system_conf['app_url']}-->

###六、配置文件调用 1、在控制或者模型中可以使用Conf::getSystem('autokey') 这样子调用参数 2、又或者Conf::$systemConfig['autokey']这样子调用

###七、第三方组件 1、自己写的或者第三方的扩展组件,需要放在components目录下,命名格式为MyComponet.php,My是扩展组件的类名称 继承 IComponent 类 如

namespace Components;


use Windphp\Component\IComponent;
class MyComponet extends IComponent  {
		
		public function test(){
			echo 'aa';
		}
		
}

windphp's People

Contributors

lijinhuan avatar cyberty avatar

Stargazers

纯七 avatar  avatar  avatar  avatar zzj avatar acoldog avatar Keventseng avatar  avatar baymax avatar  avatar

Watchers

 avatar zzj avatar baymax avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.