首页
复制
搜索
前进
后退
重载网页
和我当邻居
给我留言吧
首页
关于
WOW怀旧
友链
留言
更多
壁纸
Search
1
关于《杀死那个石家庄人》背后的故事
3,475 阅读
2
摄影记录|鸿恩寺
465 阅读
3
沈阳故宫之旅
435 阅读
4
赤壁赋| 知不可乎骤得,托遗响于悲风
370 阅读
5
EasyWechat 微信小程序接入微信支付|笔记
274 阅读
编程技术
GoLang
Vue
PHP
Linux
Redis
网络安全
生活杂记
登录
Search
标签搜索
PHP
随笔
Mysql
Laravel-Admin
Laravel
摄影
设计模式
Ab
Linux
Javascript
MAC
支付
CentOs
sh
嘉陵江
南滨路
蓝易云
redis
万能青年
累计撰写
60
篇文章
累计收到
52
条评论
首页
栏目
编程技术
GoLang
Vue
PHP
Linux
Redis
网络安全
生活杂记
页面
关于
WOW怀旧
友链
留言
壁纸
搜索到
19
篇与
的结果
2022-03-15
PHP(DI)依赖注入
依赖注入{callout color="#f0ad4e"}本质上是指对类的依赖通过构造器完成自动注入通俗来说,就是你当前操作一个类,但是这个类的某些方法或者功能不是单单只靠这个类就能完成的,而是要借助另一个类的才能完成的最直接的标志就是 传参数据为对象 的时候。严格来说,你想在 另一个类中操作另一个类 ,这两个类之间形成了相互依赖关系, 传参的方式叫注入 {/callout}简单的例子<?php namespace App\Http\Controllers; class AdapterController { public $name = '欢迎访问依赖注入'; } 使用<?php namespace App\Http\Controllers; class IndexController { protected $Adapter; public function __construct(AdapterController $Adapter) { $this->Adapter = $Adapter; } public function test() { return 'Hello,' . $this->Adapter->name; } } 结果Hello,欢迎访问依赖注入高阶操作传统的写法<?php /** * 定义了一个消息类 * Class Message */ class Message{ public function seed() { return 'seed email'; } }/* * 订单产生的时候 需要发送消息 */ class Order{ protected $messager = ''; function __construct() { $this->messager = new Message(); } public function seed_msg() { return $this->messager->seed(); } } $Order = new Order(); $Order->seed_msg();{callout color="#f0ad4e"}上面的代码是我们传统的写法。首先由个消息发送的类。然后在我们需要发送消息的地方,调用发送消息的接口。有一天你需要添加一个发送短信的接口以满足不同的需求。那么你会发现你要再Message类里面做修改。同样也要再Order类里面做修改。这样就显得很麻烦。这个时候就有了依赖注入的思路。下面把代码做一个调整{/callout}依赖注入写法 为了约束我们先定义一个消息接口<?php namespace App\Http\Controllers; /** * 为了约束我们先定义一个消息接口 * Interface MessageInterface */ interface MessageInterface { public function send(); }有一个发送邮件的类<?php namespace App\Http\Controllers; /** * 有一个发送邮件的类 * Class SendEmailController */ class SendEmailController implements MessageInterface { public function send() { return 'send email'; } } 新增一个发送短信的类<?php namespace App\Http\Controllers; /** *新增一个发送短信的类 * Class SendSMSController */ class SendSMSController implements MessageInterface { public function send() { return 'send sms'; } } 订单产生的时候 需要发送消息<?php namespace App\Http\Controllers; /* * 订单产生的时候 需要发送消息 */ class OrderController { protected $messager = ''; function __construct(MessageInterface $message) { $this->messager = $message; } public function send_msg() { return $this->messager->send(); } } 调用<?php namespace App\Http\Controllers; class IndexController { public function test() { //我们需要发送邮件的时候 $message = new SendEmailController(); //将邮件发送对象作为参数传递给Order $Order = new OrderController($message); echo '触发邮件---'.$Order->send_msg().PHP_EOL; //我们需要发送短信的时候 $message = new SendSMSController(); $Order = new OrderController($message); echo '触发短信---'.$Order->send_msg().PHP_EOL; } } 结果触发邮件---send email 触发短信---send sms
2022年03月15日
168 阅读
2 评论
0 点赞
2022-03-15
xml转数组
代码function xmlToArray($xml) { //禁止引用外部xml实体 libxml_disable_entity_loader(true); $values = json_decode(json_encode(simplexml_load_string($xml, 'SimpleXMLElement', LIBXML_NOCDATA)), true); return $values; }
2022年03月15日
51 阅读
0 评论
0 点赞
2022-03-14
laravel-admin 报错 | Disk [admin] not configured, please add a disk config in `config/filesystems.php`.
config/filesystems.php 添加admin 文件上传配置 'admin' => [ 'driver' => 'local', 'root' => public_path('upload'), 'visibility' => 'public', 'url' => env('APP_URL').'/upload/', ],最终效果'disks' => [ 'local' => [ 'driver' => 'local', 'root' => storage_path('app'), ], 'public' => [ 'driver' => 'local', 'root' => storage_path('app/public'), 'url' => env('APP_URL').'/storage', 'visibility' => 'public', ], 's3' => [ 'driver' => 's3', 'key' => env('AWS_KEY'), 'secret' => env('AWS_SECRET'), 'region' => env('AWS_REGION'), 'bucket' => env('AWS_BUCKET'), ], 'admin' => [ 'driver' => 'local', 'root' => public_path('upload'), 'visibility' => 'public', 'url' => env('APP_URL').'/upload/', ], ],
2022年03月14日
163 阅读
0 评论
0 点赞
2022-03-14
PHP图片旋转
代码 /* * $filename 图片地址 * $src 替换地址 * $degrees 转换度数 */ private function flip($filename='',$src='',$degrees = 90) { if(!$filename || !file_exists($filename) || !$src || !file_exists($src)){ return false; } $data = @getimagesize($filename); if($data==false)return false; //读取旧图片 switch ($data[2]) { case 1: $src_f = imagecreatefromgif($filename);break; case 2: $src_f = imagecreatefromjpeg($filename);break; case 3: $src_f = imagecreatefrompng($filename);break; } if($src_f=="")return false; $rotate = @imagerotate($src_f, $degrees,0); if(!imagejpeg($rotate,$src,100))return false; @imagedestroy($rotate); return true; }
2022年03月14日
64 阅读
0 评论
0 点赞
2022-03-14
laravel 8 自定义日志文件名|自定义目录
环境{callout color="#f0ad4e"}基于Laravel 8{/callout}代码<?php namespace App\Http\Helpers; use Illuminate\Support\Facades\DB; use Illuminate\Support\Facades\Route; use Monolog\Formatter\LineFormatter; use Monolog\Logger; use Monolog\Handler\StreamHandler; class LogHelper { private static $filename =''; // 文件记录类型 1:文件目录/日期/文件名 2:所有日志一个文件夹 private function __construct() { } private function __clone() { // TODO: Implement __clone() method. } /** * 设置日志文件名称 * @param $filename */ public static function setFilename($filename) { self::$filename = $filename; } /** * @param $message * @param array $data * @param string $filename * @param string $isDate 是否按月份分文件夹 */ private static function _save($message, $data = [],string $filename, $isDate = true) { $action = Route::current()->getActionName(); list($class, $method) = explode('@', $action); if (empty($filename)) $filename = !empty(self::$filename) ? self::$filename : $method; $log = new Logger('mylog'); if (PHP_SAPI == 'cli') { // 命令行访问脚本的,加一个cli标识和用户浏览器访问的区分开 $filename .= '_cli'; } $filename = $filename . '.log'; if ($isDate) { // 是否要按日显示 $path = storage_path('logs/' . date('Y-m-d')); } else { $path = storage_path('logs/'); } // 有时候运维没给号权限,容易导致写入日志失败 self::mkDirs($path); $path = $path . '/' . $filename; if (gettype($data) != 'array') { $message .= " " . $data; $data = []; } $microtime = microtime(); $message = '[' . substr($microtime, 0, 8) . '] ' . $message;// 记录毫秒时间 // finally, create a formatter $formatter = new LineFormatter("[%datetime%] %message% %context%\n", "Y-m-d H:i:s"); $stream = new StreamHandler($path, Logger::INFO); $stream->setFormatter($formatter); $log->pushHandler($stream); $log->info($message, $data); } /** * 日志打印 * @param string $message * @param array $data * @param string $filename */ public static function info(string $message,$data = [],string $filename='') { self::_save($message, $data, $filename); } /** * 给日志文件夹权限 * @param $dir * @param int $mode * @return bool */ private static function mkDirs($dir, int $mode = 0777) { if (is_dir($dir) || @mkdir($dir, $mode)) { return TRUE; } if (!self::mkdirs(dirname($dir), $mode)) { return FALSE; } return @mkdir($dir, $mode); } /** * 记录最后一条执行的sql * @param string $file_name * */ public static function sql(string $file_name='') { if (empty($file_name)) $file_name = !empty(self::$filename) ? self::$filename : __FUNCTION__.'_sql'; DB::listen(function ($sql) use ($file_name) { foreach ($sql->bindings as $i => $binding) { if ($binding instanceof \DateTime) { $sql->bindings[$i] = $binding->format('\'Y-m-d H:i:s\''); } else { if (is_string($binding)) { $sql->bindings[$i] = "'$binding'"; } } } $query = str_replace(array('%', '?'), array('%%', '%s'), $sql->sql); $query = vsprintf($query, $sql->bindings); LogHelper::info('sql:', $query, $file_name); }); } } 调用// 按日 按文件名 LogHelper::info('A 数组',['a','b'],'order'); // 按文件名 LogHelper::info('A 数组',['a','b'],'order'); // 只有字符串 LogHelper::info('B 字符串'); // 记录下面的执行sql LogHelper::sql(); // 输出: // [2021-04-15 11:50:37] [0.627499] sql:select * from `user` where `mobile` = '' limit 1 []
2022年03月14日
81 阅读
0 评论
0 点赞
1
2
3
4