ThinkPHP

ThinkPHP 3.0 + Rbac 应用示例

房东的猫 提交于 2019-12-05 03:58:41
此为Rbac在ThinkPHP中应用的实例,用到了ThinkPHP的Rbac扩展,样式比较难看,大家将就的看。此例子旨在学习交流使用,勿用于实际项目中。 Rbac简单说来就是基于“角色”的权限控制,所有用户都属于某一用户组,之后给用户组授权,则组内成员都有相应权限。而ThinkPHP的Rbac的核心,即为在每个操作前都进行权限验证操作,用_initialize方法实现。而权限位则在登录时写到session中,如果对权限的实时性要求非常高,也可以设置每一次验证都到数据库里查。 程序源码: http://vdisk.weibo.com/s/fOMnN 相关配置项: 'USER_AUTH_ON' => true,//开启验证 'USER_AUTH_TYPE' => 1,//验证类型 'USER_AUTH_KEY' => 'uid', // REQUIRE_AUTH_MODULE 需要认证模块,不设置即为除了NOT_AUTH_MODULE中的模块外全部验证 'NOT_AUTH_MODULE' => 'Public', 'USER_AUTH_GATEWAY' => '/Public/login', //认证网关 // RBAC_DB_DSN 数据库连接DSN,默认使用配置文件 'RBAC_ROLE_TABLE' => 'think_role', //角色表名称 'RBAC_USER

ThinkPHP中类的构造函数_construct()与_initialize()的区别详解

依然范特西╮ 提交于 2019-12-05 03:58:31
1当THINKPHP的父类有构造函数而子类没有时,THINKPHP不会去执行子类的_initialize(); 2当THINKPHP的父类子类均有构造函数时,要调用父类的构造函数必须使用parent::__construct()-----------------_initialize()同理; 3当THINKPHP的子类同时存在__construct构造函数和_initialize()方法,只会执行子类的__construct构造函数(这个本人亲测,上述代码没有)。 https://www.jb51.net/article/108290.htm 来源: oschina 链接: https://my.oschina.net/u/3766399/blog/3022562

thinkphp5.1学习过程十一 ——模板继承

