laravel 项目从 5.2 升级到了 5.7,Excel 的导入导出,使用的 maatwebsite/excel laravel-excel 依赖包,也从 2.* 升级到了 3.*,发现不能用了,打开文档一看,这尼玛改动也太大了吧,完全不能使用的节奏啊!
先分享几个链接:
github 地址:
https://github.com/Maatwebsite/Laravel-Excel
官网地址:
https://laravel-excel.maatwebsite.nl
看文档的升级指南,可以发现官方推荐了个链接,有人从 2.x 升级到 3.x,项目里进行的代码修改
https://github.com/Maatwebsite/Laravel-Excel/issues/1799
PS:
想搜下新版的中文文档,打开 google 搜索,输入 'maatwebsite/excel 中文文档',发现第 3 条居然是我之前写的博客,打开一看,吓我一跳,我尼玛压根没有一点印象,之前居然总结过旧版文档,而且写了 700 多行,有点吃惊,我以前居然这么有耐心~
好了,闲话少数,开始新版文档学习之旅~
依赖:
PHP: ^7.0
Laravel: ^5.5
PhpSpreadsheet: ^1.4
php_zip
php_xml
php_gd2
安装:
composer require maatwebsite/excel
配置:
Maatwebsite\Excel\ExcelServiceProvider 默认是自动发现并注册,我们也可以手动添加:
config/app.php
'providers' => [
/*
* Package Service Providers...
*/
Maatwebsite\Excel\ExcelServiceProvider::class,
]
Excel 门面(Facade)也是自动发现,也可以手动添加:
config/app.php
'aliases' => [
...
'Excel' => Maatwebsite\Excel\Facades\Excel::class,
]
发布配置文件:
php artisan vendor:publish
会创建 config/excel.php
导出:
1.5分钟快速入门:
在 App/Exports 下创建导出类
php artisan make:export UsersExport --model=User
UserExport.php 内容:
常用方法
控制器里下载:
public function export()
{
return Excel::download(new InvoicesExport, 'invoices.xlsx');
}
控制器里保存到硬盘:
public function storeExcel()
{
return Excel::store(new InvoicesExport, 'invoices.xlsx', 's3');
}
2>依赖注入:
另一种写法,看文档
3>集合宏:
Laravel-Excel 为 Laravel 的导出集合类,提供了一些宏,更方便的下载和存储集合。
下载:
(new Collection([
[1, 'dongxuemin', 30],
[2, 'yangyaping', 30])
)->downloadExcel($filePath, $writerType = null, $headings = false);
保存:
(new Collection([
[1, 'dongxuemin', 30],
[2, 'yangyaping', 30])
)->storeExcel($filePath, $disk = null, $writerType = null, $headings = false);
总结:
我们可以自己利用 new Collection 来构造集合,进行下载和存储
3.在硬盘上存储导出数据:
导出可以很容易地被存储到 Laravel 所支持的任意文件系统。
1>不传递参数,默认文件系统
Excel::store(new InvoicesExport(2018), 'invoices.xlsx');
2>存储到 's3' 文件系统
Excel::store(new InvoicesExport(2018), 'invoices.xlsx', 's3');
3>存储到 's3' 文件系统,并指定 'writer' 类型
Excel::store(new InvoicesExport(2018), 'invoices.xlsx', 's3', Excel::XLSX);
4.导出格式:
默认情况下,导出格式由导出文件的后缀决定,例如:'user.xlsx',导出格式就是:\Maatwebsite\Excel\Excel::XLSX。我们也可以传递第二个参数,显式地指定导出格式。
(new InvoicesExport)->download('invoices.xlsx', \Maatwebsite\Excel\Excel::XLSX);
支持的格式有:
XLSX
CSV
TSV
ODS
XLS
SLK
XML
GNUMERIC
HTML
MPDF
DOMPDF
TCPDF
5.可导出的
之前的方法中,我们使用 Excel::download 门面(Facade) 来导出。
例如:在控制器中使用 Excel::download(new InvoicesExport(2018));
Laravel Excel 也提供了一个 'Maatwebsite\Excel\Concerns\Exportable' trait,使得我们创建的导出类,本身具有可导出的方法。
示例:
use Maatwebsite\Excel\Concerns\Exportable;
class InvoicesExport implements FromCollection
{
use Exportable;
public function collection()
{
return Invoice::all();
}
}
这样,InvoicesExport 类本身就具有可导出方法,不用再使用 Excel 门面(Facade)
下载:
return (new InvoicesExport)->download('invoices.xlsx');
存储:
return (new InvoicesExport)->store('invoices.xlsx', 's3');
可响应:
可以使用 'Responsable' 接口,进一步简化导出操作。
use Illuminate\Contracts\Support\Responsable;
class InvoicesExport implements FromCollection, Responsable
{
// 要求必须指定 'fileName' 属性(导出的文件名)
private $fileName = 'invoices.xlsx';
}
下载:
return new InvoicesExport();
6.从查询导出
在之前的例子中,我们在导出类中进行查询。对于小型导出,这个是一个非常好的解决方案,但是对于大型导出,会有很大的性能开销。
通过使用 'FromQuery',我们可以为导出准备一个查询。在底层,'FromQuery' 查询使用了 chunks 查询,以减少性能开销。
普通查询:
示例:
use Maatwebsite\Excel\Concerns\FromQuery; // 引入 'FromQuery'
class InvoicesExport implements FromQuery // 实现 'FromQuery'
{
use Exportable;
public function query()
{
return Invoice::query(); // 确保不要使用 'get()' 方法
}
}
下载:
return (new InvoicesExport)->download('invoices.xlsx');
自定义查询
/*
这个应该是我们最经常使用的方法!!!
我们一般都是根据用户的各种筛选条件,然后进行 query 查询,然后得到最终的结果列表,再进行导出。
但因为新版,导出的数据结果,都是通过外部的导出类来实现了,我们必须将 query 参数,传递到导出类中,来获取结果集。
*/
普通示例:
use Maatwebsite\Excel\Concerns\FromQuery; // 引入 'FromQuery'
class InvoicesExport implements FromQuery // 实现 'FromQuery'
{
use Exportable;
public function __construct(int $year) // 导入外部查询参数
{
$this->year = $year;
}
public function query()
{
return Invoice::query()->whereYear('created_at', $this->year); // 使用 where 查询
}
}
下载:
// 传递查询参数
return (new InvoicesExport(2018))->download('invoices.xlsx');
设置器示例(另一种写法):
use Maatwebsite\Excel\Concerns\FromQuery; // 引入 'FromQuery'
class InvoicesExport implements FromQuery // 实现 'FromQuery'
{
use Exportable;
public function forYear(int $year) // 定义 '设置器'
{
$this->year = $year;
return $this;
}
public function query()
{
return Invoice::query()->whereYear('created_at', $this->year); // 使用 where 查询
}
}
下载:
// 调用 '设置器'
return (new InvoicesExport)->forYear(2018)->download('invoices.xlsx');
7.从模板中导出
定义导出类,同时定义一个导出模板,Laravel Excel 会将定义的 HTML table 转换为一个 Excel 电子表单
示例:
use Illuminate\Contracts\View\View;
use Maatwebsite\Excel\Concerns\FromView;
class InvoicesExport implements FromView
{
public function view(): View
{
return view('exports.invoices', [
'invoices' => Invoice::all()
]);
}
}
Blade 模板,定义一个标准的 即可, - 表头 & - 表内容
Name
Email
@foreach($users as $user)
{{ $user->name }}
{{ $user->email }}
@endforeach
8.队列
如果处理大量的数据导出,推荐使用队列来进行导出。
队列导出,底层实现是:使用 chunk 查询,多个 job 任务链接在一起(应该是按顺序链接)。这些 job 任务以插入队列的先后顺序正确执行,只有当前面的任务执行成功,后面的才会执行。
普通示例:
导出类定义一致
下载,直接调用 'queue()' 方法
(new InvoicesExport)->queue('invoices.xlsx');
return back()->withSuccess('Export started!');
显示定义导出到队列
use Maatwebsite\Excel\Concerns\FromQuery;
use Illuminate\Contracts\Queue\ShouldQueue; // 引入 'ShouldQueue'
class InvoicesExport implements FromQuery, ShouldQueue // 实现 'ShouldQueue'
{
use Exportable;
public function query()
{
return Invoice::query();
}
}
下载,使用 'store()' 方法
(new InvoicesExport)->store('invoices.xlsx');
追加队列任务
queue() 方法返回 Laravel 的 'PendingDispatch' 实例。意味着,我们可以在队列尾部添加额外的 job 任务,新添加的导出任务,只有在之前的导出都正确后,才会执行。
示例:
use Illuminate\Bus\Queueable; // 引入 'Queueable'
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Queue\SerializesModels; // 引入 'SerializesModels'
class NotifyUserOfCompletedExport implements ShouldQueue
{
use Queueable, SerializesModels; // 使用 'Queueable' & 'SerializesModels'
public $user;
public function __construct(User $user) // 传递参数
{
$this->user = $user;
}
public function handle() // 调用了 'handle()' 方法
{
$this->user->notify(new ExportReady());
}
}
追加:
(new InvoicesExport)->queue('invoices.xlsx')->chain([
new NotifyUserOfCompletedExport(request()->user()), // 传递参数
]);
自定义队列:
由于返回了 'PendingDispatch',我们也可以更改使用的队列。(有时间可看下 PendingDispatch 源码)
(new InvoicesExport)->queue('invoices.xlsx')->allOnQueue('exports');
9.多个表单
多表单的导出,需要使用 'WithMultipleSheets'。然后在导出类中,实现 'sheets()' 方法,sheets() 方法,返回一个由 '单个表单对象' 组成的数组。
多表单的导出,需要2个类:
1>导出类
2>单个表单类
示例:
1>导出类
use Maatwebsite\Excel\Concerns\WithMultipleSheets;
class InvoicesExport implements WithMultipleSheets
{
// 实现 sheets() 方法,返回一个由 '单个表单对象' 组成的数组。
public function sheets(): array
{
$sheets = [];
for ($month = 1; $month <= 12; $month++) {
$sheets[] = new InvoicesPerMonthSheet($this->year, $month);
}
return $sheets;
}
}
2>单个表单类,可以实现 'FromQuery','FromCollection',...
use Maatwebsite\Excel\Concerns\FromQuery; // 引入 'FromQuery'
use Maatwebsite\Excel\Concerns\WithTitle; // 引入 'WithTitle'(可修改 excel 表单名)
class InvoicesPerMonthSheet implements FromQuery, WithTitle
{
// 查询
public function query()
{
return Invoice
::query()
->whereYear('created_at', $this->year)
->whereMonth('created_at', $this->month);
}
// Excel 电子表单名
public function title(): string
{
return 'Month ' . $this->month;
}
}
10.映射数据
映射行
添加 'WithMapping',我们可以定义一个 'map()' 方法,将查询到的每条数据,经过 map() 方法处理,返回我们需要的 '一整行'。
示例:
use Maatwebsite\Excel\Concerns\WithMapping; // 引入 'WithMapping'
class InvoicesExport implements FromQuery, WithMapping // 实现 'WithMapping'
// 定义 'map()' 方法,参数是 '查询出来的每行数据对象'
public function map($invoice): array
{
return [
$invoice->invoice_number,
Date::dateTimeToExcel($invoice->created_at),
];
}
}
添加标题行
添加 'WithHeadings',定义 'headings()' 方法,来添加标题行
示例:
use Maatwebsite\Excel\Concerns\WithHeadings; // 引入 'WithHeadings'
class InvoicesExport implements FromQuery, WithHeadings // 实现 'WithHeadings'
// 定义 'headings()' 方法
public function headings(): array
{
return [
'#',
'Date',
];
}
}
11.格式化列
使用 'WithColumnFormatting',定义 'columnFormats()' 方法,我们可以轻松格式化整列数据。
如果想要更多自定义内容,建议使用 AfterSheet 事件直接与底层 Worksheet 类进行交互。
示例:
use PhpOffice\PhpSpreadsheet\Shared\Date; // 日期处理
use PhpOffice\PhpSpreadsheet\Style\NumberFormat; // 数字格式化
use Maatwebsite\Excel\Concerns\WithColumnFormatting; // 引入 '列格式化'
use Maatwebsite\Excel\Concerns\WithMapping;
class InvoicesExport implements WithColumnFormatting, WithMapping
{
public function map($invoice): array
{
return [
$invoice->invoice_number,
Date::dateTimeToExcel($invoice->created_at),
$invoice->total
];
}
/**
* @return array
*/
public function columnFormats(): array
{
return [
'B' => NumberFormat::FORMAT_DATE_DDMMYYYY,
'C' => NumberFormat::FORMAT_CURRENCY_EUR_SIMPLE,
];
}
}
日期处理:
推荐在 map() 方法中使用 '\PhpOffice\PhpSpreadsheet\Shared\Date::dateTimeToExcel()'
自动调整尺寸:
引入 'ShouldAutoSize',让 Laravel Excel 自动调整单元格宽度
use Maatwebsite\Excel\Concerns\ShouldAutoSize;
Class InvoicesExport implements ShouldAutoSize
{
}
12.提供的所有可用的 'Export concerns'
接口:
Maatwebsite\Excel\Concerns\FromArray - 使用 array 来实现导出
Maatwebsite\Excel\Concerns\FromCollection - 使用 Laravel collection 来实现导出
Maatwebsite\Excel\Concerns\FromIterator - 使用 iterator(迭代器)来实现导出
Maatwebsite\Excel\Concerns\FromQuery - 使用 Eloquent query 来实现导出
Maatwebsite\Excel\Concerns\FromView - 使用 (Blade) 模板来实现导出
Maatwebsite\Excel\Concerns\WithTitle - 设置工作簿或工作表标题
Maatwebsite\Excel\Concerns\WithHeadings - 添加表头
Maatwebsite\Excel\Concerns\WithMapping - 在写入文件前,格式化行
Maatwebsite\Excel\Concerns\WithColumnFormatting - 格式化列
Maatwebsite\Excel\Concerns\WithMultipleSheets - 开启多表单支持
Maatwebsite\Excel\Concerns\ShouldAutoSize - 在工作表中,自动调整列宽
Maatwebsite\Excel\Concerns\WithStrictNullComparison - 在测试单元格的 null 时,使用严格比较
Maatwebsite\Excel\Concerns\WithEvents - 注册事件,挂载到 'PhpSpreadsheet' 处理过程中
Maatwebsite\Excel\Concerns\WithCustomQuerySize - 允许 'Exportable' 实现 'FromQuery',来提供它们自己的自定义查询大小。
Maatwebsite\Excel\Concerns\WithCustomCsvSettings - 允许对指定的导出,运行自定义的 CSV 设置。
Maatwebsite\Excel\Concerns\WithCharts - 允许运行一个或多个 PhpSpreadsheet Chart 实例
Maatwebsite\Excel\Concerns\WithDrawings - 允许运行一个或多个 PhpSpreadsheet Drawing 实例
Maatwebsite\Excel\Concerns\WithCustomStartCell - 允许指定一个自定义起始单元格。注意:仅支持 'FromCollection' 导出
Traits:
Maatwebsite\Excel\Concerns\Exportable - 给导出类自身添加 'download()' 和 'store()' 方法
Maatwebsite\Excel\Concerns\RegistersEventListeners
13.扩展
有点复杂,不总结了,看文档
导入:
导出写的有点累了,有时间再完善...
你可能感兴趣的:(php,laravel框架)
mac os 10.9 mysql_MAC OSX 10.9 apache php mysql 环境配置
AY05
mac os 10.9 mysql
#终端内运行sudoapachectlstart#启动Apachesudoapachectlrestart#重启Apachesudoapachectlstop#停止Apache#配置Apachesudovi/private/etc/apache2/httpd.conf#将里面的这一行去掉前面的##LoadModulephp5_modulelibexec/apache2/libphp5.so#配置P
2022-01-13 天气晴 心情好
楠楠的qzone
今天主要是吧系统的一些功能给转移到另外一个系统上,然后遇到了一个很差劲的客户,不过呢我也是见多了不去计较了,因为什么样的人都有,平常心就好。晚上去吧thinkphp6的基础知识好好的看了一下,还是学到了很多好东西
SQL笔记纯干货
AI入门修炼
oracle 数据库 sql
软件:DataGrip2023.2.3,phpstudy_pro,MySQL8.0.12目录1.DDL语句(数据定义语句)1.1数据库操作语言1.2数据表操作语言2.DML语句(数据操作语言)2.1增删改2.2题2.3备份表3.DQL语句(数据查询语言)3.1查询操作3.2题一3.3题二4.多表详解4.1一对多4.2多对多5.多表查询6.窗口函数7.拓展:upsert8.sql注入攻击演示9.拆表
从0到1学PHP(二):PHP 基本语法:构建代码的基石
奔跑吧邓邓子
项目攻略 php 开发语言 基本语法
目录一、PHP标记与注释1.1PHP的起始和结束标记1.2单行注释和多行注释二、变量与数据类型2.1变量的定义、命名规则和使用方法2.2数据类型详解2.3数据类型的转换三、运算符与表达式3.1各类运算符的使用3.2表达式的组成和运算规则一、PHP标记与注释1.1PHP的起始和结束标记在PHP编程中,起始标记是极为重要的基础概念。当PHP解析器处理文件时,一旦识别到结束标记,标记之外的内容会被忽略。
我的ThinkPHP5框架开发22讲:从入门到实践的探索之旅
a1237567892
安全
我的ThinkPHP5框架开发22讲:从入门到实践的探索之旅在编程的世界里,框架就像是一座座灯塔,照亮着开发者前行的道路。而当我第一次接触到ThinkPHP5这个PHP框架时,它就像是我探索路上的那颗最亮的星。今天,我想和大家分享我的ThinkPHP5框架开发22讲,这是我从一个初学者到逐渐熟练的实践过程。第1讲:初识ThinkPHP5记得那是一个阳光明媚的周末,我在网上浏览PHP框架的资料时,偶
开启 PHP 初阶之旅:解锁高效入门之道
API_Zevin
php 开发语言 人工智能 大数据 前端 python 后端
在当今动态网页开发领域,PHP作为一门久经沙场的服务器端脚本语言,以其强大功能与广泛适用性,持续吸引着无数初学者踏入编程殿堂。若你决心攻克PHP,为Web开发世界添砖加瓦,一系列精准策略与实用方法将成为你加速入门的得力伙伴,引领你穿越初期懵懂,迈向熟练驾驭的新征程。一、筑牢基础:语法地基稳扎稳打PHP语法虽具灵活性,初学者仍需系统研习,构建扎实根基。从变量声明起步,领会PHP变量“$”符号前缀特色
面试宝典
phpdi
1.引用变量考点引用变量定义:用不同的名字访问同一个变量内容cow机制遍历时的引用处理unset只会取消引用,不会销毁内存空间php中对象默认是引用传递,若需要复制,则需要使用clone2.常量及数据类型define,const;php5.6以用const定义常量不支持表达式;7种false情况:0,0.0,'','0',[],null,false;精度丢失;获取客户端,服务端ip;与app交互$
从0到1学PHP(一):PHP 基础入门:开启后端开发之旅
目录一、PHP简介与发展历程1.1PHP定义与特点1.2在后端开发中的地位1.3发展阶段及重要版本更新二、PHP开发环境搭建2.1Windows系统下搭建步骤2.2Mac系统下搭建方法及常用工具2.3适合初学者的集成开发环境三、第一个PHP程序3.1编写"HelloWorld"程序3.2程序基本结构和执行过程3.3PHP代码的嵌入方式(在HTML中)一、PHP简介与发展历程1.1PHP定义与特点P
Ubuntu lamp
会飞的灰大狼
linux ubuntu
Ubuntulamp前言在Ubuntu安装lamp架构我们了解到lamp是完整的架构我们前面了解到了集合了Linux系统apacheMySQL和PHP语言的完整架构我们前面说了Centos7中编译安装lamp那么我们去说一下在Ubuntu中安装安装apache2apt直接安装apache2apt-yinstallapache2启动apache2systemctlstartapache2#测
网络安全第14集
不灭锦鲤
web安全 安全
前言:小迪安全14集,这集重点内容:0、什么是js渗透测试?在javascript中也存在变量和函数,存在可控变量和函数就有可能存在在漏洞,js开发的web应用和php、java开发的区别是,js能看得到的源代码,php看不到,但是风险就是未授权访问、配置信息泄露(加密算法、key秘钥等),源代码看得到,存在更多的url泄露,从而可能会出现未授权访问,从url,前提:web应用可以采用前端语言或后
常见的Bug管理工具有哪些?(如JIRA、Bugzilla、禅道等)
海姐软件测试
缺陷管理 bug jira
一、主流Bug管理工具分类及特点1.商业/企业级工具JIRA(Atlassian)特点:高度可定制,支持敏捷开发,集成CI/CD(如Jenkins)、Confluence等。适用场景:中大型团队,需复杂工作流和扩展生态。费用:按用户数收费,提供云版和本地部署。MantisBT特点:开源但支持商业服务,轻量级,适合中小团队。亮点:支持邮件通知、自定义字段。部署:需自建服务器(PHP+MySQL)。T
TP5中CURD那点事儿(五)
铁匠简记
模型关联一般说来模型关系包括一对一HAS_ONEBELONG_TO一对多HAS_MANYBELONG_TO多对多BELONGS_TO_MANY一对多一用户->多条评论Model层User模型Comment模型对应两张表名User.php中创建一个publiccomm()方法publicfunctioncomm(){//这是一个关系模型return$this->hasMany('Comment','
开源TTS
vanloswang
综合 TTS
Ekhohttp://sourceforge.net/projects/e-guidedog/files/Ekho/http://www.eguidedog.net/ekho.phpflitehttp://www.speech.cs.cmu.edu/flite/
PHP框架详解 - symfony框架
FLK_9090
php symfony android
引言随着互联网技术的迅猛发展,Web应用程序的复杂性也在逐年增加。为了应对这种复杂性,开发者们需要更加高效、灵活的工具来简化开发流程、提高代码质量和维护性。在众多PHP框架中,Symfony凭借其模块化设计、高性能和丰富的文档支持,成为了众多开发者的首选。Symfony框架由法国公司SensioLabs开发并于2005年首次发布。它的设计哲学是为开发者提供一套高效且灵活的工具,帮助他们快速构建复杂
博后
来自吐槽星
德州TheUniversityofTexasMDAndersonCancerCenterhttps://bbs.pku.edu.cn/v2/post-read.php?bid=41&threadid=16325339纽约MemorialSloanKetteringCancerCenterhttp://www.miccai.org/jobs-posting/memorial-sloan-ketter
JetBrains 2025 全家桶 IDEA、WebStorm、DataSpell、DataGrip、Pycharm、CLion、Rider、PhpStorm、GoLand
原文地址:JetBrains2025全家桶11合1含IDEA、PyCharm、DataGrip、WebStrom、GoLand、CLion、PhpStorm、DataSpell等JetBrains2025全家桶11合1包含:IDEA、WebStorm、DataSpell、DataGrip、Pycharm、RustRover、CLion、Rider、PhpStorm、RubyMine、GoLand。
kh dksl.php,php中取得URL的根域名的代码
克勒kk
kh dksl.php
php中取得URL的根域名的代码发布于2014-12-1310:14:08|121次阅读|评论:0|来源:网友投递PHP开源脚本语言PHP(外文名:HypertextPreprocessor,中文名:“超文本预处理器”)是一种通用开源脚本语言。语法吸收了C语言、Java和Perl的特点,入门门槛较低,易于学习,使用广泛,主要适用于Web开发领域。PHP的文件后缀名为php。本文为大家讲解的是php
SMTPman,wp mail smtp轻松配置的连接指南
SMTPman,wpmailsmtp轻松配置的连接指南很多站长会遇到默认发信失败、邮件被当垃圾邮件等问题,此时SMTPman,wpmailsmtp提供了稳定、安全的SMTP解决方案。选择SMTPman,wpmailsmtp,你将获得更高的邮件投递率和管理效率,让网站通讯变得更可靠。功能优势使用SMTPman,wpmailsmtp可以显著提升邮件发送成功率,因为默认的PHP邮件函数经常会被邮箱服务器
SMTPman,php smtp发送邮件配置教程解析!
tomcsdn31
SMTP 邮件服务器 邮件营销 邮件群发 营销邮件 邮件接口 SMTP服务器
SMTPman,phpsmtp发送邮件配置教程解析!不论是用户注册验证,还是系统通知,SMTPman,phpsmtp发送邮件都能保证邮件稳定送达。选择SMTPman,phpsmtp发送邮件的方式,可以有效提高送达率,且SMTPman,phpsmtp发送邮件配置灵活,适合各种环境。配置参数要成功实现SMTPman,phpsmtp发送邮件,必须配置正确的服务器参数。SMTPman,phpsmtp发送邮
防伪溯源一体化管理系统解决方案
春城一个人的莎士比亚
网站小程序软件定制开发 防伪溯源 防伪溯源小程序 防伪溯源解决方案 防伪溯源方法 防伪溯源软件 防伪溯源一物一码
防伪溯源一体化管理系统一款基于FA+ThinkPHP和Uniapp进行开发的多平台(微信小程序、H5网页)溯源、防伪、管理一体化独立系统,拥有强大的防伪码和溯源码双码生成功能(内置多种生成规则)、批量大量导出防伪和溯源码码数据、支持代理商管理端(团队管理、采购,邀请代理商、出库等功能)、支持招商经理管理端(可管理代理商团队,邀请代理商,数据统计,采购订单统计),支持出厂员端(出库、入库)、文章资讯
宝塔开放php openssl,[教程]Centos宝塔面板升级openssl增强nginxSSL安全性,openssl开启Http/2,Centos升级openssl...
weixin_39956353
宝塔开放php openssl
由于本站是采用的Centos7+宝塔面板搭建的LNMP环境,但是Centos7默认的openssl版本又太低,根据“漏洞参考这里:https://www.trustasia.com/OpenSSL-CVE-2016-2107-Padding-Oracle”查看这篇文章发现openssl低版本已经有一堆漏洞了,所以就萌生了升级openssl版本的想法。配置完后如图:openssl版本低会导致无论你怎
探索PHP中的六边形架构:代码实践与设计哲学
脑叔
六边形架构 PHP 领域服务 依赖规则 UseCase对象
探索PHP中的六边形架构:代码实践与设计哲学背景简介本文基于书籍《AppendixA:HexagonalArchitecturewithPHP》的第43章内容,探讨了在PHP中实现六边形架构的实践方法和背后的设计哲学。六边形架构作为一种软件设计模式,旨在帮助开发者创建易于编写、测试和维护的应用程序。六边形架构的实践在软件开发中,业务规则与基础设施之间应该有清晰的分界。六边形架构通过端口和适配器的概
【全开源】防伪溯源一体化管理系统源码(FastAdmin+ThinkPHP和Uniapp)
现任明教教主~
uni-app 微信小程序
一款基于FastAdmin+ThinkPHP和Uniapp进行开发的多平台(微信小程序、H5网页)溯源、防伪、管理一体化独立系统,拥有强大的防伪码和溯源码双码生成功能(内置多种生成规则)、批量大量导出防伪和溯源码码数据、支持代理商管理端(团队管理、采购,邀请代理商、出库等功能)、支持招商经理管理端(可管理代理商团队,邀请代理商,数据统计,采购订单统计),支持出厂员端(出库、入库)、文章资讯、自定义
【PHP开发900个实用技巧】779.PHP应用分层:告别面条代码的“结构化思维”
精通代码大仙
PHP开发900个实用技巧 php android 开发语言 程序员创富
【颠覆你的代码习惯】779招PHP分层秘籍:从"意大利面条"到"千层蛋糕"的华丽蜕变——结构化思维让你代码清爽如风!779.PHP应用分层:告别面条代码的'结构化思维'表现层:直面用户的'门面担当'业务层:核心逻辑的'指挥官'数据访问层:数据库的'翻译官'工具层:重复劳动的'终结者'痛点分析:用户交互和业务纠缠?解决:剥离HTML模板引擎痛点分析:业务逻辑到处复制?解决:封装可复用的Service
【PHP开发900个实用技巧】767.模板方法模式(Template Method):PHP算法骨架定义的“行为蓝图”
精通代码大仙
PHP开发900个实用技巧 php 装饰器模式 android 程序员创富
一招破解"复制粘贴炼狱"!模板方法模式让你在PHP中定义算法骨架,代码复用率飙升200%——这才是优雅开发的核心密码!PHP模板方法模式行为蓝图设计1.是什么?算法骨架初体验重复代码困境模式定义解析2.怎么做?实现步骤解析抽象类搭建钩子方法妙用3.实战:框架应用案例Laravel示例支付流程设计4.陷阱警报过度继承灾难违反里氏替换5.高级进化论策略模式组合回调函数变体目录:是什么?算法骨架初体验怎
【PHP开发900个实用技巧】765.代理模式(Proxy):PHP控制对象访问的“智能门卫”
精通代码大仙
PHP开发900个实用技巧 php 装饰器模式 android 程序员创富
PHP访问控制的“智能管家”:揭秘代理模式如何让对象访问更安全、更高效本文深度剖析PHP代理模式的实战技巧,直击对象访问中的3大痛点,通过真实代码案例教你打造轻量级“访问门卫”,解决性能损耗、权限失控、代码臃肿难题。掌握这招,让你的PHP对象像VIP一样拥有专属管家!代理模式(Proxy)”智能门卫1.代理模式是什么2.为啥需要看门人?3.PHP实战三剑客4.典型场景避坑指南结构:代理器+本体访问
【最新版】防伪溯源一体化管理系统+uniapp前端+搭建教程
fakaifa
fakaifa精品源码 uni-app 前端 小程序 php crmeb 防伪溯源一体化 防伪溯源系统
一.介绍防伪溯源一体化管理系统基于ThinkPHP和Uniapp进行开发的多平台(微信小程序、H5网页)溯源、防伪、管理一体化独立系统,拥有强大的防伪码和溯源码双码生成功能(内置多种生成规则)、批量大量导出防伪和溯源码码数据、支持代理商管理端(团队管理、采购,邀请代理商、出库等功能)、支持招商经理管理端(可管理代理商团队,邀请代理商,数据统计,采购订单统计),支持出厂员端(出库、入库)、文章资讯、
【PHP开发900个实用技巧】766.命令模式(Command):PHP请求封装的“行为胶囊”
精通代码大仙
PHP开发900个实用技巧 php 装饰器模式 android 程序员创富
封请求为命令,藏万物于胶囊!行为解耦的艺术让PHP开发告别千行if-else的黑暗时代,构建可逆可扩展的弹性系统。命令模式:行为胶囊设计1.什么是行为胶囊?2.PHP四大组件解析3.实战解耦案例4.为何值得封装?5.经典应用场景目录:什么是行为胶囊?——把请求变成对象的神奇魔法PHP四大组件解析——Invoker/Command/Receiver/Client四角关系实战解耦案例——订单系统如何告
如何入门搭建Laravel框架(教程)
随着互联网的发展,web开发的需求日益增长。在web开发领域,php语言一直扮演着重要的角色,而laravel就是php语言下一个备受欢迎的web开发框架。在本文中,我们将介绍如何入门搭建laravel框架。一、Laravel介绍Laravel是一个开源的PHPWeb框架,由TaylorOtwell在2011年创建。Laravel框架是基于MVC模式构建的,它提供了一系列灵活的工具和组件,能够帮助
PHP框架之Laravel框架
Laravel框架详解Laravel,作为一款广受欢迎的PHPWeb开发框架,以其优雅、简洁的语法和强大的功能特性,赢得了全球众多开发者的青睐。下面,我们将从Laravel的特点、应用案例以及具体的框架使用等方面进行详细解析。一、Laravel框架的特点优雅的语法Laravel框架采用简洁、优雅的语法,使得开发者能够编写出易于阅读和维护的代码。例如,通过EloquentORM,开发者可以方便地进行
log4j对象改变日志级别
3213213333332132
java log4j level log4j对象名称 日志级别
log4j对象改变日志级别可批量的改变所有级别,或是根据条件改变日志级别。
log4j配置文件:
log4j.rootLogger=ERROR,FILE,CONSOLE,EXECPTION
#log4j.appender.FILE=org.apache.log4j.RollingFileAppender
log4j.appender.FILE=org.apache.l
elk+redis 搭建nginx日志分析平台
ronin47
elasticsearch kibana logstash
elk+redis 搭建nginx日志分析平台
logstash,elasticsearch,kibana 怎么进行nginx的日志分析呢?首先,架构方面,nginx是有日志文件的,它的每个请求的状态等都有日志文件进行记录。其次,需要有个队 列,redis的l
Yii2设置时区
dcj3sjt126com
PHP timezone yii2
时区这东西,在开发的时候,你说重要吧,也还好,毕竟没它也能正常运行,你说不重要吧,那就纠结了。特别是linux系统,都TMD差上几小时,你能不痛苦吗?win还好一点。有一些常规方法,是大家目前都在采用的1、php.ini中的设置,这个就不谈了,2、程序中公用文件里设置,date_default_timezone_set一下时区3、或者。。。自己写时间处理函数,在遇到时间的时候,用这个函数处理(比较
js实现前台动态添加文本框,后台获取文本框内容
171815164
文本框
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://w
持续集成工具
g21121
持续集成
持续集成是什么?我们为什么需要持续集成?持续集成带来的好处是什么?什么样的项目需要持续集成?... 持续集成(Continuous integration ,简称CI),所谓集成可以理解为将互相依赖的工程或模块合并成一个能单独运行
数据结构哈希表(hash)总结
永夜-极光
数据结构
1.什么是hash
来源于百度百科:
Hash,一般翻译做“散列”,也有直接音译为“哈希”的,就是把任意长度的输入,通过散列算法,变换成固定长度的输出,该输出就是散列值。这种转换是一种压缩映射,也就是,散列值的空间通常远小于输入的空间,不同的输入可能会散列成相同的输出,所以不可能从散列值来唯一的确定输入值。简单的说就是一种将任意长度的消息压缩到某一固定长度的消息摘要的函数。
乱七八糟
程序员是怎么炼成的
eclipse中的jvm字节码查看插件地址:
http://andrei.gmxhome.de/eclipse/
安装该地址的outline 插件 后重启,打开window下的view下的bytecode视图
http://andrei.gmxhome.de/eclipse/
jvm博客:
http://yunshen0909.iteye.com/blog/2
职场人伤害了“上司” 怎样弥补
aijuans
职场
由于工作中的失误,或者平时不注意自己的言行“伤害”、“得罪”了自己的上司,怎么办呢?
在职业生涯中这种问题尽量不要发生。下面提供了一些解决问题的建议:
一、利用一些轻松的场合表示对他的尊重
即使是开明的上司也很注重自己的权威,都希望得到下属的尊重,所以当你与上司冲突后,最好让不愉快成为过去,你不妨在一些轻松的场合,比如会餐、联谊活动等,向上司问个好,敬下酒,表示你对对方的尊重,
深入浅出url编码
antonyup_2006
应用服务器 浏览器 servlet weblogic IE
出处:http://blog.csdn.net/yzhz 杨争
http://blog.csdn.net/yzhz/archive/2007/07/03/1676796.aspx
一、问题:
编码问题是JAVA初学者在web开发过程中经常会遇到问题,网上也有大量相关的
建表后创建表的约束关系和增加表的字段
百合不是茶
标的约束关系 增加表的字段
下面所有的操作都是在表建立后操作的,主要目的就是熟悉sql的约束,约束语句的万能公式
1,增加字段(student表中增加 姓名字段)
alter table 增加字段的表名 add 增加的字段名 增加字段的数据类型
alter table student add name varchar2(10);
&nb
Uploadify 3.2 参数属性、事件、方法函数详解
bijian1013
JavaScript uploadify
一.属性
属性名称
默认值
说明
auto
true
设置为true当选择文件后就直接上传了,为false需要点击上传按钮才上传。
buttonClass
”
按钮样式
buttonCursor
‘hand’
鼠标指针悬停在按钮上的样子
buttonImage
null
浏览按钮的图片的路
精通Oracle10编程SQL(16)使用LOB对象
bijian1013
oracle 数据库 plsql
/*
*使用LOB对象
*/
--LOB(Large Object)是专门用于处理大对象的一种数据类型,其所存放的数据长度可以达到4G字节
--CLOB/NCLOB用于存储大批量字符数据,BLOB用于存储大批量二进制数据,而BFILE则存储着指向OS文件的指针
/*
*综合实例
*/
--建立表空间
--#指定区尺寸为128k,如不指定,区尺寸默认为64k
CR
【Resin一】Resin服务器部署web应用
bit1129
resin
工作中,在Resin服务器上部署web应用,通常有如下三种方式:
配置多个web-app
配置多个http id
为每个应用配置一个propeties、xml以及sh脚本文件
配置多个web-app
在resin.xml中,可以为一个host配置多个web-app
<cluster id="app&q
red5简介及基础知识
白糖_
基础
简介
Red5的主要功能和Macromedia公司的FMS类似,提供基于Flash的流媒体服务的一款基于Java的开源流媒体服务器。它由Java语言编写,使用RTMP作为流媒体传输协议,这与FMS完全兼容。它具有流化FLV、MP3文件,实时录制客户端流为FLV文件,共享对象,实时视频播放、Remoting等功能。用Red5替换FMS后,客户端不用更改可正
angular.fromJson
boyitech
AngularJS AngularJS 官方API AngularJS API
angular.fromJson 描述: 把Json字符串转为对象 使用方法: angular.fromJson(json); 参数详解: Param Type Details json
string
JSON 字符串 返回值: 对象, 数组, 字符串 或者是一个数字 示例:
<!DOCTYPE HTML>
<h
java-颠倒一个句子中的词的顺序。比如: I am a student颠倒后变成:student a am I
bylijinnan
java
public class ReverseWords {
/**
* 题目:颠倒一个句子中的词的顺序。比如: I am a student颠倒后变成:student a am I.词以空格分隔。
* 要求:
* 1.实现速度最快,移动最少
* 2.不能使用String的方法如split,indexOf等等。
* 解答:两次翻转。
*/
publ
web实时通讯
Chen.H
Web 浏览器 socket 脚本
关于web实时通讯,做一些监控软件。
由web服务器组件从消息服务器订阅实时数据,并建立消息服务器到所述web服务器之间的连接,web浏览器利用从所述web服务器下载到web页面的客户端代理与web服务器组件之间的socket连接,建立web浏览器与web服务器之间的持久连接;利用所述客户端代理与web浏览器页面之间的信息交互实现页面本地更新,建立一条从消息服务器到web浏览器页面之间的消息通路
[基因与生物]远古生物的基因可以嫁接到现代生物基因组中吗?
comsci
生物
大家仅仅把我说的事情当作一个IT行业的笑话来听吧..没有其它更多的意思
如果我们把大自然看成是一位伟大的程序员,专门为地球上的生态系统编制基因代码,并创造出各种不同的生物来,那么6500万年前的程序员开发的代码,是否兼容现代派的程序员的代码和架构呢?
oracle 外部表
daizj
oracle 外部表 external tables
oracle外部表是只允许只读访问,不能进行DML操作,不能创建索引,可以对外部表进行的查询,连接,排序,创建视图和创建同义词操作。
you can select, join, or sort external table data. You can also create views and synonyms for external tables. Ho
aop相关的概念及配置
daysinsun
AOP
切面(Aspect):
通常在目标方法执行前后需要执行的方法(如事务、日志、权限),这些方法我们封装到一个类里面,这个类就叫切面。
连接点(joinpoint)
spring里面的连接点指需要切入的方法,通常这个joinpoint可以作为一个参数传入到切面的方法里面(非常有用的一个东西)。
通知(Advice)
通知就是切面里面方法的具体实现,分为前置、后置、最终、异常环
初一上学期难记忆单词背诵第二课
dcj3sjt126com
english word
middle 中间的,中级的
well 喔,那么;好吧
phone 电话,电话机
policeman 警察
ask 问
take 拿到;带到
address 地址
glad 高兴的,乐意的
why 为什么
China 中国
family 家庭
grandmother (外)祖母
grandfather (外)祖父
wife 妻子
husband 丈夫
da
Linux日志分析常用命令
dcj3sjt126com
linux log
1.查看文件内容
cat
-n 显示行号 2.分页显示
more
Enter 显示下一行
空格 显示下一页
F 显示下一屏
B 显示上一屏
less
/get 查询"get"字符串并高亮显示 3.显示文件尾
tail
-f 不退出持续显示
-n 显示文件最后n行 4.显示头文件
head
-n 显示文件开始n行 5.内容排序
sort
-n 按照
JSONP 原理分析
fantasy2005
JavaScript jsonp jsonp 跨域
转自 http://www.nowamagic.net/librarys/veda/detail/224
JavaScript是一种在Web开发中经常使用的前端动态脚本技术。在JavaScript中,有一个很重要的安全性限制,被称为“Same-Origin Policy”(同源策略)。这一策略对于JavaScript代码能够访问的页面内容做了很重要的限制,即JavaScript只能访问与包含它的
使用connect by进行级联查询
234390216
oracle 查询 父子 Connect by 级联
使用connect by进行级联查询
connect by可以用于级联查询,常用于对具有树状结构的记录查询某一节点的所有子孙节点或所有祖辈节点。
来看一个示例,现假设我们拥有一个菜单表t_menu,其中只有三个字段:
一个不错的能将HTML表格导出为excel,pdf等的jquery插件
jackyrong
jquery插件
发现一个老外写的不错的jquery插件,可以实现将HTML
表格导出为excel,pdf等格式,
地址在:
https://github.com/kayalshri/
下面看个例子,实现导出表格到excel,pdf
<html>
<head>
<title>Export html table to excel an
UI设计中我们为什么需要设计动效
lampcy
UI UI设计
关于Unity3D中的Shader的知识
首先先解释下Unity3D的Shader,Unity里面的Shaders是使用一种叫ShaderLab的语言编写的,它同微软的FX文件或者NVIDIA的CgFX有些类似。传统意义上的vertex shader和pixel shader还是使用标准的Cg/HLSL 编程语言编写的。因此Unity文档里面的Shader,都是指用ShaderLab编写的代码,
如何禁止页面缓存
nannan408
html jsp cache
禁止页面使用缓存~
------------------------------------------------
jsp:页面no cache:
response.setHeader("Pragma","No-cache");
response.setHeader("Cache-Control","no-cach
以代码的方式管理quartz定时任务的暂停、重启、删除、添加等
Everyday都不同
定时任务管理 spring-quartz
【前言】在项目的管理功能中,对定时任务的管理有时会很常见。因为我们不能指望只在配置文件中配置好定时任务就行了,因为如果要控制定时任务的 “暂停” 呢?暂停之后又要在某个时间点 “重启” 该定时任务呢?或者说直接 “删除” 该定时任务呢?要改变某定时任务的触发时间呢? “添加” 一个定时任务对于系统的使用者而言,是不太现实的,因为一个定时任务的处理逻辑他是不
EXT实例
tntxia
ext
(1) 增加一个按钮
JSP:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
Stri
数学学习在计算机研究领域的作用和重要性
xjnine
Math
最近一直有师弟师妹和朋友问我数学和研究的关系,研一要去学什么数学课。毕竟在清华,衡量一个研究生最重要的指标之一就是paper,而没有数学,是肯定上不了世界顶级的期刊和会议的,这在计算机学界尤其重要!你会发现,不论哪个领域有价值的东西,都一定离不开数学!在这样一个信息时代,当google已经让世界没有秘密的时候,一种卓越的数学思维,绝对可以成为你的核心竞争力. 无奈本人实在见地