macos查看网络端口情况

使用 netstat 命令

1
netstat -nat | grep <port>
1
netstat -nat |grep LISTEN

使用 lsof 命令

1
2
3
4
5
6
lsof -n -P -i TCP -s TCP:LISTEN
-n 表示主机以ip地址显示
-P 表示端口以数字形式显示,默认为端口名称
-i 意义较多,具体 man lsof, 主要是用来过滤lsof的输出结果
-s 和 -i 配合使用,用于过滤输出

使用 telnet 命令

1
telnet 127.0.0.1 <port>

使用 nc 命令

1
2
3
4
5
6
7
nc -w <time> -n -z <ip> <port_start-port_end>
-w 表示等待连接时间
-n 尽量将端口号名称转换为端口号数字
-z 对需要检查的端口没有输入输出,用于端口扫描模式
ip 需要检查的ip地址
port_start-port_end 可以是一个端口,也可以是一段端口,返回结果为开放的端口

vagrant 常用操作

查看全局状态

vagrant global-status

基本安装流程,以centos为例

vagrant add centos cent.box

vagrant init centos

vagrant up

vagrant ssh

销毁

vagrant destroy

vagrant box remove centos

PHP代码重构

删除 else

1
2
3
4
5
6
7
8
function test($arg)
{
if($arg == 'foobar'){
return true;
}else{
return false;
}
}

更好的写法

1
2
3
4
5
6
7
8
function test($arg)
{
if($arg == 'foobar'){
return true;
}
return false;
}

拆分为多个函数

这种方式需要将函数名取的尽量清晰易懂,不要嫌长。

1
2
3
4
5
6
7
8
if($age > 18){
doSomeThingA();
doSomeThingB();
doSomeThingC();
}else{
doSomeThingD();
doSomeThingE();
}

多层 if 嵌套的语法,把他写成线性的,就像写规则一样将其一条条罗列出来

1
2
3
4
5
6
7
8
9
10
11
12
13
function match($age, $salary, $pretty){
if($age > 18){
// do some thing A;
if($salary > 5000){
// do some thing B;
if($pretty == true){
return true;
}
}
}
return false;
}

改写成这样

laravel中用到的ServiceProvide

路由

全局限制

如果你希望路由参数可以总是遵循正则表达式,则可以使用 pattern 方法。你应该在 RouteServiceProvider 的 boot 方法里定义这些模式:

1
2
3
4
5
6
7
8
9
10
11
12
/**
* 定义你的路由模型绑定,模式过滤器等。
*
* @param \Illuminate\Routing\Router $router
* @return void
*/
public function boot(Router $router)
{
$router->pattern('id', '[0-9]+');
parent::boot($router);
}

模式一旦被定义,便会自动应用到所有使用该参数名称的路由上:

1
2
3
Route::get('user/{id}', function ($id) {
// Only called if {id} is numeric.
});

路由模型绑定

Laravel 路由模型绑定提供了一个方便的方式来注入类实例到你的路由中。例如,除了注入一个用户的 ID,你也可以注入与指定 ID 相符的完整 User 类实例。

首先,使用路由的 model 方法为指定参数指定类。必须在 RouteServiceProvider::boot 方法中定义你的模型绑定:

绑定参数至模型

laravel 技巧

快速找到 facade 中对应的类

1
2
3
Route::get('test', function(){
dd(get_class(HTML::getFacadeRoot()));
});

或者使用 idehelper

将数据表里的数据导出成 Seeder 文件

  1. composer require orangehill/iseed
  2. 在 config/app.php 文件中添加 Service Provider
  3. php artisan iseed 后面带上本地数据表的名称, 可直接将数据库表的内容转换为 seeder 文件
  4. 强制覆盖导出文件 – force

建议 使用模型工厂来填充数据

模型工厂

避免

1
factory(\App\Models\User::class)->times(300)->create();

正确的做法:使用 make 方法

1
2
$users = factory(\App\Models\User::class)->times(1000)->make();
\App\Models\User::insert($users->toArray());

传统方式