谁说胖子不能爱 提交于 2019-12-05 03:54:30
<?php namespace app\index\controller; use think\Controller; class Demo8 extends Controller { public function test1() { // return $this->view->fetch(); } //模板继承 public function test2() { // return $this->view->fetch(); } } index\view\test2.html {extend name="public\base"} {block name="body"} {__block__} //这部分是引用模板中的内容 <h2>我是新内容</h2> {/block} index\view\public\header1.html <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <h2 style="color: red;">我是继承模板头部</h2> index\view\public\footer.html <h2 style="color: green;">我是继承模板底部</h2> </body> </html>

thinkphp5.1学习过程十——模板布局

限于喜欢 提交于 2019-12-05 03:11:24
<?php namespace app\index\controller; use think\Controller; class Demo8 extends Controller { public function test1() { // return $this->view->fetch(); } } view/demo8/test1.html <h2>我是网站的主体部分布局</h2> view/head.html <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <h2 style="color: red;">我是网站的头部</h2> view/footer.html <h2 style="color: green;">我是网站的底部</h2> </body> </html> view/layout.html {include file="head"} {__CONTENT__} {include file="footer"} 在template.php配置文件中增加 //开启全局模板布局 'layout_on'=>true, //全局模板布局文件名 'layout_name'=>'layout', 开启全局模板布局

基于ThinkPHP3.1.2框架开发的WBlog博客程序

空扰寡人 提交于 2019-12-05 02:17:15
WBlog 是一套使用ThinkPHP框架开发,基于PHP+MYSQL的开源、简洁、高效的博客程序。 WBlog 的功能及模块 1、文章功能,让你能够发布图文并茂的文章,同时也可以单纯发布相册来展览图片。已有文章(图片)、博客、单页和下载模型,在此基础上可扩展更多模块 2、博客:发布简短的片言只语 3、单页:单页功能让你可以自由创建一些分散的独立的页面,同时可以上传附件。 4、下载:让你可以发布附件下载文章。 5、用户权限管理机制:强大的RBAC用户权限管理机制,让你可以对其它用户进行分组配置权限。 6、MVC体系设计,简单易懂的模板引擎,方便模板制作及数据调用 7、文章评论、留言、互动 8、支持无限级栏目分类及分类模型绑定机制 9、支持SEO伪静态,更友好于搜索引擎 10、图片文件的批量上传,并且可以为图片设置水印。 11、数据库备份与还原 12、在线编辑模板,让你可以轻松对页面进行修改。 13、rss订阅功能 下载及演示地址: http://www.w3note.com/wblog 来源: oschina 链接: https://my.oschina.net/u/257940/blog/114368

thinkphp5.1学习过程八——模型

自古美人都是妖i 提交于 2019-12-05 00:53:25
<?php namespace app\index\controller; use app\index\model\Blog; //模型是和一张数据表绑定的 class Demo6 { public function get() { //dump(Blog::get(3)); //用查询构造器创建更加复杂的查询 $res=Blog::field('id,name,title') ->where('id',1) ->find(); dump($res); //Db::table('student')===Blog:: } public function all() { // dump(Blog::all([1,2,3])); $res=Blog::field('id,name,title') ->where('id','in','1,2,3,4') ->select(); dump($res); } } <?php namespace app\index\model; use think\Model; class Blog extends Model { } 来源: https://my.oschina.net/u/4249182/blog/3131507

thinkphp5.1学习过程六——连接数据库

两盒软妹~` 提交于 2019-12-04 23:48:24
<?php namespace app\index\controller; use think\Db; /** * Class Demo4 * @package app\index\controller * 连接数据库 * 1.全局配置:config/databass.php * 2.动态配置:think\db\query.php中有一个方法connect() * 3.DSN连接:数据库类型://用户名:密码@数据库地址:端口号/数据库的名称#字符集 */ class Demo4 { //全局配置:config/database.php public function conn1() { return Db::table('blog') ->where('id', 1) ->value('content'); } //动态配置 public function conn2() { return Db::connect([ 'type'=>'mysql', 'hostname'=>'127.0.0.1', 'database'=>'demo', 'username'=>'root', 'password'=>'', ]) ->table('blog') ->where('id',1) ->value('name'); } //DSN连接 public function conn3()

thinkphp5.1学习过程五——request

人盡茶涼 提交于 2019-12-04 23:40:45
<?php namespace app\index\controller; //use \think\facade\Request; use \think\Request; /** * Class Demo3 * @package app\index\controller * 正常情况下,控制器不依赖于父类Controller.php * 推荐继承父类,可以很方便的使用在父类中封装好的一些方法和属性 * Controller.php没有静态代理 * 控制器中的输出,字符串全部用return返回,不要用echo * 如果输出的是复杂类型,我们可以用dump()函数 * 默认输出的格式为html,可以指定为其它格式:json */ class Demo3 extends \think\Controller { public function test() { //return 'www.php.cn'; //dump(Request::get());//静态代理 //dump((new Request())->get());//正常使用 //dump($request->get());//依赖注入 return json_encode($this->request->get()); } } 来源: https://my.oschina.net/u/4249182/blog

thinkphp5.1学习过程五——静态代理

给你一囗甜甜゛ 提交于 2019-12-04 23:38:52
<?php namespace app\index\controller; use app\index\facade\Test; class Demo2 { public function index($name='ThinkPHP') { //$test=new \app\index\common\Test(); //return $test->hello($name); /** *如果想静态调用一个动态方法,需要给当前的类绑定一个静态代理的类 *如果没有在静态代理类中显示指定要绑定的类名,就需要动态显示绑定一下 *\think\Facade::bind() */ \think\Facade::bind('app\index\facade\Test','app\index\common\Test'); return Test::hello('peer'); } } <?php namespace app\index\common; class Test { public function hello($name){ return 'hello '.$name; } } <?php namespace app\index\facade; class Test extends \think\Facade { /* protected static function

thinkphp5.1学习过程四——trait

為{幸葍}努か 提交于 2019-12-04 23:36:01
<?php /** *trait实现了代码的复用 *并且突破了单继承的限制 *trait是类不是类,不能实例化 */ trait Demo1 { public function hello1() { return __METHOD__; } } trait Demo2 { public function hello2() { return __METHOD__; } } class Demo { use Demo1,Demo2; public function hello() { return __METHOD__; } public function test1() { return $this->hell1(); } public function test2() { return $this->hell2(); } } $obj=new Demo(); echo $obj->hello(); echo "<hr>"; echo $obj->hello1(); echo "<hr>"; echo $obj->hello2(); trait类的引用,其实就是把trait类中的代码复制到类中使用 trait优先级的问题 1、当前类中的方法与trait类,父类中的方法重名了,怎么办? 2、trait类的优先级是高于同名父类 3、当多个triat类中有同名的方法,怎么办?