laravel 测试模块学习
学习下 larave 内置的测试模块。
当你想把一些东西写到 print 语句或者调试表达式中时,别这么做,将其写成一个测试来代替。 –Martin Fowler
最开始看到的关于 laravel 测试的信息是借助模型工厂来生成测试数据,今天查完资料发现,这只是测试中的一小部分。
laravel 内置了 PHPUnit 来做测试,并且已经做好了配置文件,还提供了一些便利的辅助函数,可以更直观的测试程序。
在 laravel 的项目中,包含一个 tests 目录,这个目录又有两个子目录:Feature 和 Unit 分别用来做功能测试和单元测试。
功能测试用于测试较大区块的代码,包括若干组件之间的交互,甚至一个完整的 HTTP 请求。
单元测试用于小的 、相互隔离的代码。
配置可以使用默认的配置,也可以创建一个 .env.testing 文件,在运行测试或执行带有 --env=testing 开关的 Artisan 命令时覆盖 .env 文件中的环境变量。
创建 & 运行测试运行 artisan 生成测试用例:
12345// 在 Feature 目录 ...
深度学习 -- 基于 keras 的手写数字识别示例
MNIST 是 keras 中一个入门级的计算机视觉数据集,这个数据集包含各种各样的手写数字图片,其中包含 60000 张训练图像和 10000 张测试图像。
是解决手写数字分类问题的经典数据集,可以看做是深度学习的 ‘Hello World’。
下载数据123from keras.datasets import mnist(train_images, train_labels), (test_images, test_labels) = mnist.load_data()
这两行代码需要先运行,下载数据集。
下载过程会失败,多试几次,不需要翻墙。
train_images 和 train_labels 为训练集, 分别为图片数据和标签数据。模型将从这些数据中进行学习。
然后在测试集: test_images 和 test_labels 上对模型进行测试。
构建网络12345from keras import modelsfrom keras import layersnetwork = models.Sequential()network.add(layers.Dense ...
laravel 队列学习
学习下 laravel 的队列系统。
队列的目的是将耗时的任务延时处理,比如发送邮件,从而大幅度缩短 Web 请求和相应的时间。
常用的队列后台有: Beanstalk,Amazon SQS,Redis 等。
配置laravel 为多种队列服务做了统一的API,在配置文件 config/queue.php 中可以找到每种队列驱动的配置。
其中每种驱动都有一个默认的 queue 属性,用来存放使用时没有显示定义队列的任务。
12345// 分发到默认队列Job::dispatch();// 分发到 emails 队列Job::dispatch()->onQueue('emails');
在项目的配置文件中,可以指定驱动,老版本中为 QUEUE_DRIVER,新版本中为QUEUE_CONNECTION , 驱动默认为 sync,这是一个本地的同步驱动,方便调试队列里的任务。
先以 redis 为例做一个邮件发送队列。
因为 laravel 的 redis 默认使用了 predis,所以先装下扩展:
1composer require 'predis ...
laravel 事件系统学习
学习下 laravel 的事件系统。
Laravel 的事件提供了一个简单的观察者实现,能够订阅和监听应用中发生的各种事件。
先以一个登陆日志来作为例子开始事件的学习吧。
注册事件 && 监听器在 app\Providers\EventServiceProvider.php 中,添加以下内容:
12345678protected $listen = [ Registered::class => [ SendEmailVerificationNotification::class, ], 'App\Events\LoginEvent' => [ 'App\Listeners\LoginListener' ]];
然后运行命令,生成事件和监听器:
1php artisan event:generate
运行结束后,事件和监听器都会被自动创建好。
在监听中打个 log: info(‘user login event’)
然后找个控制器触发事件。
event(new ...
laradock 中 php5.6 连接 mysql 报错解决
laradock 中 php 5.6 连接 mysql 报错的解决方法。
之前弄的是默认版本的 php 7.2 和 mysql 8,配置好以后一直都能正常使用。
最近因为需要切换 php 版本,突然发现切换后连接 mysql 时无法识别 host。
emmmm……,最开始还以为是 php 的锅,各种重新 build,无果,最后在 github 上找到别人发出来的解决办法:
rm -rf ~/.laradock/data/mysql删除老版本的数据
docker-compose build mysql重新构建 mysql
进入 mysql 容器mysql -uroot -prootALTER USER root IDENTIFIED WITH mysql_native_password BY ‘root’;exit;
到这里也就可以了。
有这个问题是因为 8 和 5.7 的配置不一样,不清掉老数据的话会引起报错,一有请求去连接 mysql 马上就宕机。
Laravel 服务容器
在 Laravel 生命周期中,我们了解到框架运行过程中,会通过创建应用实例来完成很多事情,这个应用实例,也就是我们今天的主角,服务容器。
Laravel 的服务容器,是用于管理类的依赖和执行依赖注入的工具。
依赖注入 DI开始之前,需要我们先了解一下,什么是依赖注入。
简单来说,就是将类的依赖通过参数或其他方式注入。
比如:
12345678910111213141516171819202122232425262728293031323334interface Storage{ public function set($key, $value); public function get($key);}class SessionStorage implements Storage{ function __construct($cookieName='PHPSESSID'){ session_name($cookieName); session_start(); } ...
Laravel 生命周期
Laravel 的生命周期主要分为四个阶段:
加载依赖
创建应用实例
接收请求并响应
请求结束进行回调
这四个阶段都在 index.php 中完成:
1234567891011121314151617181920<?php// 加载依赖require __DIR__.'/../vendor/autoload.php';// 创建应用实例$app = require_once __DIR__.'/../bootstrap/app.php';// 实例化 HTTP 内核$kernel = $app->make(Illuminate\Contracts\Http\Kernel::class);// 接收请求,生成响应$response = $kernel->handle( $request = Illuminate\Http\Request::capture());// 发送响应$response->send();// 请求结束,进行回调$kernel->terminate($request, $respo ...
使用 laravel mix 编译资源
学习下如何在 laravel 框架中,用 laravel mix 编译前端资源。
使用本次操作的环境依然是 laradock,如果没用特殊说明,以后应该默认 laradock。
workspace 容器中,已经提前装好了 node 环境,而在项目根目录中,package.json 和 webpack.mix.js 也已经为我们预设好了,所以laravel 项目建好后,直接在根目录安装即可:
1npm install
在 webpack.mix.js 中,已经加载了两个默认的文件:
12mix.js('resources/js/app.js', 'public/js') .sass('resources/sass/app.scss', 'public/css');
我们只需要把自己的资源文件,按照同样的格式写入进去,然后开始运行,就可以生成编译后的资源了。
虽然示例中只写了 sass 一种样式文件,但是其实可以支持常见的以及不常见的很多中格式,只需要调用对应的接口即可。而且还可以把多个资源文件合 ...
laravel 内置 vue 的使用
从 5.3 版本开始,用 Vue.js 作为默认 JavaScript 前端框架。
从刚接触 laravel 到现在已经又过去了四个版本,种种原因,还是一直没能用上 vue.js 来做开发,现在刚好因为公司项目用到了 vue,对 vue 有了一定的了解,所以顺便就研究下 vue 在 laravel 中的使用吧。
安装laravel操作均在 laradock 的环境中进行。进入 workspace 容器,执行以下命令安装 laravel
1composer create-project laravel/laravel study
配置mysqldocker-compose up -d nginx mysql phpmyadmin 启动容器配置 nginx、hosts 并重启 nginx进入 mysql 容器执行以下命令:
123456mysql -uroot -prootALTER USER root IDENTIFIED WITH mysql_native_password BY 'PASSWORD';exit;exit
访问 phpmyadmin: loc ...
travis-ci 可持续集成测试
给博客添加了 travis ci 可持续集成,以后本地可以不装 node 环境了。
操作过程:github 账号 登陆 travis ci登陆后把博客项目的开关打开。
博客项目创建分支把博客项目,即 .io 的那个项目拉到本地,创建一个新的分支 hexo:
123456git checkout -b hexogit rm -rf * #删除仓库中的文件,可能本地的文件还存有,则需要使用 rm -rf 命令git commit -m "清空文件夹" #提交删除信息git push origin hexo:hexo #将删除的信息推送到远程仓库
把博客源码放入 hexo 分支的文件夹中,然后再新建 .travis.yml:
123456789101112131415161718192021222324252627282930313233343536373839404142434445# 指定语言环境language: node_js# 指定需要sudo权限sudo: required# 指定node_js版本node_js: - 7.9.0# 指定缓存模 ...