Author name: 哈呜

SwiftUI 入门

SwiftUI  的官方入门教程:Creating and Combining Views 不得不说我觉得这个教程看起来很好但是实际真不咋滴,只说怎么用,不说为什么这么用,根本不考虑初学者的感受。另外该教程应该是 WWDC 2019 发布的,基于 Xcode 11。而在最新发布的 Xcode 12 beta 版本中,似乎 SwiftUI 有了自己的生命周期,不再依赖于 UIKit。 1. 项目结构 […]

使用 dnsmasq 进行内网泛域名解析

家里用的是 Netgear R6300v2 路由器,已刷成梅林固件。最近有一个需求就是希望在家中局域网内的任何电脑或手机等访问域名 *.hawu.home 的时候都指向我的客厅电脑 192.168.2.185,这样就可以很方便的访问我在客厅电脑部署的那些测试网站了。 前提条件 路由器已经安装梅林固件,梅林固件默认使用 dnsmasq 提供 DHCP 和 DNS 服务 在路由器的管理页面指定客厅电脑的静态 DHCP 地址为 192.168.2.185 开启路由器系统的

nginx、php-fpm、php 错误日志的关系

nginx、php-fpm、php 三者的配置文件中都有 error_log 项,指定各自错误日志的保存路径。理论上它们三者的错误应该不会重合,即 nginx error_log 记录的是 nginx 进程自己的错误,php-fpm error_log 记录的是 php-fpm 进程自己的错误, php error_log 记录的是 php 脚本执行时候的错误。 用户访问 nginx

提高https载入速度,记一次nginx升级优化

1. 发现问题 两年前就把我的 hawu.me 开启了 https,用的 Let’s Encrypt 的免费证书。但因为只是自用,而且由于墙的原因,从来没有留意过加载速度慢的问题。今天特意观察了一下,初次打开网站居然要耗时4、5秒,这还不包括加载资源的时间。 使用 Chrome 的开发者工具看了下耗时: 在初次建立连接的时候,Initial connection 与 SSL 时间居然都用到了4秒 (\”▔□▔)汗。Chrome 开发者工具这里的 Initial

Laravel 6 – laravel/ui 中的 vue 与 jquery

Laravel 应该是在5.几之后吧,其laravel/ui项目的前端框架默认使用Bootstrap与Vue。 1. 无法打印vue实例 对于vue官方文档中的例子,我们都可以在浏览器console窗口通过app变量打印出vue实例。 但是在laravel/ui的页面中,我们打印app变量时候,输出的却是id=”app”的那个dom元素,并不是在/resources/js/app.js中定义的vue实例。 const app = new Vue({ el: '#app', }); 原因是laravel mix在编译打包js文件的时候,会将每个js源文件作为一个独立的作用域,这样可以使不同js文件中的变量互不干扰。而这个app变量(打包时候还会将const变成var。。。=。=# js真是迷)的作用域就只在该/resources/js/app.js文件中。在其他地方是无法读取该变量的。 我们可以看一下laravel mix打包后生成的/pulbic/js/app.js文件,整个/resources/js/app.js源文件的代码(包括app变量)都被function(module, exports,

homebrew使用

替换源 brew 的源国内下载特别慢,所以通常要替换国内镜像。参考homebrew中科大镜像。 检查当前源 cd “$(brew –repo)” git remote get-url origin 列出已安装项目 brew list 升级 Homebrew 自身 brew update 列出可更新的项目

Laravel 6 – 加密解密与哈希

1. 加密解密 全局辅助函数: encrypt($value, $serialize = true) decrypt($value, $unserialize = true) Facade: Crypt::encrypt($value, $serialize = true) Crypt::decrypt($value, $unserialize = true)

Laravel 6 – Model的mass assignment

在Laravel的Eloquent ORM中,Mass Assignment是指以数组形式对模型的属性进行赋值,比如:Model->fill(array $attributes) ,Model::create(array $attributes) 。与之对立的是指单一属性的赋值,比如:Model->age=18 。 考虑这么一个场景: 在用户注册的时候,后台通常使用User::create($attributes) 来进行用户模型的创建并写入数据库。这里的$attributes数组来自于用户提交的表单中的$_POST[’email’],  $_POST[‘password’]等属性。正常情况下用户注册时候只会提交表单中列出的属性,所以一切正常。 但是如果有个不怀好意的用户,在提交表单时候添加一些虚假数据进来,比如$_POST[‘user_type’]=’admin’。而偏巧数据库中user表结构就有一个字段’user_type’用来表示用户类型是管理员(admin)还是客户(customer)。那么此时他就成功注册了一个管理员用户。这不是我们想见到的。 为了防止这种情况的发送,Laravel提供了mass assignment保护。在定义一个Model类型的时候,必须通过Model->fillable 或者Model->guarded 变量来指定哪些属性是允许mass assignment的。(这两个成员变量继承自trait GuardsAttributes ,默认情况下所有的属性都不允许mass  assignment。)

Laravel 6 – 输出详细日志

Log::debug(‘debug message’); 的默认输出实在是太简陋了   最起码应该加上输出日志时候的文件与代码所在行吧。幸好Log::debug() 接受一个数组实参作为第二个参数,并格式化后一同输出。所以我们可以把__FILE__魔术常量放在这个数组参数中交给Log打印。 Log::debug(‘debug message’, [‘file’ => __FILE__, ‘line’ => __LINE__]);  输出如下: 我们也可以将一些想要打印的变量放在第二个实参数组中打印,比如: Log::info(‘User failed to login.’,

Laravel 6 – 从基本用户认证深入理解Laravel

启用Laravel的基本用户认证模块后,就会自动生成几个用户注册/登录/密码找回的页面。我们就来从这几个页面深入理解Laravel的用法。 1. 找到路由 这几个路由都由/routes/web.php文件中新增的Auth::routes(); 这一行注册的。 1.1 Facade 这个用法涉及到了Laravel的facade概念,facade是指用看起来像调用类的静态方法的语法(类名::静态方法)来调用容器中对应实例的同名公有方法的一种用法。 我们可以在/config/app.php的aliases数组中找到这个Auth别名,该别名指向实际的facade类‘Auth’ => Illuminate\Support\Facades\Auth::class, 所以在路由/routes/web.php中的Auth::routes()实际上就是Illuminate\Support\Facades\Auth::routes() 然后我们再去看这个…\Facades\Auth的代码。 class Auth extends Facade { protected static

Scroll to Top