快乐每一天

自己选择的路,跪着也要走下去...

标签 TP5 下的文章

tp5 加载 extend 类库的方法 (有命名空间和没有命名空间的调用)

如下自己开始的写法,还是会报错 ( 错误写法) : 没有命名空间的 调用

2019-04-01T13:17:42.png

没有命名空间的 调用 (正确写法)

2019-04-01T13:18:10.png

没有命名空间的 调用 (错误写法)

2019-04-01T13:18:35.png

有命名空间的调用

首先我想知道命名空间的名称 : 必须按照路径来书写吗? (是的)

2019-04-01T13:19:11.png

解决上述4 的问题,如果仔细看 tp5 的命名规范的话,估计也不会饶这么大的弯子

2019-04-01T13:19:33.png

有命名空间的调用 : 命名空间是自己随便命名的 : 错误写法

2019-04-01T13:19:54.png

有命名空间的调用 : 错误写法
命名空间是自己随便命名的 (想法错误) 2. 类名跟类文件名称一致 (想法正确)
2019-04-01T13:20:22.png

有命名空间的调用 : 正确写法
命名空间是类库所在的文件夹名称 (想法正确) 2. 类名跟类文件名称一致 (想法正确)
2019-04-01T13:20:48.png

有命名空间的调用 : 错误写法
命名空间是类库所在的文件夹名称 (想法正确) 2. 类名跟类文件名称不一致 (想法错误)

2019-04-01T13:21:10.png

参考链接1:https://segmentfault.com/a/1190000017093338
参考链接2:https://blog.csdn.net/qq_35669659/article/details/84558239

阅读全文

Thinkphp5集成小米推送

一、从小米开发者官网下载推送DEMO
二、解压DEMO,然后有以下文件

sdk----->android_example.php                    
----->autoload.php                    
----->ios_example.php                    
----->xmpush[核心文件]

复制SDK文件夹,至:ThinkPHPLibraryVendor
修改所有xmpush文件夹内的类的命名空间为: xmpush
然后再SDK文件夹内,新建一个push类 代码如下

<?php
/**
 * Created by PhpStorm.
 * User: wudi
 * Date: 2019/3/4
 * Time: 9:05
 */
namespace    sdk;
use    xmpush\Builder;

use    xmpush\Sender;
use    xmpush\Constants;

use    xmpush\TargetedMessage;

use    xmpush\IOSBuilder;

use    xmpush\Stats;
use    xmpush\Tracer;
include_once(dirname(__FILE__)    .    '/autoload.php');
class    push
{
         /*$style            int    推送方式,1,安卓,2,苹果,3,安卓推送打开应用内的某个activity
         * $aliasList        array,格式为array("1,2,3,4,5,6"),也就是推送的目标别名
         * $titlse        String                    推送标题
         * $conent        String                    推送内容
         * $payload    String                    暂时不用
         * 注:因为写的比较仓促,可以将        3        内的跳转到指定activity的参数放在参数列表,以方便调用
         * 也可以将if    else    改为switch,此类为举例,完全可以自己构思这个类,我只是举个例子
         */

         public     function    pushs($style,$aliasList,$titlse,$conent,$payload="")
         {
             $id = (int)$style;
             $desc    =    $conent;
             if($id    ==    1){
                 $secret    =    '填写参数';
                 $package    =    '填写参数';
                 Constants::setPackage($package);
                 Constants::setSecret($secret);
                 $title    =    $titlse;
                 $sender    =    new    Sender();
                 $message    =    new    Builder();
                 $message->title($title);
                 $message->description($desc);
                 $message->passThrough(0);
                 $message->payload($payload);    //    对于预定义点击行为,payload会通过点击进 入的界面的intent中的extra字段获取,而不会调用到onReceiveMessage方法。
                 $message->extra(Builder::notifyEffect,    1);    //    此处设置预定义点击行为,1 为打开app
                 $message->extra(Builder::notifyForeground,    1);
                 $message->notifyId(0);
                 $message->build();
                 $targetMessage2    =    new    TargetedMessage();
                 $targetMessage2->setTarget('tag',    TargetedMessage::TARGET_TYPE_ALIAS );
                 $targetMessage2->setMessage($message);
                 $targetMessageList    =    array(    $targetMessage2);
             }else    if($id    ==    2){
                 $secret    =    '填写参数';
                 $bundleId    =    '填写参数';
                 Constants::setBundleId($bundleId);
                 Constants::setSecret($secret);
                 $message    =    new    IOSBuilder();
                 $message->description($desc);
                 $message->soundUrl('default');
                 $message->badge('4');
                 $message->extra('payload',    $payload);
                 $message->build();
                 $sender    =    new    Sender();
             }else    if($id    ==    3){
                 $secret    =    '填写参数';
                 $package    =    '填写参数';
                 Constants::setPackage($package);
                 Constants::setSecret($secret);
                 $title    =    $titlse;
                 $sender    =    new    Sender();
                 $message    =    new    Builder();
                 $message->title($title);
                 $message->description($desc);
                 $message->passThrough(0);
                 $message->payload($payload);
                 //    对于预定义点击行为,payload会通过点击进 入的界面的intent中的extra字段获取,而不会调用到onReceiveMessage方法。
                 $message->extra(Builder::notifyEffect,    2);    //    此处设置预定义点击行为,1 为打开app,2为打开应用内的activity
                 $message->extra(Builder::notifyForeground,    1);
                 $message->extra(Builder::intentUri,    "intent:#Intent;component=包名/ 完整的activity路径;end");    //打开应用内activity必须添加此参数
                 $message->notifyId(0);
                 $message->build();
                 $targetMessage2    =    new    TargetedMessage();
                 $targetMessage2->setTarget('tag',    TargetedMessage::TARGET_TYPE_ALIAS );
                 $targetMessage2->setMessage($message);
                 $targetMessageList    =    array(    $targetMessage2);
             }
             print_r($sender->sendToAliases($message,$aliasList)->getRaw());
         }





    }

