2019年10月
2019-10-8 周二
以下两种写法可以等效
return isset($modifiedNames[$this->modified]) ? $modifiedNames[$this->modified] : $this->modified; return $modifiedNames[$this->modified] ?? $this->modified;
2019-10-9 周三
Kernel
执行
php artisan test
2019-10-10 周四
添加索引
$table->index(['retrieved_at', 'approved_at'], 'index_idx'); $table->index(['deleted_at', 'res_type_id'], 'idx_deletedat_restypeid');
2019-10-11 周五
小心使用 artisan
命令,防止清空数据库
php artisan migrate:fresh php artisan migrate:fresh --seed
修改完配置文件需要及时执行
php artisan config:clear
今天误把集成环境数据库清空了,在 .ENV
文件中修改过后,一定要刷新设置
2019-10-12 周六
添加了定时任务的监控后出现了同一任务多次报错发送邮件的问题,现在将错误的文件名放到 Redis
中记录,过期时间为 1天
// 限制同一文件一天内只发送一次邮件 if (!Cache::has('exception:'.$e->getFile())) { dispatch(new SendEmail('email.exception', $data, $emailAddresses, $subject)); $expiresAt = Carbon::now()->addDay(1); // 键值过期时间 Cache::put('exception:'.$e->getFile(), 'exception', $expiresAt); }
2019-10-14 周一
因为 Horizon 无法在 Windows 中安装,所以安装新的依赖时需要加上 --ignore-platform-reqs
:
composer install --ignore-platform-reqs
在数据库中存储为 decimal
类型的数据,记录其历史时需要标记为 float
才行:
<?php namespace App\Models\Records; class Deposit extends BaseRecords { public function recordMappings(): array { return [ 'will_refund_deposit' => $this->mapping('备退押金', 'float'), 'refunded_deposit' => $this->mapping('已退押金', 'float'), 'deposit_status' => $this->mapping('押金状态', 'integer')->customDisplayData($this->depositStatusDisplay()), 'deposit_refund_type' => $this->mapping('退回方式', 'integer')->customDisplayData($this->depositRefundTypeDisplay()), 'deposit_refund_payment_subject' => $this->mapping('出款主体', 'integer')->customDisplayData($this->depositRefundPaymentSubjectDisplay()), 'deposit_refund_user_name' => $this->mapping('用户名称', 'string'), 'deposit_remark' => $this->mapping('备注', 'string'), ]; } protected function depositStatusDisplay() { return function ($value) { $depositStatuses = [ 0 => '不退押金', 1 => '未处理', 2 => '已退押金', 3 => '等待确认', ]; return $depositStatuses[$value] ?? $value; }; } protected function depositRefundTypeDisplay() { return function ($value) { $depositRefundTypes = [ 1 => '现金', 2 => '银行卡', 3 => '微信', 4 => '支付宝', 5 => '对公转账', ]; return $depositRefundTypes[$value] ?? $value; }; } }
2019-10-15 周二
引入 iseed
composer require orangehill/iseed --ignore-platform-reqs
2019-10-16 周三
iseed 的使用方法
php artisan iseed [{TABLE NAME},{TABLE NAME},{TABLE NAME}]
指定输出的种子文件的前缀名:--classnameprefix=Customized
覆盖现有的种子文件名:--force
清除app/database/seeds/DatabaseSeeder.php
:--clean
指定数据库连接名称:--database=mysql2
指定生成的种子数的最大条目数:--max=10
指定插入查询的数据块大小:--chunksize=100
指定最大条目数的排列依据:--orderby=id
指定最大条目数的排列顺序:--direction=desc
指定需要排除的列:--exclude=id,created_at,updated_at
指定在播种之前需要触发的事件名称: --prerun=someUserEvent,someGroupEvent
指定在播种之后需要触发的事件名称:--postrun=someUserEvent,someGroupEvent
将种子生成为非索引数组:--noindex
php artisan iseed field_order_item_deductions,field_order_item_relations,field_order_item_scopes,field_order_item_shifts,field_order_items,field_order_receivable_shifts,field_order_receivables,field_order_receivables,field_orders --max=10 --orderby=id --direction=desc php artisan iseed invoice_infos,invoice_orders,invoice_title_infos,invoices --max=10 --orderby=id --direction=desc php artisan iseed task_attachments,task_records,task_relations,task_types,tasks --max=10 --orderby=id --direction=desc
2019-10-17 周四
表名称可以指定
protected $table = 'consignee_addresses';
2019-10-18 周五
多个数据库连接指定
在 ENV
文件中:
DB_CONNECTION=mysql DB_HOST=127.0.0.1 DB_PORT=3306 DB_DATABASE=database DB_USERNAME=root DB_PASSWORD= DB_HOST_CENTER=127.0.0.1 DB_PORT_CENTER=3306 DB_DATABASE_CENTER=database DB_USERNAME_CENTER=root DB_PASSWORD_CENTER=
在 config
文件中
'mysql' => [ 'driver' => 'mysql', 'host' => env('DB_HOST', 'localhost'), 'port' => env('DB_PORT', '3306'), 'database' => env('DB_DATABASE', 'forge'), 'username' => env('DB_USERNAME', 'forge'), 'password' => env('DB_PASSWORD', ''), 'charset' => 'utf8', 'collation' => 'utf8_unicode_ci', 'prefix' => '', 'strict' => false, 'engine' => null, ], 'data_center' => [ 'driver' => 'mysql', 'host' => env('DB_HOST_CENTER', 'localhost'), 'port' => env('DB_PORT_CENTER', '3306'), 'database' => env('DB_DATABASE_CENTER', 'forge'), 'username' => env('DB_USERNAME_CENTER', 'forge'), 'password' => env('DB_PASSWORD_CENTER', ''), 'charset' => 'utf8', 'collation' => 'utf8_unicode_ci', 'prefix' => '', 'strict' => false, 'engine' => null, ],
模型中指定 $connection
即可:
class UserModel extends Model { // 指定数据库'dadtabase_center'中的users表 protected $connection = 'data_center'; protected $table = "users"; }
2019-10-21 周一
Aritisan 激励命令
执行以下命令会随机生成一句激励的名人名言
php artisan inspire
实现方法如下:
https://github.com/laravel/framework/blob/6.x/src/Illuminate/Foundation/Inspiring.php
<?php namespace Illuminate\Foundation; use Illuminate\Support\Collection; class Inspiring { /** * Get an inspiring quote. * Taylor & Dayle made this commit from Jungfraujoch. (11,333 ft.) * May McGinnis always control the board. #LaraconUS2015 * RIP Charlie - Feb 6, 2018 * @return string */ public static function quote() { return Collection::make([ 'When there is no desire, all things are at peace. - Laozi', 'Simplicity is the ultimate sophistication. - Leonardo da Vinci', 'Simplicity is the essence of happiness. - Cedric Bledsoe', 'Smile, breathe, and go slowly. - Thich Nhat Hanh', 'Simplicity is an acquired taste. - Katharine Gerould', 'Well begun is half done. - Aristotle', 'He who is contented is rich. - Laozi', 'Very little is needed to make a happy life. - Marcus Antoninus', 'It is quality rather than quantity that matters. - Lucius Annaeus Seneca', 'Genius is one percent inspiration and ninety-nine percent perspiration. - Thomas Edison', 'Computer science is no more about computers than astronomy is about telescopes. - Edsger Dijkstra', 'It always seems impossible until it is done. - Nelson Mandela', 'Act only according to that maxim whereby you can, at the same time, will that it should become a universal law. - Immanuel Kant', ])->random(); } }
2019-10-22 周二
IIS 服务器配置 Laravel ,在 public
目录下添加 web.config
文件:
<?xml version="1.0" encoding="UTF-8"?> <configuration> <system.webServer> <rewrite> <rules> <rule name="HTTP to HTTPS" enabled="true" stopProcessing="true"> <match url="(.*)" /> <conditions logicalGrouping="MatchAll" trackAllCaptures="false"> <add input="{HTTPS}" pattern="OFF" /> <add input="{HTTPS_HOST}" pattern="^(localhost)" negate="true" /> </conditions> <action type="Redirect" url="https://{HTTP_HOST}:443/{R:1}" redirectType="Found" /> </rule> <rule name="Rule URL" stopProcessing="true"> <match url="^(.*)/$" ignoreCase="false" /> <action type="Redirect" redirectType="Permanent" url="/{R:1}" /> </rule> <rule name="Rule FILE" stopProcessing="true"> <match url="^" ignoreCase="false" /> <conditions> <add input="{REQUEST_FILENAME}" matchType="IsDirectory" ignoreCase="false" negate="true" /> <add input="{REQUEST_FILENAME}" matchType="IsFile" ignoreCase="false" negate="true" /> </conditions> <action type="Rewrite" url="index.php" /> </rule> </rules> </rewrite> </system.webServer> </configuration>
PHP中开启的插件(这里列出的可能不全):
extension=php_mysqli.dll extension=php_mbstring.dll extension=php_gd2.dll extension=php_gettext.dll extension=php_curl.dll extension=php_exif.dll extension=php_xmlrpc.dll extension=php_openssl.dll extension=php_soap.dll extension=php_pdo_mysql.dll extension=php_pdo_sqlite.dll extension=php_imap.dll extension=php_tidy.dll extension=php_fileinfo.dll extension=php_redis.dll
执行 composer install
2019-10-23 周三
Composer 指定镜像
"repositories": { "packagist": { "type": "composer", "url": "https://mirrors.aliyun.com/composer/" } }
composer require laravel/ui
2019-10-24 周四
NPM 相关
npm install --save-dev cross-env --no-bin-links npm install webpack --save (不需要)
"dev": "node node_modules/cross-env/dist/bin/cross-env.js NODE_ENV=development node_modules/webpack/bin/webpack.js --progress --hide-modules --config=node_modules/laravel-mix/setup/webpack.config.js", "watch": "node node_modules/cross-env/dist/bin/cross-env.js NODE_ENV=development node_modules/webpack/bin/webpack.js --watch --progress --hide-modules --config=node_modules/laravel-mix/setup/webpack.config.js", "watch-poll": "node node_modules/cross-env/dist/bin/cross-env.js NODE_ENV=development node_modules/webpack/bin/webpack.js --watch --watch-poll --progress --hide-modules --config=node_modules/laravel-mix/setup/webpack.config.js", "hot": "node node_modules/cross-env/dist/bin/cross-env.js NODE_ENV=development node_modules/webpack-dev-server/bin/webpack-dev-server.js --inline --hot --config=node_modules/laravel-mix/setup/webpack.config.js", "production": "node node_modules/cross-env/dist/bin/cross-env.js NODE_ENV=production node_modules/webpack/bin/webpack.js --progress --hide-modules --config=node_modules/laravel-mix/setup/webpack.config.js"
npm install --no-bin-links npm run prod
2019-10-25 周五
Laravel 相关权限包安装:
composer require spatie/laravel-permission
基本操作
// 向用户添加权限 $user->givePermissionTo('edit articles'); // 通过角色添加权限 $user->assignRole('writer'); // 给予权限 $role->givePermissionTo('edit articles'); // 判断是否有权限 $user->can('edit articles');
php artisan vendor:publish --provider="Spatie\Permission\PermissionServiceProvider" --tag="migrations" php artisan vendor:publish --provider="Spatie\Permission\PermissionServiceProvider" --tag="config"
Dingo API 安装
composer require dingo/api
php artisan vendor:publish --provider="Dingo\Api\Provider\LaravelServiceProvider"
2019-10-26 周六
开启本地自带的服务:
php artisan serve
2019-10-28 周一
正则表达式
8-16位数字+字母
$a = '/^(?![0-9]+$)(?![a-zA-Z]+$)[0-9A-Za-z]{8,16}$/'; $str = "test123456"; return preg_match($a, $str);
2019-10-29 周二
检查用户密码是否匹配:
Hash::check($old_password, $user->password);
生成一个 crypt
密码:
Hash::make($password);
2019-10-30 周三
新建项目
在项目中,你可以存放文件(存储库),计划工作(问题)和发布文档(维基)等等。
对于空白项目,从模板或在导入时,都启用了所有功能,但是之后可以在项目设置中将其禁用。
有关其他页面模板以及如何安装它们的信息,可以在页面入门指南中找到。
提示: 你还可以从命令行创建项目。 显示命令
2019-10-31 周四
匿名函数的使用
如下:
<?php $array = array(1, 2, 3, 4); // array_walk 使用用户自定义函数对数组中的每个元素做回调处理 array_walk($array, function($value) { // 输出1234 echo $value; }); ?>
若要在父作用域中继承变量则使用 use 关键词来继承作用域外的变量,例如:
<?php function getCounter() { $i = 0; return function() use ($i) { Echo ++$i; }; } $counter = getCounter(); $counter(); // 输出1 $counter(); // 输出1 ?>
若要改变上层变量的值,则需要通过引用的方式传递 (&$i)