thinkphp专题提供thinkphp的最新资讯内容,帮你更好的了解thinkphp。
关于支付宝即时收款接口的对接过程,很简单,也有很多人发过,我这里就不在啰嗦了,对接完成后,在线支付成功后的回调,相对来说,是个难点,,我重点分享下我的经验。我在开发二代旅游CMS(http://www.erdaicms.com)的时候,在回调的时候,也花了不少时间。不管是支付宝接口好是微信支付接口,回调都分为跳转回调和异步通知回调,跳转回调是不保险的,加入客人支付完成后马上把支付页面关闭,没跳转,就通知不到你这个订单已经支付了,所以我们要用异步通知回调:$alipay_config['notify_url'] = "".$ss['web_url']."/v.php/Index-alipay_notify_url.html";//首先设置介绍异步回调的地址异步回调的具体处理函数,我这里也贴处理,供参考:/* 支付宝异步通知*/public function alipay_notify_url(){vendor('Alipay.Corefunction');vendor('Alipay.Md5function');vendor('Alipay.Notify');vendor('Alipay.Submit');$info=M('rewrite')->where(array('name'=>'alipay'))->find();$info=json_decode($info['content'],true);;//↓↓↓↓↓↓↓↓↓↓请在这里配置您的基本信息↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓//合作身份者ID,签约账号,以2088开头由16位纯数字组成的字符串,查看地址:https://b.alipay.com/order/pidAndKey.htm$alipay_config['partner'] = $info['alipay_pid'];//收款支付宝账号,以2088开头由16位纯数字组成的字符串,一般情况下收款账号就是签约账号$alipay_config['seller_id'] = $info['alipay_pid'];// MD5密钥,安全检验码,由数字和字母组成的32位字符串,查看地址:https://b.alipay.com/order/pidAndKey.htm$alipay_config['key'] = $info['alipay_key'];$ss=S('config');// 服务器异步通知页面路径 需http://格式的完整路径,不能加?id=123这类自定义参数,必须外网可以正常访问$alipay_config['notify_url'] = "".$ss['web_url']."/v.php/Index-alipay_notify_url.html";// 页面跳转同步通知页面路径 需http://格式的完整路径,不能加?id=123这类自定义参数,必须外网可以正常访问$alipay_config['return_url'] = "".$ss['web_url']."/member.php";//签名方式$alipay_config['sign_type'] = strtoupper('MD5');//字符编码格式 目前支持 gbk 或 utf-8$alipay_config['input_charset']= strtolower('utf-8');//ca证书路径地址,用于curl中ssl校验//请保证cacert.pem文件在当前文件夹目录中$alipay_config['cacert'] = getcwd().'\cacert.pem';//访问模式,根据自己的服务器是否支持ssl访问,若支持请选择https;若不支持请选择http$alipay_config['transport'] = 'http';// 支付类型 ,无需修改$alipay_config['payment_type'] = "1";// 产品类型,无需修改$alipay_config['service'] = "create_direct_pay_by_user";//↑↑↑↑↑↑↑↑↑↑请在这里配置您的基本信息↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑//↓↓↓↓↓↓↓↓↓↓ 请在这里配置防钓鱼信息,如果没开通防钓鱼功能,为空即可 ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓// 防钓鱼时间戳 若要使用请调用类文件submit中的query_timestamp函数$alipay_config['anti_phishing_key'] = "";// 客户端的IP地址 非局域网的外网IP地址,如:221.0.0.1$alipay_config['exter_invoke_ip'] = "";$alipayNotify = new AlipayNotify($alipay_config);$verify_result = $alipayNotify->verifyNotify();if($verify_result) {//验证成功///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////请在这里加上商户的业务逻辑程序代//——请根据您的业务逻辑来编写程序(以下代码仅作参考)——//获取支付宝的通知返回参数,可参考技术文档中服务器异步通知参数列表//商户订单号$out_trade_no = $_POST['out_trade_no'];//支付宝交易号$trade_no = $_POST['trade_no'];//交易状态$trade_status = $_POST['trade_status'];$total_fee=$_POST['total_fee'];//if( $info['alipay_pid']!=$seller_id) return ''; //收款账户不一致$info=M('order')->where(array('no'=>$out_trade_no))->find();if(!$info) return ''; //订单号不存在if($_POST['trade_status'] == 'TRADE_FINISHED') {//判断该笔订单是否在商户网站中已经做过处理//如果没有做过处理,根据订单号(out_trade_no)在商户网站的订单系统中查到该笔订单的详细,并执行商户的业务程序//请务必判断请求时的total_fee、seller_id与通知时获取的total_fee、seller_id为一致的//如果有做过处理,不执行商户的业务程序$data='';$data['status']=2;$data['pay_price']=$total_fee;$data['pay_type']='支付宝';$data['buyer']=$_POST['buyer_email'];$data['trade_no']=$trade_no;$data['pay_time']=time();M('order')->where(array('no'=>$out_trade_no))->save($data);$c=M('smtp_templates')->where(array('id'=>5))->find();if($c['status']==1){$content = str_replace('{title}', $info['goods_name'], $c['content']);$content = str_replace('{id}', $info['goods_id'], $content);$content = str_replace('{price}',$total_fee, $content);$content = str_replace('{time}',date('Y-m-d H:i:s',time()), $content);$c=M('email_note')->where(array('pay_id'=>$out_trade_no))->find();if(!$c){$e='';$e['email']=$info['c_email'];$e['content']=$content;$e['pay_id']=$out_trade_no;M('email_note')->add($e);$m=explode('|',$c['ather']);foreach($m as $mail){if(validate_email($mail)){$e['email']=$mail;M('email_note')->add($e);}}}}//注意://退款日期超过可退款期限后(如三个月可退款),支付宝系统发送该交易状态通知//调试用,写文本函数记录程序运行情况是否正常//logResult("这里写入想要调试的代码变量值,或其他运行的结果记录");}else if ($_POST['trade_status'] == 'TRADE_SUCCESS') {//判断该笔订单是否在商户网站中已经做过处理//如果没有做过处理,根据订单号(out_trade_no)在商户网站的订单系统中查到该笔订单的详细,并执行商户的业务程序//请务必判断请求时的total_fee、seller_id与通知时获取的total_fee、seller_id为一致的//如果有做过处理,不执行商户的业务程序$data='';$data['status']=2;$data['pay_price']=$total_fee;$data['pay_type']='支付宝';$data['buyer']=$_POST['buyer_email'];$data['trade_no']=$trade_no;$data['pay_time']=time();M('order')->where(array('no&
<?phpclass FormModel extends Model {// 自动验证设置/** 一:自动验证自动验证的定义是这样的:array(field,rule,message,condition,type,when,params)field:代表是数据库的字段名;rule:代表是规则;它的值要看type的类型而定;如果是condition 是function(callback),rule是一个函数名condition 是in,rule是一个数组message:代表是消息提示;condition:代表是验证条件它的值:self::MUST_VALIDATE 表示必须验证1self::VALUE_VAILIDATE 表示不为空的时候验证2self::EXISTS_VAILIDATE 表示表单存在的字段验证(默认)0type:代表验证类型它的值:function(callback) 表示验证的是调用一个Model中的函数confirm 表示验证两个字段是否相同in 是否在某个数组范围之内equal 验证是否等于某个值unique 验证某个值是否唯一regex 使用正则表达式(默认)when:代表是是否需要执行验证它的值:self::INSERT_STATUS add操作的时候验证self::UPDATE_STATUS update操作的时候验证self::ALL_STATUS (不用说了吧)params:参数(具体什么我现在还不太清楚)* */protected $_validate = array(array('title','require','标题必须!',1),//必须验证array('email','email','邮箱格式错误!',2),//不为空时验证array('content','require','内容必须'),array('title','','标题已经存在',0,'unique',self::MODEL_INSERT),);// 自动填充设置//array(填充字段,填充内容,填充条件,附加规则)/* 填充条件包括:ADD 新增数据的时候处理(默认方式) self::MODEL_INSERT add操作的时候填充Update 更新数据的时候处理 self::MODEL_UPDATE udate操作的时候填充ALL 所有情况下都进行处理 self::MODEL_BOTH (不用说了)附加规则包括:function 使用函数callback 回调方法field 用其它字段填充string 字符串(默认方式)*/protected $_auto = array(array('status','1',self::MODEL_INSERT),array('create_time','time',self::MODEL_INSERT,'function'),);}?> 
使用thinkphp配置rewire模式的路径访问网站时,直接复制官网的.htaccess文件的代码复制过去123456<IfModule mod_rewrite.c>    RewriteEngine on    RewriteCond %{REQUEST_FILENAME} !-d    RewriteCond %{REQUEST_FILENAME} !-f    RewriteRule ^(.*)$ index.php/$1 [QSA,PT,L]</IfModule>出现No input file specified 页面提示,在apache配置文件httpd-conf捣腾了好一阵子,都没有解决到,忽然想到本地测试用的php运行模式是FastCGI模式,在此模式下以下重写规则不适用的1^(.*)$ index.php/$1 [QSA,PT,L]应该改成1^(.*)$ index.php?s=$1 [QSA,PT,L]1<span "font-size: 14px;">所以.htaccess文件的代码为<br></span>1 <IfModule mod_rewrite.c>2 RewriteEngine on3 RewriteCond %{REQUEST_FILENAME} !-d4 RewriteCond %{REQUEST_FILENAME} !-f5 RewriteRule ^(.*)$ index.php?s=$1 [QSA,PT,L]6 </IfModule>
最近学习thinkphp上瘾,出现success找不到模板问题,查阅各大神解决方案,分享一下针对新手如何解决该问题,如有不对的地方请大神指正1.首先修改自己的config文件,添加如下配置代码://设置跳转页面'TMPL_ACTION_SUCCESS' =>'Public:dispatch_jump','TMPL_ACTION_ERROR' =>'Public:dispatch_jump',注意,如此设置的前提是你需要将你当前模块下的View文件夹下,创建一个public文件夹,并在public文件夹下创建一个dispatch_jump.html的文件2.将ThinkPHP/Tpl/dispatch_jump.tpl文件打开,并将里面的内容复制到第一步创建的dispatch_jump.html文件里3.修改刚刚复制的内容如图几个地方,这里要说明一下的就是我设置的smarty识别标志是{@和@},这里修改成自己设置的左右标志即可
环境:centos7.2+lnmp1.3(nginx+php7.0+mysql5.5)进入服务器配置路径:cd /usr/local/nginx/conf/nginx.conf 修改nginx.conf文件vim nginx.conf,原来的文件内容不变,在最后加上我们需要的对thinkphpurl模式的解析 修改后的nginx.conf文件如下:user www www;worker_processes auto;error_log /home/wwwlogs/nginx_error.log crit;pid /usr/local/nginx/logs/nginx.pid;#Specifies the value for maximum file descriptors that can be opened by this process.worker_rlimit_nofile 51200;events{use epoll;worker_connections 51200;multi_accept on;}http{include mime.types;default_type application/octet-stream;server_names_hash_bucket_size 128;client_header_buffer_size 32k;large_client_header_buffers 4 32k;client_max_body_size 50m;sendfile on;tcp_nopush on;keepalive_timeout 60;tcp_nodelay on;fastcgi_connect_timeout 300;fastcgi_send_timeout 300;fastcgi_read_timeout 300;fastcgi_buffer_size 64k;fastcgi_buffers 4 64k;fastcgi_busy_buffers_size 128k;fastcgi_temp_file_write_size 256k;gzip on;gzip_min_length 1k;gzip_buffers 4 16k;gzip_http_version 1.1;gzip_comp_level 2;gzip_types text/plain application/javascript application/x-javascript text/javascript text/css application/xml application/xml+rss;gzip_vary on;gzip_proxied expired no-cache no-store private auth;gzip_disable "MSIE [1-6].";#limit_conn_zone $binary_remote_addr zone=perip:10m;##If enable limit_conn_zone,add "limit_conn perip 10;" to server section.server_tokens off;access_log off;server{listen 80 default_server;#listen [::]:80 default_server ipv6only=on;server_name www.lnmp.org;index index.html index.htm index.php;root /home/wwwroot/default;#error_page 404 /404.html;include enable-php.conf;location /nginx_status{stub_status on;access_log off;}location ~ .*.(gif|jpg|jpeg|png|bmp|swf)${expires 30d;}location ~ .*.(js|css)?${expires 12h;}location ~ /.{deny all;}#应用部署在子目录sixchat下,如果部署在根目录下,需要去掉/sixchat#ThnkPHP URL_MODEL=>2 rewrite 省略index.phplocation /sixchat/ {if (!-e $request_filename) {rewrite ^/sixchat/(.*)$ /sixchat/index.php?s=$1 last;break;}}#access_log /home/wwwlogs/access.log;}include vhost/*.conf;}最后,重启nginx服务器即可 service nginx restart
M方法用于实例化一个基础模型类,和D方法的区别在于:1、不需要自定义模型类,减少IO加载,性能较好;2、实例化后只能调用基础模型类(默认是Model类)中的方法;3、可以在实例化的时候指定表前缀、数据库和数据库的连接信息;D方法的强大则体现在你封装的自定义模型类有多强,不过随着新版ThinkPHP框架的基础模型类的功能越来越强大,M方法也比D方法越来越实用了。M方法的调用格式:M('[基础模型名:]模型名','数据表前缀','数据库连接信息')我们来看下M方法具体有哪些用法:1、实例化基础模型(Model) 类在没有定义任何模型的时候,我们可以使用下面的方法实例化一个模型类来进行操作://实例化User模型$User = M('User');//执行其他的数据操作$User->select();复制代码 这种方法最简单高效,因为不需要定义任何的模型类,所以支持跨项目调用。缺点也是因为没有自定义的模型类,因此无法写入相关的业务逻辑,只能完成基本的CURD操作。$User = M('User');复制代码其实等效于:$User = new Model('User');复制代码表示操作think_user表。M方法和D方法一样也有单例功能,多次调用并不会重复实例化。M方法的模型名参数在转换成数据表的时候会自动转换成小写,也就是说ThinkPHP的数据表命名规范是全小写的格式。 2、实例化其他公共模型类第一种方式实例化因为没有模型类的定义,因此很难封装一些额外的逻辑方法,不过大多数情况下,也许只是需要扩展一些通用的逻辑,那么就可以尝试下面一种方法。$User = M('CommonModel:User');复制代码 改用法其实等效于:$User = new CommonModel('User');复制代码因为系统的模型类都能够自动加载,因此我们不需要在实例化之前手动进行类库导入操作。模型类CommonModel必须继承Model。我们可以在CommonModel类里面定义一些通用的逻辑方法,就可以省去为每个数据表定义具体的模型类,如果你的项目已经有超过100个数据表了,而大多数情况都是一些基本的CURD操作的话,只是个别模型有一些复杂的业务逻辑需要封装,那么第一种方式和第二种方式的结合是一个不错的选择。 3、传入表前缀、数据库和其他信息M方法有三个参数,第一个参数是模型名称(可以包括基础模型类和数据库),第二个参数用于设置数据表的前缀(留空则取当前项目配置的表前缀),第三个参数用于设置当前使用的数据库连接信息(留空则取当前项目配置的数据库连接信息),例如:$User = M('db2.User','think_');复制代码 表示实例化Model模型类,并操作db2数据库中的think_user表。如果第二个参数留空或者不传,表示使用当前项目配置中的数据表前缀,如果操作的数据表没有表前缀,那么可以使用:$User = M('db1.User',null);复制代码表示实例化Model模型类,并操作db1数据库中的user表。如果你操作的数据库需要不同的用户账号,可以传入数据库的连接信息,例如:$User = M('User','think_','mysql://user_a:1234@localhost:3306/thinkphp');复制代码表示基础模型类用Model,然后对think_user表进行操作,用user_a账号进行数据库连接,操作数据库是thinkphp。第三个连接信息参数可以使用DSN配置或者数组配置,甚至可以支持配置参数。例如,在项目配置文件中配置了:'DB_CONFIG'=>'mysql://user_a:1234@localhost:3306/thinkphp';复制代码则可以使用:$User = M('User','think_','DB_CONFIG');复制代码 基础模型类和数据库可以一起使用,例如:$User = M('CommonModel:db2.User','think_');复制代码如果要实例化分层模型的话,利用公共模型类的方式,我们可以使用:M('UserLogic:User');复制代码来实例化UserLogic,虽然这样做的意义不大,因为可以用D('User','Logic');复制代码实现同样的功能。
先来看看微信分享效果:在没有集成微信分享js-sdk前是这样的:没有摘要,缩略图任意抓取正文图片 在集成微信分享js-sdk后是这样的:标题,摘要,缩略图自定义 一、下载微信SDK开发包下载地址:http://demo.open.weixin.qq.com/jssdk/sample.zip二、设置安全域名所有的微信JS接口都只能在公众号绑定的域名下调用。登录微信公众平台,点击左边的“公众号设置”,切换到“功能设置”,在“JS接口安全域名”一栏设置安全域名,下载验证文件到网站根目录,再回到窗口点击“确定”(注:在点击“确定”前,设置的域名下都要能在浏览器下正常访问刚才下载的验证文件才能通过验证)。 三、以第三方插件形式集成到ThinkPHP1、解压微信SDK开发包,将jssdk.PHP、access_token.php、jsapi_ticket.php复制到插件目录ThinkPHP/Library/Org/Util下,重命名jssdk.php为Jssdk.class.php(符合TP加载规则的文件名)。 2、修改access_token.php、jsapi_ticket.php的读写路径。打开Jssdk.class.php文件,加入私有属性private $filePath;在构造函数中设置属性为当前文件路径:$this->filePath = __DIR__.'/';搜索access_token.php、jsapi_ticket.php,在文件名前连接上$this->filePath 四、应用1、在PHP接口处写一函数调用,$url为angularjs访问接口时传过来的参数,保证请求地址和调用地址一致//获取微信jssdk配置信息public function getwxconfig(){$url=$_GET['url'];$jssdk = new OrgUtilJssdk(_APPID_, _APPSECRET_,$url);$signPackage = $jssdk->GetSignPackage();if(empty($signPackage)){$this->response(array('success'=>0,'info'=>'读取错误'),'json');}else{$this->response(array('success'=>1,'info'=>'读取成功','appid'=>$signPackage['appId'],'timestamp'=>$signPackage['timestamp'],'nonceStr'=>$signPackage['nonceStr'],'signature'=>$signPackage['signature']),'json');}}2、angularjs代码$http.get("/h5n/games/web/getwxconfig?url="+encodeURIComponent('http://youxi919.com/h5web/')).success(function (response) {if(response.success==1){wx.config({debug: true, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。appId: response.appid, // 必填,公众号的唯一标识timestamp: response.timestamp, // 必填,生成签名的时间戳nonceStr: response.nonceStr, // 必填,生成签名的随机串signature: response.signature,// 必填,签名,见附录1jsApiList: ['checkJsApi','onMenuShareTimeline','onMenuShareAppMessage','onMenuShareQQ','onMenuShareWeibo'] // 必填,需要使用的JS接口列表,所有JS接口列表见附录2});}else{};});wx.ready(function () {wx.onMenuShareAppMessage({ //配置分享给朋友接口title: '分享的标题', // 分享标题desc: '这是一个测试分享', // 分享描述link: location.href, // 分享链接imgUrl: '', // 分享图标type: '', // 分享类型,music、video或link,不填默认为linkdataUrl: '', // 如果type是music或video,则要提供数据链接,默认为空success: function () {// 用户确认分享后执行的回调函数},cancel: function () {// 用户取消分享后执行的回调函数}})}); 以上使用场景:如果是前后台端分离的网站架构(也就是通过api接口的形式),前端必然要用到ajax请求,会出现一个问题:被请求的网址与调用的网址不一致,微信SDK会提示签名无效。提供一个解决办法是:把调用的网址当成参数发回给服务器端,再生成微信签名。
html代码<if condition="!isset($_SESSION['account'])"><div class="load lf"><p>注册登录</p><div class="userId">帐号:<input type="text" placeholder="请输入帐号" value="" name="username" id="username" required></div><div class="userPwd">密码:<input type="password" placeholder="请输入密码" value="" name="pwd" id="pwd" required></div><div class="user-choose"><label><input type="checkbox" name="userId"><div class="remember">记住用户名</div></label><a href="#" class="forget">忘记密码</a></div><div class="bottom-choose"><button class="submit" id="submit" type="submit"></button><a href="{{:U('register/index')}}" class="register"></a></div></div><else /><div class="load lf">{{$Think.session.account}} <a href="{{:U('index/loginout')}}">【退出】</a></div>js代码<script>$(document).ready(function(){$("#submit").click(function(){var username = $("#username").val();var pwd = $("#pwd").val();$.post("{{:U('index/login')}}",{username:username,pwd:pwd},function($data){if($data.status == 1){location.href = $data.url;}else{alert($data.info);$('#username').reset();$('#pwd').reset();}});});});</script>php代码public function login(){$username=$_POST['username'];$pwd=$_POST['pwd'];if($username=='' || $pwd==''){$this->ajaxReturn(array('status'=>0,'info'=>'帐号密码不能为空','url'=>''));}$User = D("User");$result=$User->getFields("account='".$username."' and password='".md5($pwd)."'");if(empty($result)){$this->ajaxReturn(array('status'=>0,'info'=>'登录失败','url'=>''));}else{session('account',$result['account']);$url=U('index/index');$this->ajaxReturn(array('status'=>1,'info'=>'登录成功','url'=>$url));}}public function loginout(){session('account',null);$this->redirect('index/index');}model代码public function getFields($where){return $this->where($where)->find();} 
其实说白了,这篇文章就是转给自己看的,省的下次用的时候满网络找了。有需要的同学也可以看看。自动验证是非常有用的一个技术。平常的验证基本就是,用户名是否为空,用户名是否重复,密码,重复密码是否一致。官方给的就是这些。那么我们不可能只用到这些,铁定还有别的规则,所以下面这些规则供同学借鉴,也供我自己借鉴。 array(‘name’,’/^[a-z]w{3,}$/i’,’名字不符合要求!’);array(‘password’,’/^[a-z]w{6,30}$/i’,’密码不符合要求!’);array(‘account’,’/^[A-Za-z]+$/’,’账号必须使用英文!’);附上一些表单验证中比较常用的正则表达式写法:匹配中文字符的正则表达式: [一-龥]匹配双字节字符(包括汉字在内):[^x00-xff]匹配Email地址的正则表达式:w+([-+.]w+)*@w+([-.]w+)*.w+([-.]w+)*匹配网址URL的正则表达式:[a-zA-z]+://[^s]*匹配帐号是否合法(字母开头,允许5-16字节,允许字母数字下划线):^[a-zA-Z][a-zA-Z0-9_]{4,15}$匹配国内电话号码:d{3}-d{8}|d{4}-d{7}匹配中国邮政编码:[1-9]d{5}(?!d)匹配ip地址:d+.d+.d+.d+匹配特定数字:^[1-9]d*$ //匹配正整数^-[1-9]d*$ //匹配负整数^-?[1-9]d*$ //匹配整数^[1-9]d*|0$ //匹配非负整数(正整数 + 0)^-[1-9]d*|0$ //匹配非正整数(负整数 + 0)^[1-9]d*.d*|0.d*[1-9]d*$ //匹配正浮点数^-([1-9]d*.d*|0.d*[1-9]d*)$ //匹配负浮点数^-?([1-9]d*.d*|0.d*[1-9]d*|0?.0+|0)$ //匹配浮点数^[1-9]d*.d*|0.d*[1-9]d*|0?.0+|0$ //匹配非负浮点数(正浮点数 + 0)^(-([1-9]d*.d*|0.d*[1-9]d*))|0?.0+|0$//匹配非正浮点数(负浮点数 + 0)匹配特定字符串:^[A-Za-z]+$//匹配由26个英文字母组成的字符串^[A-Z]+$//匹配由26个英文字母的大写组成的字符串^[a-z]+$//匹配由26个英文字母的小写组成的字符串^[A-Za-z0-9]+$//匹配由数字和26个英文字母组成的字符串^w+$//匹配由数字、26个英文字母或者下划线组成的字符串  实例:protected $_validate = array(array('username','require','用户名必须!'), // 数据是否为空 注:默认增加修改都验证array('username','','用户名已经存在!',0,’unique’,1), // 在新增的时候验证username字段是否唯一array('password','checkPwd','密码格式不正确',0,’function’), // 密码格式可以用chenkPwd方法自定义array('repassword','password','确认密码不正确',0,’confirm’), // 验证确认密码是否和密码一致array('sex','array(0,1,2)','性别必须为0,1,2',0,'in'), // 验证数据是否在一个范围内array('age','number','年龄必须为数字'), // 验证数据是否为数字array('email','email','邮箱格式不正确'), // 内置正则验证邮箱array('email','/^/w+([-+.]/w+)*@/w+([-.]/w+)*/./w+([-.]/w+)*$/','邮箱格式不正确), // 自定义正则验证数据array('mypage','url','个人网址格式不正确'), // 内置正则验证URL地址array('verify','****','验证码不正确',0,'equal'), // 验证数据是否等于某个值 注:****可以是随机验证码array('salary','currency','薪水验证不正确','0'), // 内置验证货币数据); 
thinkphp mysql和mongodb 完美使用。第一步:在你的应用的Model文件下建立一个MonModel如下图第二步:MonModel的内容如下1 <?php2 /**3 * Created by PhpStorm.4 * User: Administrator5 * Date: 2015/12/166 * Time: 15:297 */8 namespace AdminModel;9 use ThinkModelMongoModel;10 Class MonModel extends MongoModel11 {12 public function __construct($name, $tablePrefix, $connection)13 {14 parent::__construct($name, $tablePrefix, $connection);15 $this->trueTableName=$name;//要连接的那个集合(表)控制器里传过来16 }17 protected $dbName='name';//(要连接的数据库名称)18 protected $connection = array(19 'db_type' => 'mongo',20 'db_user' => 'admin',//用户名(没有留空)21 'db_pwd' => 'admin',//密码(没有留空)22 'db_host' => '127.0.0.1',//数据库地址23 'db_port' => '27017',//数据库端口 默认2701724 );25 protected $_idType = self::TYPE_INT; //参考手册26 protected $_autoinc = true;//参考手册27 /* public function getall()28 {29 return $this->select();30 }*/31 }第三步:你就可以在你的控制器里用这个MonModel去操作mongodb了。如下1 <?php2 namespace AdminController;3 use AdminModelMonModel;4 use CommonControllerYouKangController;5 class AuController extends YouKangController {6 public function index()7 {8 $M= new MonModel('movie');//movie是集合名(表名)9 diedump($M->select());10 }11 } 
看到Thinkphp网站上没有调用Mongodb的例子,就写一个一个最简的Thinkphp操作Mongodb的例子。欢迎讨论【前提】Thinkphp对Mongdb的支持依赖于PHP对Mongodb的支持。这是前提。如果出现类似“系统不支持:mongoClient”的提示,说明你的PHP还没支持Mongodb。那么你需要做的就是1、去https://github.com/mongodb/mongo-php-driver/downloads下载最新的PHP-Mongodb扩展包,下载后把和你PHP大版本相符合的文件重命名为php_mongo.dll如,我的PHP是5.3.13,win7 64位系统,那么就把php_mongo-1.3.2RC1-5.3-vc9-x86_64.dll改成php_mongo.dll2、把改名后的文件复制到php的ext文件夹3、修改php.ini ,增加 extension=php_mongo.dll【配置】修改配置文件如下,即可链接mongodb数据库:<?phpreturn array(//'配置项'=>'配置值''DB_TYPE' => 'mongo', // 数据库类型'DB_HOST' => 'localhost', // 服务器地址'DB_NAME' => 'local', // 数据库名'DB_USER' => '', // 用户名'DB_PWD' => '', // 密码'DB_PORT' => '27017', // 端口); 【代码】对于操作mongodb,要使用M方法。因此要初始化一个类。假设数据库里有数据表user,那么要给user创建一个继承自MongoModel的模型:<?phpnamespace HomeModel;use ThinkModelMongoModel;Class UserModel extends MongoModel{//可以是空的。} 修改IndexController如下,即可调用Mongodb中local数据库里的user Collection<?phpnamespace HomeController;use ThinkController;class IndexController extends Controller {public function index(){$Model = D("User");$Model->create();$Model->name = '流年2';$Model->add();$a = $Model->select();var_dump($a);}} 
今天使用thinkPHP操作MongoDB发现跟用MYSQL有很多不同的地方,在这里特别跟大家分享下.暂时没用thinkPHP5一直还在用thinkPHP3.2.3觉得挺好用,MongoDB版本2和3均测试通过.config.php//连接mongoDB'DB_TYPE' => 'mongo', // 数据库类型'DB_HOST' => '127.0.0.1', // 服务器地址'DB_NAME' => 'local', // 数据库名'DB_USER' => '', // 用户名'DB_PWD' => '', // 密码'DB_PORT' => '27017', // 端口'DB_CHARSET' => 'utf8', // 数据库编码'DB_DEBUG' => false, // 数据库调试模式 开启后可以记录SQL日志 IndexController.class.php<?phpnamespace HomeController;use HomeModelColModel;use ThinkController;class IndexController extends Controller {//http://localhost/testmdb/Index//增public function index(){$db = D("Col");$data['name'] = '张雷帅哥';$data['reg'] = time();$returl = $db ->add($data);var_dump($returl);}//http://localhost/testmdb/Index/chaxun/name/张雷帅哥//查public function chaxun($name=''){$db = D("Col");$returl = $db ->where(array("name"=>$name)) ->select();var_dump($returl);}//http://localhost/testmdb/Index/xiugai/name/张雷帅哥//改public function xiugai($name=''){$db = D("Col");$data['reg'] = '20170310';$returl = $db ->where(array("name"=>$name)) ->save($data);var_dump($returl);}//http://localhost/testmdb/Index/shan/id/58c2483e4b1486d073000032//删public function shan($id=''){$db = D("Col");$returl = $db ->where(array("_id"=>$id)) ->delete();var_dump($returl);}} ColModel.class.php<?phpnamespace HomeModel;use ThinkModelMongoModel;Class ColModel extends MongoModel{}  
11:06 2016/10/19  解决 /?s=/home/user/verify 访问可以   /home/user/verify 无法访问 thinkphp URL模块 配置为 'URL_MODEL'     =>  '2', url http://www.cnphp6.com/archives/122368   代码  https://git.oschina.net/mjw/CodeLib
如题。 猜测如下: wamp是新装的,里面的apache当然也是新的。 这个新的apache不认识tp5 的路由规则。 所以会出现如下情况: localhost/mysite/public 可以访问 localhost/mysite/public/index/index/index 不可访问。 经尝试,此方法即可解决。 这里写链接内容
常规教程不多说 1.下载对应的xdebbger并放在适当位置 2.配置phpstorm中的server,如端口等 3.配置php.ini文件 此处有两个重点: 1是php.ini究竟是哪个生效,是apache文件夹中的呢,还是php文件夹中的呢 这个可以在localhost/phpinfo.php中的详情里找到答案。 2.php.ini的配置,一大要点是php_xdebug.dll文件要找得到才行
在Linux环境下,使用composer安装thinkphp5,安装时,报错:[ErrorException]               mkdir(): Permission denied : 看了半天,才发现是自己的权限不够造成的!!!用的是普通账号cmder,而没有使用root账户。切换成root账户,然后再重试,成功!
Apache + ThinkPHP 5.1 + MySQL 实现的Restful API风格的数据访问接口 [myth@contoso ~]$ whoami myth [myth@contoso ~]$ pwd /home/myth 单向数字证书 [root@contoso ~]# openssl genrsa -out ca-app.key 2048    ## 1). 生成一个CA私钥 Gen
  我这里有套课程想和大家分享,需要的朋友可以加我qq和我联系。QQ2059055336.  一、本课程是怎么样的一门课程(全面介绍)   1.1、课程的背景         随着开源项目和nosql数据库的流行,越来越多的网站使用bootstrap、jquery、thinkphp等前后端框架实现网站,以提高开发效率和网站的访问速度, mongodb的使用更是在网站拥有海量数据的情况下保持一定的查
   最近一直在纠结前台的UI设计。之前做的一些项目为了绕开这个让所有程序猿头疼的东西,使用过Jquery EasyUI、ExtJS。但是因为浏览设备的发展,特别是客户浏览设备屏幕的大小在变化(以往浏览网页的设备主要是PC,现今发展为PC、Pad、Phone而且以上三类产品的浏览器屏幕尺寸从3.5寸到46寸(在家里闲来无趣,通过VGA线连接自家的彩电还是很有意思的))。造成客户对于网站的适应能力提
bootstrap 网上的bootstrap模板都是把所有的路径写在了当前文件夹,在利用thinkphp的时候,只要把相应的路径改为__GROUP__,相应的css和js路径改为__PUBLIC__下的路径即可,当然也可以去修改php,但是比较麻烦,还是推荐这种方法,bootstrap和网站有关的css都在style.css中,相应的修改去这个文件中操作即可 如果涉及到渐变,可以参考:http:/