然后呢,在方法内调用:

vendor('sdk.push'); 
$push    =    new    \sdk\push(); 
$user    =    array("1,2"); 
$push->pushs(3,$user,"在游戏中消费100元","获得了奖励注意查收"); 
//至此,融合完成,调用即可进行推送,注意配置文件的写入         
阅读全文

TP5小知识点锦集(长期更新)

分页查询不丢失条件
Db::name("table")->where("XXXX")->paginate(10,false,['query'=>request()->param()]); 
获取最新插入的id
$userId = Db::name('user')->getLastInsID();
thinkphp tp5 模板 引擎 字符串 截取 函数 省略 显示
{$d['title']|mb_substr=0,10,'utf-8'}
模版 时间截转换
{$time|date='Y-m-d H:i:s',###}
测试数据打印
error_log(time().'显示设置'.print_r(array(),true),3,dirname(__FILE__).'/error_log.php');
TP5 url链接(带参数)的写法
window.location.href="{:url('Index/index')}>"+"/ID/"+ID; //这样可以生成,但url模式改变则不能用
 
window.location.href="{:url('Index/index','ID=" + ID+ "')}" //解析不成功。
 
window.location.href="{:url('Index/detail',['id' => "+iD+"])}";//解析不成功
 
window.location.href='{:url("Index/detail")}?id='+ iD ;//解析成功

参考: 参考URL

php 正则替换图片url内容(这里是将URL路径改写了)
$suffix="http://q8adminx.keai8l.com";
$pregRule = "/<[img|IMG].*?src=[\'|\"](.*?(?:[\.jpg|\.jpeg|\.png|\.gif|\.bmp]))[\'|\"].*?[\/]?>/";
$content = preg_replace($pregRule, '<img src="'.$suffix.'${1}" data-filename="filename"', $articleinfo['content']);
$articleinfo['content']=$content;
tp5 自定义命令脚本执行在宝塔
cd /www/wwwroot/xw.njagdl.com/xw/
php think task_wxcatch_all_history
tp5.1 手动引入外部类库
use think\facade\Env;
require_once Env::get('ROOT_PATH') . "extend/PHPExcel/Classes/PHPExcel.php";
fastadmin 后台文章内的图片替换成绝对路径
$suffix="http://q8adminx.keai8l.com";
$pregRule = "/<[img|IMG].*?src=[\'|\"](.*?(?:[\.jpg|\.jpeg|\.png|\.gif|\.bmp]))[\'|\"].*?[\/]?>/";
$content = preg_replace($pregRule, '<img src="'.$suffix.'${1}" data-filename="filename"',$articleinfo['content']);
$articleinfo['content']=$content;


内容输出:
<?php echo htmlspecialchars_decode($articleinfo['content']); ?>
一旦宝塔后台显示Inode占用比较大的时候
删除 /root/.anyproxy/cache
以及tp5的runtime里面的目录
阅读全文

TP5配置静态资源访问路径

在这个地方添加你需要的配置路径
thinkphp/library/think/View.php
$baseReplace = [
            '__ROOT__'   => $root,
            '__URL__'    => $base . '/' . $request->module() . '/' . Loader::parseName($request->controller()),
            '__STATIC__' => $root . '/static',
            '__CSS__'    => $root . '/static/css',
            '__JS__'     => $root . '/static/js',
        ];
在这个地方添加上面已经添加好的配置后就可以直接使用了
application/config.php
// 视图输出字符串内容替换,留空则会自动进行计算
    'view_replace_str'       => [
        '__PUBLIC__' => '',
        '__ROOT__'   => '',
        '__CDN__'    => '',
        '__CSS__'    => '/static/css',
        '__JS__'    => '/static/js',
        '__STATIC__'    => '/static',
    ],
阅读全文

TP5控制器继承的问题

凡是遇到问题不要想当然,以前就没出错的的代码不一定就没错,只是没到时候而已

回归正题,下面是tp5控制器继承的源码

//主控制器
<?php
namespace app\api\Controller;
use think\Controller;
use think\Request;

class Com extends Controller
{
}
//从控制器
<?php
namespace app\api\Controller;
use app\api\controller\Com;
use think\Request;
use app\api\model\hscontentModel;

class Search extends Com
{
}
阅读全文