laravel 發(fā)送郵件
- env中配置發(fā)送方的賬號密碼
MAIL_DRIVER=smtp
MAIL_HOST=smtp.qq.com
MAIL_PORT=465
MAIL_USERNAME=171913904@qq.com
MAIL_PASSWORD=授權(quán)碼在qq郵箱個人中心獲取
MAIL_ENCRYPTION=ssl
- 生成一個mail類
命令php73 artisan make:mail MailA
<?php
namespace App\Mail;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Mail\Mailable;
use Illuminate\Queue\SerializesModels;
class MailA extends Mailable
{
use Queueable, SerializesModels;
public $code;
/**
* Create a new message instance.
*
* @return void
*/
public function __construct($code)
{
//
$this->code = $code;
}
/**
* Build the message.
*
* @return $this
*/
public function build()
{
return $this->subject('郵件標(biāo)題')->from('171913904@qq.com')->view('emails.mail_a');
}
}
3 寫一個blade模板
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Email Verification Code</title>
<style>
body {
font-family: Arial, sans-serif;
background-color: #f4f4f4;
margin: 0;
padding: 0;
font-size: 16px;
line-height: 1.6;
}
.container {
max-width: 600px;
margin: 20px auto;
padding: 20px;
background-color: #fff;
border-radius: 5px;
box-shadow: 0 2px 5px rgba(0,0,0,0.1);
}
h1 {
font-size: 24px;
color: #333;
}
p {
margin-bottom: 20px;
color: #666;
}
strong {
font-weight: bold;
}
</style>
</head>
<body>
<div class="container">
<h1>您正在找回密碼</h1>
<p>Dear 用戶</p>
<p>您的驗證碼是: <strong>{{ $code }}</strong></p>
<p>如果非您本人操作可忽略酌儒。(請勿回復(fù)本郵件)</p>
</div>
</body>
</html>
4 發(fā)送
Mail::to('接受者的郵箱')->send(new MailA(666666));
php中的索引不連續(xù)的關(guān)聯(lián)數(shù)組 返給前端變成了對象
php中定義
const typeList =
[
10 => '首頁視頻',
20 => '教學(xué)視頻',
30 => '介紹視頻',
];
可以在js中處理 把對象轉(zhuǎn)成數(shù)組
state.typeList = Object.entries(data.typeList).map(([key, value]) => ({
key: parseInt(key, 10),
value,
}))
GPT對js代碼的解釋
詳細(xì)解釋
Object.entries:
Object.entries(typeListObject) 將對象的鍵值對轉(zhuǎn)換為一個二維數(shù)組滞时,其中每個元素是一個包含鍵和值的數(shù)組涯保。
例如官研,如果 typeListObject 是 { 1: '首頁視頻', 2: '教學(xué)視頻', 3: '介紹視頻' }
則 Object.entries(typeListObject) 生成 [[1, '首頁視頻'], [2, '教學(xué)視頻'], [3, '介紹視頻']]。
map:
map 方法用于遍歷數(shù)組中的每一個元素唯鸭,并對每一個元素執(zhí)行給定的函數(shù)盼忌,然后返回一個新數(shù)組再愈。
在這個例子中奠伪,map 函數(shù)接收一個回調(diào)函數(shù)作為參數(shù)跌帐。
箭頭函數(shù):
箭頭函數(shù)的語法是 ([key, value]) => ({ key: parseInt(key, 10), value })。
([key, value]) 是解構(gòu)賦值語法绊率,表示將數(shù)組的第一個元素解構(gòu)為 key谨敛,第二個元素解構(gòu)為 value。
parseInt(key, 10) 將字符串形式的鍵轉(zhuǎn)換為整數(shù)滤否。parseInt 函數(shù)的第二個參數(shù) 10 表示使用十進(jìn)制進(jìn)行解析佣盒。
({ key: parseInt(key, 10), value }) 返回一個新的對象,其鍵為 key 的整數(shù)形式顽聂,值為原始值。
為什么箭頭函數(shù) => 后要用括號 ()盯仪?
當(dāng)你需要返回一個對象字面量時紊搪,必須用括號將對象括起來。
這是因為在箭頭函數(shù)的語法中全景,大括號 {} 通常被解析為函數(shù)體的開始耀石,而不是對象字面量的開始。
通過使用括號 ()爸黄,可以明確告訴 JavaScript 引擎這里返回的是一個對象字面量滞伟,而不是一個函數(shù)體。
示例
需要括號的情況
如果你直接寫對象字面量而不使用括號炕贵,JavaScript 會誤解你的意圖:
javascript
const getObject = () => { key: 'value' }; // 這樣寫是錯誤的
上面的代碼會拋出一個錯誤梆奈,因為 JavaScript 會將大括號 {} 視為函數(shù)體的開始,而不是對象字面量称开。
正確的做法是使用括號將對象字面量括起來:
javascript
const getObject = () => ({ key: 'value' });
這樣亩钟,JavaScript 就能正確地解析并返回一個對象字面量乓梨。
獲取本年的12個月
<?php
// 獲取當(dāng)前年份
$currentYear = date("Y");
// 初始化一個數(shù)組來存儲12個月的時間范圍
$monthRanges = array();
// 循環(huán)12個月
for ($i = 1; $i <= 12; $i++) {
// 獲取當(dāng)前月份的第一天
$startDate = date("Y-m-01", strtotime("$currentYear-$i-01"));
// 獲取當(dāng)前月份的最后一天
$endDate = date("Y-m-t", strtotime("$currentYear-$i-01"));
// 將時間范圍添加到數(shù)組中
$monthRanges[] = array(
"start_date" => $startDate,
"end_date" => $endDate
);
}
dd($monthRanges);
php 安裝擴展
php有兩個配置文件 , 以當(dāng)前docker環(huán)境為例 ,安裝的php版本是7.3.32
php pecl安裝擴展
去網(wǎng)站搜索想要的擴展 https://pecl.php.net/
找到合適的版本 下載下來
linux 系統(tǒng)下載擴展
cd ~
wget https://pecl.php.net/get/gmagick-2.0.5RC1.tgz
不用解壓,直接使用pecl命令安裝
pecl install gmagick-2.0.5RC1.tgz
出現(xiàn)
lease provide the prefix of GraphicsMagick installation [autodetect] :
直接回車
后續(xù)報錯自行百度
php7.3 zip擴展
composer安裝三方包時報錯phpoffice/phpspreadsheet 1.10.1 requires ext-zip *
zip擴展可以通過編譯 ,php7.3為例 zip的擴展源碼位置在/www/server/php/73/src/ext/zip
目錄
編譯完成后得到文件
/www/server/php/73/lib/php/extensions/no-debug-non-zts-20180731/zip.so
在php.ini和php-cli.ini中分別加入
extension = /www/server/php/73/lib/php/extensions/no-debug-non-zts-20180731/zip.so
注意:
用composer安裝三方擴展時 ,使用的是php-cli.ini
,
處理http請求的php-fpm的work進(jìn)程使用的是php.ini
替換/刪除 mysql某字段中的指定字符
update 表名 set 字段名 = replace(字段名,'被替換的字符','替換為')
update member set headpic = REPLACE(headpic,':33380','')
替換為空字符 ,則刪除了字段中的被替換的字符
model時間格式化
解決laravel數(shù)據(jù)庫取出的數(shù)據(jù),created_at,updated_at字段,時間格式問題
/**
* 格式化時間
* @param \DateTimeInterface $date
* zhangyi [2022-12-12]
* @return string
*/
protected function serializeDate(\DateTimeInterface $date)
{
return $date->format('Y-m-d H:i:s');
}
生成遷移文件
php artisan make:migration create_table_demo
執(zhí)行單個遷移
php artisan migrate --path=database\migrations\2021_10_13_153021_create_jobs_table.php
回滾一步遷移
php artisan migrate:rollback --step=1
生成repository
php artisan core:model --table=users --name=User
php artisan core:model --table=
清除視圖緩存
php artisan view:clear
創(chuàng)建命令行腳本
php artisan make:command 自定義名稱(生成的文件名)
在app->console->commands目錄內(nèi)找到腳本文件 ,修改屬性 $signature = '自定義名稱'(腳本啟動名稱)
,在handle方法內(nèi)寫邏輯
啟動腳本
php artisan 自定義名稱($signature)
composer
更新指定的包composer u 包名
composer autoload使用
自己寫的vendor包 ,應(yīng)用到項目后 如何自動加載
- 類文件需要聲明命名空間,并且根據(jù)規(guī)范 ,目錄結(jié)構(gòu)與命名控件對應(yīng)
- 在項目的composer.json中加入
autoload
相關(guān)內(nèi)容 ,此處使用的psr-4
規(guī)范
"autoload": { "psr-4": { "utils\\": "./" } }
解釋:
"psr-4"
規(guī)范,具體百度
"utils\\"
自定義的頂級命名空間
"./"
對應(yīng)的類文件路徑 - 命令行執(zhí)行
composer dumpautoload -o
更新自動加載文件
4.測試 可以正常執(zhí)行
說明:
此處測試需要手動require_once __DIR__."/vendor/autoload.php";
一般框架的index.php
文件已經(jīng)引入了autoload.php
,所以框架項目中只需通過composer安裝三方包 ,就能直接用.
重新生成autoload
composer dumpautoload
三方包網(wǎng)站
composer更換鏡像
查看鏡像
全局
composer config -l -g
當(dāng)前項目
composer config -l
更換當(dāng)前項目鏡像
全局
composer config -g repo.packagist composer ${鏡像地址}
當(dāng)前項目
composer config repo.packagist composer ${鏡像地址}
| 阿里云 Composer 鏡像 | https://mirrors.aliyun.com/composer/ | 阿里云 | 96 秒 | 推薦 |
| 騰訊云 Composer 鏡像 | https://mirrors.cloud.tencent.com/composer/ | 騰訊云 | 24 小時 | - |
| PHP 國內(nèi) Composer 鏡像 | https://packagist.phpcomposer.com | 仁潤股份 | 24 小時 | 不穩(wěn)定 |
| 華為云 Composer 鏡像 | https://repo.huaweicloud.com/repository/php/ | 華為云 | 未知 | 未知 |
| php.cnpkg.org Composer 鏡像 | https://php.cnpkg.org | 安暢網(wǎng)絡(luò) | 60 秒 | - |
composer三方包的搜索網(wǎng)站
卡死
安裝三方包時卡在Updating dependencies (including require-dev)
一般都是鏡像問題 ,composer官網(wǎng)給的鏡像不能用 ,換成阿里云的鏡像
composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/
切換鏡像無效
composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/
不一定能切換成功
在項目根目錄下找到composer.json
文件 ,切換成功應(yīng)該是
或者直接把下邊代碼粘貼到
composer.json
文件
"repositories": {
"packagist": {
"type": "composer",
"url": "https://mirrors.aliyun.com/composer/"
}
}
內(nèi)存溢出
Fatal error: Allowed memory size of 1610612736 bytes exhausted (tried to allocate 67108872 bytes) in phar://C:/ProgramData/ComposerSetup/bin/composer.phar/src/Composer/DependencyResolver/RuleSet.php on line 84
官方有解決方案
注意 即使配置了composer全局環(huán)境變量也不行 必須用composer.phar
文件絕對路徑
php -d memory_limit=-1 ${composer.phar 絕對路徑} require ${包名}
如:
php -d memory_limit=-1 C:\ProgramData\ComposerSetup\bin\composer.phar require phpoffice/phpspreadsheet
laravel創(chuàng)建命令行腳本
php artisan make:command 自定義名稱(生成的文件名)
在app->console->commands目錄內(nèi)找到腳本文件 ,修改屬性 $signature = '自定義名稱'(腳本啟動名稱)
,在handle方法內(nèi)寫邏輯
啟動腳本
php artisan 自定義名稱($signature)
phpstorm多行變成一行
有時候拿到一部分?jǐn)?shù)據(jù)ID ,需要在數(shù)據(jù)庫進(jìn)行批量處理 .
比如對下邊的用戶ID進(jìn)行封號
解決
在phpstorm中新建一個普通文本文件 , 把excel中的一列粘貼進(jìn)去
1. Ctrl + a 全選
2. Ctrl + Shift + j 多行變成一行,空格分割
3. Ctrl + r 替換 空格為想要的字符
完成
phpspreadsheet 導(dǎo)出微信昵稱數(shù)據(jù)丟失
遇到昵稱帶表情的用戶數(shù)據(jù)后 ,接下來的很多表格都變成了空白 .實際上數(shù)據(jù)是存在的
解決方法 ,生成的excel文件后綴 ,由xsl 改為更高版本的 xslx ,便可恢復(fù)正常
判斷數(shù)組值是否存在
經(jīng)常需要判斷前端傳過來的篩選參數(shù), 如果存在有效值 sql中 就增加篩選條件
判斷前端是否傳了有效參數(shù) ,當(dāng)參數(shù)是數(shù)字 0 時 篩選狀態(tài)為0的數(shù)據(jù) 經(jīng)常出現(xiàn)問題
$arr['status'] = 0;
判斷數(shù)組$arr
中是否有某個參數(shù)
返回false
$arr['key'] = null
$arr['key'] = false
$arr['key'] = ''
$arr['未定義索引']
返回true
$arr['key'] = 0
$arr['key'] = '0'
$arr['key'] = 'null'
$arr['key'] = 'false'
/**
* 判斷數(shù)組中是否存在某個有效參數(shù)
* @param array $arr 數(shù)組
* @param string $key 索引
* @return bool
*/
function hasVal($arr,$key){
if (!is_array($arr)) return false;
if (array_key_exists($key , $arr)){
if (
$arr[$key] !== '' &&
$arr[$key] !== false &&
$arr[$key] !== null
){
return true;
}
}
return false;
}
找出一維數(shù)組中重復(fù)的值
通過in_array()
判斷
$temp = [];
foreach ( $list as $val ) {
if ( !in_array($val , $temp) ) {
$temp[] = $val;
continue;
}
throw new \Exception("值:{$val}重復(fù)");
}