面包屑思维模型实战模型错题集结构手册流程手册自我检测专题模块
-
微信小程序前端微信小程序前端易错点收集查看
-
css/less/sass样式控制在开发过程中的一些样式控制bug规避查看
-
tp5开发小程序tp5开发小程序时错误积累查看
-
PHP错题集PHP在实际开发过程中遇到的问题查看
-
MySql数据库使用MySql在实际开发中遇到的错误总结查看
-
TP5错题集积累tp5框架在实际开发过程中遇到的问题查看
-
uni-app爬坑主要用于uni-app项目中遇到的一些问题查看
-
Vue.js易错收集vue.js项目常见错误收集整理查看
-
uni-app开发微信小程序uni-app开发微信小程序的一些爬坑积累查看
-
LinuxLinux在部署、开发、运维时遇见的错误积累查看
-
安全设计常见安全设计查看
-
Redis项目中使用redis的相关错误积累查看
-
前端特效前端特效相关错题集查看
最新博文
-
composer的第三方类库找不到,如何解?
thinkphp
阅读更多风口下的猪2019-06-09【thinkphp】
-
pathinfo地址参数不能通过get方法获取时,如何操作
thinkphp我们在实际开发项目中,经常会通过url的get传参方式,来实现一些功能。
比如从数据表中读出来的文章列表,在每个文章标题后做“操作功能”部署,即“删除、修改等”。使每个文章标题后的操作执行的对象是该文章。则通过模板循环标签将数据输出到模板中,在操作处加上url并传上每个文章自己的pid或者uid等内容。当在页面点击这些操作时,便通过url的get传参方式,将这些具有唯一性的数据传出,只要捕获下来便可在对应控制器的方法中实现删除、修改等功能。
但有时项目的url是pathinfo地址,就不支持get方法获取,此时只能通过param。
例如input('get.')不能获取到请求信息,则只能使用input('param.')
阅读更多风口下的猪2019-06-09【thinkphp】
-
模板循环标签
thinkphp一.{volist}{/volist}标签遍历
【offset 开始遍历的地方】
【length 遍历的长度,循环的次数】
【mod 与当前数取余】
【empty 为空时显示】
【key 循环的次数】
<h1>这是view/index/index.html</h1>
{volist name="list" id="vo" offset="0" length="3" mod="2" empty="这里没有数据" key ='s'}
<p>{$mod}:{$s}:{$vo.name}</p>
{/volist}
二.{foreach}{/foreach}标签遍历
【第一种方式】
{foreach $list as $vo}
<p>{$vo.name}:{$vo.email}</p>
{/foreach}
【第二种方式】
{foreach name="list" as item="vo"}
<p>{$key} : {$vo.name} : {$vo.email}</p> 【$key 数组的下标】
{/foreach}
三.{for}{/for}标签循环
<body>
{for start="1" end="10" step="2" name="i"}
<p>{$i}</p>
{/for}
</body>
【start 相当于for循环中的$i=1】
【end 相当于for循环中的$i<10】
【strp 步进值】
【name 默认为i,对应$i】
阅读更多风口下的猪2019-06-09【thinkphp】
-
{for}循环输出模板变量
thinkphp用法:
{for start="开始值" end="结束值" comparison="" step="步进值" name="循环变量名" }
{/for}
开始值、结束值、步进值和循环变量都可以支持变量,开始值和结束值是必须,其他是可选。comparison 的默认值是lt,name的默认值是i,步进值的默认值是1,举例如下:
{for start="1" end="100"}
{$i}
{/for}
解析后的代码是
for ($i=1;$i<100;$i+=1){
echo $i;
}
阅读更多风口下的猪2019-06-09【thinkphp】
-
{volist}循环
thinkphp{volist}是tp5内置的模板标签,用以循环向模板输出变量
一.基本用法
其语法主要是
{volist name="list" id="vo" key="k"}
{$vo.cateuser}
{/volist}
即最简单的表示中一般包含 name、id、key这几个属性
name: 需要循环输出的模板变量;
id: 循环中的键名,用以存放整个模板变量的对象。如$vo。在使用中要和name属性值不同;
key: 循环的次数。定义了key="k",则可以在模板中使用$k去做输出数组的索引。如果没有定义key属性及其值,则可以使用$key去做数组的索引。
二.扩展用法
在一些实际项目中可以使用volist的其他几个属性
offset: 开始遍历的地方;
length: 遍历的长度,循环的次数;
mod: 与当前数取余
empty: 为空时显示
1.从查询结果中取部分数据 【offset+length】
例如:支持输出查询结果中的部分数据,例如输出其中的第5~15条记录
{volist name="list" id="vo" offset="5" length='10'}
{$vo.name}
{/volist}
2.控制输出奇数行或者偶数行数据【mod+value】
例如:输出偶数记录
{volist name="list" id="vo" mod="2" }
{eq name="mod" value="1"}{$vo.name}{/eq}
{/volist}
注意:
(1)mod确实是取模。
(2)value的值,是余数。关系式: 当前数据的序列号 / mod=value
(3)但是,值得注意的是,数据的volist输出时,第一个数据是0,而不是1。
另外,1/2的余数是1,0/6的余数是0,2/5的余数是2。
3.为空的时候输出提示【empty】
{volist name="list" id="vo" empty="暂时没有数据" }
{$vo.id}|{$vo.name}
{/volist}
empty属性不支持直接传入html语法,但可以支持变量输出,例如:
$this->assign('empty','没有数据');
$this->assign('list',$list);
然后在模板中使用:
{volist name="list" id="vo" empty="$empty" }
{$vo.id}|{$vo.name}
{/volist}
阅读更多风口下的猪2019-06-09【thinkphp】
-
display()和fetch()和assign()的区别
thinkphp首先,我们来看看以上三个函数的定义:
$this->display():渲染内容输出(强调输出内容);
$this->fetch():渲染模板输出(强调输出模板,且含模板定位功能);
$this->assgin():模板变量输出(强调将数据输出到模板对应的数据钩子上)。
一.display()
display()
,是直接输出传递的内容:(1)如果传递参数, 比如
"hello"
,那么页面会直接输出字符串"hello"
class Index extends BaseController{
public function index()
{
return $this->display("hello");
}}</block
quote>
(2)如果没传参数,display()
页面会渲染出Layout,但不会有任何内容。class Index extends BaseController{
public function index()
{
return $this->display();
}}
二.fetch()
fetch()
是用模板文件来输出:(1)如果传参数,比如我们用“hello”则会使用
hello.html
来渲染public function index()
{
return $this->fetch('hello');
}
(2)如果
fetch()
不传参数,程序会自动寻找同方法名的模板渲染输出。public function index()
{
return $this->fetch();
}}
三.assgin()
assgin()用以向模板输出变量
语法:assgin(obja,$objb)
assgin输出的变量被模板调用的方式主要有两种
1.变量直接被模板用花括号标签引用
控制器中:
$field=db('cate')->select();
$this->assign('fd',$field);
模板中:
<div class="col-sm-3">{$fd}</div>
2.变量被tp的一些内置标签调用
控制器中:
$field=db('cate')->select();
$this->assign('fd',$field);
模板中:
{volist name="fd" id="vo" empty="暂时没有数据" }
<divclass="row cateli">
<divclass="col-sm-1">
<span>{$vo['cate_id']}</span>
</div>
<divclass="col-sm-9">
<span>{$vo['cate_name']}</span>
</div>
{/volist}
阅读更多风口下的猪2019-06-09【thinkphp】
-
{foreach}循环输出数据表信息到模板
thinkphp{foreach}在数据表信息输出到模板中经常用到,和{volist}相似
一.语法
其语法如下:
第一种:
{foreach $list as $vo}
{$vo.id}:{$vo.name}
{/foreach}
第二种:
{foreach name="list" item="vo"}
{$vo.id}:{$vo.name}
{/foreach}
name表示数据源
item表示循环变量。
阅读更多风口下的猪2019-06-09【thinkphp】
-
save()时提示报错数据已经存在,不能重复添加
thinkphp
阅读更多风口下的猪2019-06-09【thinkphp】
-
实例化模型报错找不到类
thinkphp
阅读更多风口下的猪2019-06-09【thinkphp】
-
模型初始化
thinkphp模型同样支持初始化,与控制器的初始化不同的是,模型的初始化是重写
Model
的initialize
,具体如下namespace app\index\model; use think\Model; class Index extends Model { //自定义初始化 protected function initialize() { //需要调用`Model`的`initialize`方法 parent::initialize(); //TODO:自定义的初始化 } }
同样也可以使用静态
init
方法,需要注意的是init
只在第一次实例化的时候执行,并且方法内需要注意静态调用的规范,具体如下:namespace app\index\model; use think\Model; class Index extends Model { //自定义初始化 protected static function init() { //TODO:自定义的初始化 } }
阅读更多风口下的猪2019-06-09【thinkphp】
-
__construct()和__initialize()
thinkphp关于thinkphp中的__construct()和_initialize()的理解
网上有很多的说法和用法,自己测试了一下,下面是根据测试结果并结合自己的理解得出的结论,如有不对的地方,欢迎大家纠正!!!
我们先看一下Thinkphp自带的Controlle类的内容(ThinkPHP\Library\Think\Controller.class.php)
看一下构造函数:
/**
* 架构函数 取得模板对象实例
* @access public
*/
public function __construct() {
Hook::listen('action_begin',$this->config);
//实例化视图类
$this->view = Think::instance('Think\View');
//控制器初始化
if(method_exists($this,'_initialize'))
$this->_initialize();
}从Controller类中的构造函数中可以知道,该构造函数会判断对象中是否有_initialize方法,如果有,就执行先_initialize方法,
因此,如果我们在自己定义的控制器中
一.有重写构造函数:
1.在重写的构造中有实现父类的构造函数(parent::construct() )
如果该控制器中有定义_initialize()方法,那么,我们在调用该控制器中的方法时,会先执行_initialize()方法,然后再执行我们需要的方法,看代码:
namespace Home\Controller;
use Think\Controller;
class IndexController extends Controller {public function __construct() {
parent::__construct();
self::b();
echo '我是构造
';
}
public function _initialize() {echo '我先来
';// parent::_initialize();
}
public function index(){self::b();
echo '这是index';
}public function b() {
echo 'bbbb
';
}
}/*
当执行index方法时,打印结果:
我先来
bbbb
我是构造
bbbb
这是index
*/2.在重写的构造中没有实现父类的构造函数
执行方法时,定义的_initialize()方法则没有作用(不会在执行方法时,先执行_initialize方法),看代码:
namespace Home\Controller;
use Think\Controller;
class IndexController extends Controller {public function __construct() {
// parent::__construct();
self::b();
echo '我是构造
';
}
public function _initialize() {
echo '我先来
';
// parent::_initialize();
}
public function index(){
self::b();
echo '这是index';
}public function b() {
echo 'bbbb
';
}
}/*
当执行index方法时,打印结果:
bbbb
我是构造
bbbb
这是index
*/注意:这里面的所说的先执行_initialize()方法,是在parent::__construct();前没有任何函数调用,如果你非得在parent::__construct();前来个self::b(),那没得说,肯定是先执行b(),不过一般不这样写,在实现父类的构造函数前一般没有任何输出和配置。
再有,如果是继承,如果父类有构造函数,子类在其构造函数一般先把父类的构造函数先初始化,确保代码的原始性和完整性。
二.没有重写构造函数
这种情况,如果在控制器中有定义_initialize()方法,则当我们调用其他方法时,会先调用_initialize()方法,看代码:
namespace Home\Controller;
use Think\Controller;
class IndexController extends Controller {// public function __construct() {
// // parent::__construct();
// self::b();
// echo '我是构造
';
// }
public function _initialize() {
echo '我先来
';
// parent::_initialize();
}
public function index(){
self::b();
echo '这是index';
}public function b() {
echo 'bbbb
';
}
}/*
当执行index方法时,打印结果:
我先来
bbbb
这是index
*/另外,_initialize()还可以用来继承
namespace Home\Controller;
use Think\Controller;
class BaseController extends Controller {public function __construct() {
parent::__construct();
echo '我是父类
';
}public function _initialize() {
echo '我先来
';
}public function a() {
echo 'aaaa
';
}
}namespace Home\Controller;
use Think\Controller;
class IndexController extends BaseController {public function __construct() {
parent::__construct();
self::b();
echo '我是构造
';
}
public function _initialize() {
parent::_initialize();
echo '我是子类先来
';
}
public function index(){
self::b();
echo '这是index';
}public function b() {
echo 'bbbb
';
}
}/*
当执行index方法时,打印结果:
我先来
我是子类先来
我是父类
bbbb
我是构造
bbbb
这是index
*/注意:如果父类的构造函数中没有parent::construct(),定义的_initialize()也不起作用
那么,同时存在__construct()(该构造函数初始化了父类的构造函数)和_initialize() ,到底先执行哪个呢?
答案是——先执行_initialize()方法,也就是说,在满足条件下,_initialize()函数是在任何方法执行之前,都要执行的,包括构造函数,
当然,如果你在要执行的方法中又调用的另一个或者多个方法,在另外调用那些方法时,_initialize()方法是不会再执行了,它关联的是你首次调用的方法,也就是说,方法里面干什么,它管不着了。
阅读更多风口下的猪2019-06-09【thinkphp】