forked from summerblue/laravel5-cheatsheet
-
Notifications
You must be signed in to change notification settings - Fork 0
/
index_zh-CN.html
2123 lines (1981 loc) · 82.3 KB
/
index_zh-CN.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<link rel="shortcut icon" href="assets/ico/favicon.png">
<meta name="description" content="Laravel Cheat Sheet , Codes , function , methods of laravel framework">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="author" content="@summer">
<title>Laravel 5.1 LTS 速查表</title>
<meta name="description" content="Laravel 5.1 LTS 速查表方便快速浏览,支持并且只支持 Laravel 5.1 LTS,支持手机访问,支持中英文版本">
<meta name="keywords" content="Laravel 5.1 LTS 速查表,Laravel 5.1 教程,Laravel 5.1 新手教程,Laravel 5.1 Artisan,Laravel 5.1 Auth,Laravel 5.1 Blade,Laravel 5.1 Cache,Laravel 5.1 Composer,Laravel 5.1 Config,Laravel 5.1 Container,Laravel 5.1 Cookie,Laravel 5.1 DB,Laravel 5.1 Environment,Laravel 5.1 Event,Laravel 5.1 File,Laravel 5.1 Form,Laravel 5.1 HTML,Laravel 5.1 Helper,Laravel 5.1 Input,Laravel 5.1 Lang,Laravel 5.1 Log,Laravel 5.1 Mail,Laravel 5.1 Model,Laravel 5.1 Pagination,Laravel 5.1 Queue,Laravel 5.1 Redirect,Laravel 5.1 Request,Laravel 5.1 Response,Laravel 5.1 Route,Laravel 5.1 SSH,Laravel 5.1 Schema,Laravel 5.1 Security,Laravel 5.1 Session,Laravel 5.1 String,Laravel 5.1 URL,Laravel 5.1 UnitTest,Laravel 5.1 Validation,Laravel 5.1 View">
<link rel="stylesheet" href="assets/css/normalize.css" />
<link rel="stylesheet" href="assets/css/foundation.min.css" />
<link rel="stylesheet" href="assets/css/font-awesome.min.css" />
<link rel="stylesheet" href="assets/css/page.css" />
</head>
<body>
<div class="off-canvas-wrapper wrapper-container">
<div class="off-canvas-wrapper-inner" data-off-canvas-wrapper>
<div class="off-canvas position-left sidebar-canvas" id="offCanvasLeft" data-off-canvas data-position="left">
<button class="close-button" aria-label="Close menu" type="button" data-close>
<span aria-hidden="true">×</span>
</button>
<ul class="mobile-ofc vertical menu">
<li>
<button class="warning hollow button check-all-button">查看全部</button>
</li>
<li>
<ul class="submenu menu vertical mobile-cmd-cell" data-submenu>
</ul>
</li>
</ul>
</div>
<div class="off-canvas-content" data-off-canvas-content>
<div class="title-bar hide-for-medium">
<div class="title-bar-left">
<button class="menu-icon" type="button" data-open="offCanvasLeft"></button>
</div>
</div>
</div>
<a href="#top" id="top-button" title="Top"><i class="icon-arrow-up"></i></a>
<a href="#" class="comments-toggle" title="隐藏/展示代码注释"><i class="icon-eye-close"></i></a>
<div class="row full-width">
<div class="large-2 columns code-column sidebar">
<h5 class="sidebar-title">Laravel 5.1 LTS 速查表</h5>
<hr class="horizonal-line">
<div class="show-for-medium">
<button class="warning hollow button check-all-button">查看全部</button>
<div class="clearfix"></div>
<ul class="sidebar-menu">
</ul>
<div class="clearfix"></div>
<hr class="horizonal-line">
</div>
<ul class="sidebar-bottom">
<li><a href="https://laravel-china.org/" class="button expand small radius alert">Laravel China 社区</a></li>
<li><a href="https://laravel-china.org/docs/home" class="button expand small radius alert">Laravel 中文文档</a></li>
<li ><a href="http://yousails.mikecrm.com/4Dh5uWU" class="button expand small radius alert">Laravel 技术外包</a></li>
<li><a href="https://laravel-china.org/topics/3626/laravel-remote-and-its-sails-and-freedom" class="button expand small radius alert">Laravel 远程工作</a></li>
<li><a href="https://laravel-china.org/composer" class="button expand small radius alert">Composer 中国镜像</a></li>
<li><a href="https://laravel-china.github.io/php-the-right-way/" class="button expand small radius alert">PHP 之道(必读)</a></li>
<li>
<a href="https://laravel-china.org/topics/3383" target="_blank" rel="nofollow" title="" style="display: block;margin-bottom: 23px;">
<img src="https://dn-phphub.qbox.me/uploads/images/201612/10/1/k7wwMpJduq.jpg" style="width: 150px;border: 1px solid #d8d3d3;box-shadow: 0 0 30px #d4d4d4;-moz-box-shadow: 0 0 30px #ccc;-webkit-box-shadow: 0 0 30px #d4d4d4;margin-bottom: 10px;margin-top: 21px;border-radius: 4px;">
</a>
</li>
<li>
<a href="http://weibo.com/1837553744/" target="_blank">by Summer</a>
</li>
<li class="social-icon">
<a href="http://github.com/summerblue" target="_blank" data-tooltip aria-haspopup="true" class="top" data-disable-hover="false" tabindex="2" title="此项目由 Summer 倾情维护">
<div class="avatar"></div>
</a>
<a href="https://github.com/summerblue/laravel5-cheatsheet" target="_blank" data-tooltip aria-haspopup="true" class="top" data-disable-hover="false" tabindex="2" title="在 GitHub 查看此项目">
<i class="icon-github"></i>
</a>
<a href="https://twitter.com/Summer_Charlie" target="_blank" data-tooltip aria-haspopup="true" class="top" data-disable-hover="false" tabindex="2" title="关注我的 Twitter">
<i class="icon-twitter"></i>
</a>
<a href="http://weibo.com/1837553744" target="_blank" data-tooltip aria-haspopup="true" class="top" data-disable-hover="false" tabindex="2" title="关注我的微博">
<i class="icon-weibo"></i>
</a>
</li>
<li class="languages-flag">
<a href="https://cs.laravel-china.org/">
<i class="cn flag"></i>
</a>
<span class="vertical-line">|</span>
<a href="https://summerblue.github.io/laravel5-cheatsheet/">
<i class="gb flag"></i>
</a>
</li>
</ul>
</div>
<div class="large-10 columns code-column code-container">
<div class="grid">
<section class="cmd-description grid-item">
<h4><a name="artisan" href="#artisan">Artisan</a> <a href="http://laravel-china.org/docs/5.1/artisan" title="Artisan CLI @ Laravel Docs"><i class="icon-file-text"></i></a></h4>
<pre class="prettyprint lang-php">
// 在版本 5.1.11 新添加,见 http://laravel-china.org/docs/5.1/5.1/authorization#creating-policies
php artisan make:policy PostPolicy
// 针对命令显示帮助信息
php artisan --help OR -h
// 抑制输出信息
php artisan --quiet OR -q
// 打印 Laravel 的版本信息
php artisan --version OR -V
// 不询问任何交互性的问题
php artisan --no-interaction OR -n
// 强制输出 ANSI 格式
php artisan --ansi
// 禁止输出 ANSI 格式
php artisan --no-ansi
// 显示当前命令行运行的环境
php artisan --env
// -v|vv|vvv 通过增加 v 的个数来控制命令行输出内容的详尽情况: 1 个代表正常输出, 2 个代表输出更多消息, 3 个代表调试
php artisan --verbose
// 移除编译优化过的文件 (storage/frameworks/compiled.php)
php artisan clear-compiled
// 显示当前框架运行的环境
php artisan env
// 显示某个命令的帮助信息
php artisan help
// 显示所有可用的命令
php artisan list
// 进入应用交互模式
php artisan tinker
// 进入维护模式
php artisan down
// 退出维护模式
php artisan up
// 优化框架性能
// --force 强制编译已写入文件 (storage/frameworks/compiled.php)
// --psr 不对 Composer 的 dump-autoload 进行优化
php artisan optimize [--force] [--psr]
// 启动内置服务器
php artisan serve
// 更改默认端口
php artisan serve --port 8080
// 使其在本地服务器外也可正常工作
php artisan serve --host 0.0.0.0
// 更改应用命名空间
php artisan app:name namespace
// 清除过期的密码重置令牌
php artisan auth:clear-resets
// 清空应用缓存
php artisan cache:clear
// 创建缓存数据库表 migration
php artisan cache:table
// 合并所有的配置信息为一个,提高加载速度
php artisan config:cache
// 移除配置缓存文件
php artisan config:clear
// 程序内部调用 Artisan 命令
$exitCode = Artisan::call('config:cache');
// 运行所有的 seed 假数据生成类
// --class 可以指定运行的类,默认是: "DatabaseSeeder"
// --database 可以指定数据库
// --force 当处于生产环境时强制执行操作
php artisan db:seed [--class[="..."]] [--database[="..."]] [--force]
// 基于注册的信息,生成遗漏的 events 和 handlers
php artisan event:generate
// 生成新的处理器类
// --command 需要处理器处理的命令类名字
php artisan handler:command [--command="..."] name
// 创建一个新的时间处理器类
// --event 需要处理器处理的事件类名字
// --queued 需要处理器使用队列话处理的事件类名字
php artisan handler:event [--event="..."] [--queued] name
// 生成应用的 key(会覆盖)
php artisan key:generate
// 在默认情况下, 这将创建未加入队列的自处理命令
// 通过 --handler 标识来生成一个处理器, 用 --queued 来使其入队列.
php artisan make:command [--handler] [--queued] name
// 创建一个新的 Artisan 命令
// --command 命令被调用的名称。 (默认为: "command:name")
php artisan make:console [--command[="..."]] name
// 创建一个新的资源控制器
// --plain 生成一个空白的控制器类
php artisan make:controller [--plain] name
php artisan make:controller App\\Admin\\Http\\Controllers\\DashboardController
// 创建一个新的事件类
php artisan make:event name
// 创建一个新的中间件类
php artisan make:middleware name
// 创建一个新的迁移文件
// --create 将被创建的数据表.
// --table 将被迁移的数据表.
php artisan make:migration [--create[="..."]] [--table[="..."]] name
// 创建一个新的 Eloquent 模型类
php artisan make:model name
// 创建一个新的服务提供者类
php artisan make:provider name
// 创建一个新的表单请求类
php artisan make:request name
// 数据库迁移
// --database 指定数据库连接(下同)
// --force 当处于生产环境时强制执行,不询问(下同)
// --path 指定单独迁移文件地址
// --pretend 把将要运行的 SQL 语句打印出来(下同)
// --seed Seed 任务是否需要被重新运行(下同)
php artisan migrate [--database[="..."]] [--force] [--path[="..."]] [--pretend] [--seed]
// 创建迁移数据库表
php artisan migrate:install [--database[="..."]]
// 重置并重新运行所有的 migrations
// --seeder 指定主 Seeder 的类名
php artisan migrate:refresh [--database[="..."]] [--force] [--seed] [--seeder[="..."]]
// 回滚所有的数据库迁移
php artisan migrate:reset [--database[="..."]] [--force] [--pretend]
// 回滚最最近一次运行的迁移任务
php artisan migrate:rollback [--database[="..."]] [--force] [--pretend]
// migrations 数据库表信息
php artisan migrate:status
// 为队列数据库表创建一个新的迁移
php artisan queue:table
// 监听指定的队列
// --queue 被监听的队列
// --delay 给执行失败的任务设置延时时间 (默认为零: 0)
// --memory 内存限制大小,单位为 MB (默认为: 128)
// --timeout 指定任务运行超时秒数 (默认为: 60)
// --sleep 等待检查队列任务的秒数 (默认为: 3)
// --tries 任务记录失败重试次数 (默认为: 0)
php artisan queue:listen [--queue[="..."]] [--delay[="..."]] [--memory[="..."]] [--timeout[="..."]] [--sleep[="..."]] [--tries[="..."]] [connection]
// 查看所有执行失败的队列任务
php artisan queue:failed
// 为执行失败的数据表任务创建一个迁移
php artisan queue:failed-table
// 清除所有执行失败的队列任务
php artisan queue:flush
// 删除一个执行失败的队列任务
php artisan queue:forget
// 在当前的队列任务执行完毕后, 重启队列的守护进程
php artisan queue:restart
// 对指定 id 的执行失败的队列任务进行重试(id: 失败队列任务的 ID)
php artisan queue:retry id
// 指定订阅 Iron.io 队列的链接
// queue: Iron.io 的队列名称.
// url: 将被订阅的 URL.
// --type 指定队列的推送类型.
php artisan queue:subscribe [--type[="..."]] queue url
// 处理下一个队列任务
// --queue 被监听的队列
// --daemon 在后台模式运行
// --delay 给执行失败的任务设置延时时间 (默认为零: 0)
// --force 强制在「维护模式下」运行
// --memory 内存限制大小,单位为 MB (默认为: 128)
// --sleep 当没有任务处于有效状态时, 设置其进入休眠的秒数 (默认为: 3)
// --tries 任务记录失败重试次数 (默认为: 0)
php artisan queue:work [--queue[="..."]] [--daemon] [--delay[="..."]] [--force] [--memory[="..."]] [--sleep[="..."]] [--tries[="..."]] [connection]
// 生成路由缓存文件来提升路由效率
php artisan route:cache
// 移除路由缓存文件
php artisan route:clear
// 显示已注册过的路由
php artisan route:list
// 运行计划命令
php artisan schedule:run
// 为 session 数据表生成迁移文件
php artisan session:table
// 从 vendor 的扩展包中发布任何可发布的资源
// --force 重写所有已存在的文件
// --provider 指定你想要发布资源文件的服务提供者
// --tag 指定你想要发布标记资源.
php artisan vendor:publish [--force] [--provider[="..."]] [--tag[="..."]]
php artisan tail [--path[="..."]] [--lines[="..."]] [connection]
</pre>
</section>
<section class="cmd-description grid-item">
<h4><a name="composer" href="#composer">Composer</a> <a href="http://getcomposer.org/doc/03-cli.md" title="Composer CLI Docs"><i class="icon-file-text"></i></a></h4>
<pre class="prettyprint lang-php">
composer create-project laravel/laravel folder_name
composer install
composer update
composer dump-autoload [--optimize]
composer self-update
composer require [options] [--] [vendor/packages]...
</pre>
</section>
<section class="cmd-description grid-item">
<h4><a name="Configuration" href="#Configuration">Config</a> <a href="http://laravel-china.org/docs/5.1/configuration" title="Configuration Docs"><i class="icon-file-text"></i></a></h4>
<pre class="prettyprint lang-php">
Config::get('app.timezone');
//指定默认值
Config::get('app.timezone', 'UTC');
Config::set('database.default', 'sqlite');
</pre>
</section>
<section class="cmd-description grid-item">
<h4><a name="routing" href="#routing">Route</a> <a href="http://laravel-china.org/docs/5.1/routing" title="Routing @ Laravel Docs"><i class="icon-file-text"></i></a> <a href="http://laravel-china.org/docs/5.1/helpers#routing" title="Routing Helpers @ Laravel Docs"><i class="icon-file-text"></i></a> </h4>
<pre class="prettyprint lang-php">
Route::get('foo', function(){});
Route::get('foo', 'ControllerName@function');
Route::controller('foo', 'FooController');
</pre>
<h6>资源路由 <a href="http://laravel-china.org/docs/5.1/controllers#restful-resource-controllers" title="RESTful Controllers @ Laravel Docs"><i class="icon-file-text"></i></a></h6>
<pre class="prettyprint lang-php">
Route::resource('posts','PostsController');
// 资源路由器只允许指定动作通过
Route::resource('photo', 'PhotoController',['only' => ['index', 'show']]);
Route::resource('photo', 'PhotoController',['except' => ['update', 'destroy']]);
</pre>
<h6>触发错误 <a href="http://laravel-china.org/docs/5.1/routing#throwing-404-errors" title="throwing-404-errors @ Laravel Docs"><i class="icon-file-text"></i></a></h6>
<pre class="prettyprint lang-php">
App::abort(404);
$handler->missing(...) in ErrorServiceProvider::boot();
throw new NotFoundHttpException;
</pre>
<h6>路由参数 <a href="http://laravel-china.org/docs/5.1/routing#route-parameters" title="RESTful Controllers @ Laravel Docs"><i class="icon-file-text"></i></a></h6>
<pre class="prettyprint lang-php">
Route::get('foo/{bar}', function($bar){});
Route::get('foo/{bar?}', function($bar = 'bar'){});
</pre>
<h6>HTTP 请求方式</h6>
<pre class="prettyprint lang-php">
Route::any('foo', function(){});
Route::post('foo', function(){});
Route::put('foo', function(){});
Route::patch('foo', function(){});
Route::delete('foo', function(){});
// RESTful 资源控制器
Route::resource('foo', 'FooController');
// 为一个路由注册多种请求方式
Route::match(['get', 'post'], '/', function(){});
</pre>
<h6>安全路由 (TBD)</h6>
<pre class="prettyprint lang-php">
Route::get('foo', array('https', function(){}));
</pre>
<h6>路由约束</h6>
<pre class="prettyprint lang-php">
Route::get('foo/{bar}', function($bar){})
->where('bar', '[0-9]+');
Route::get('foo/{bar}/{baz}', function($bar, $baz){})
->where(array('bar' => '[0-9]+', 'baz' => '[A-Za-z]'))
</pre>
<pre class="prettyprint lang-php">
// 设置一个可跨路由使用的模式
Route::pattern('bar', '[0-9]+')
</pre>
<h6>HTTP 中间件 <a href="http://laravel-china.org/docs/5.1/middleware" title="HTTP Middleware @ Laravel Docs"><i class="icon-file-text"></i></a></h6>
<pre class="prettyprint lang-php">
// 为路由指定 Middleware
Route::get('admin/profile', ['middleware' => 'auth', function(){}]);
Route::get('admin/profile', function(){})->middleware('auth');
</pre>
<h6>命名路由</h6>
<pre class="prettyprint lang-php">
Route::currentRouteName();
Route::get('foo/bar', array('as' => 'foobar', function(){}));
Route::get('user/profile', [
'as' => 'profile', 'uses' => 'UserController@showProfile'
]);
Route::get('user/profile', 'UserController@showProfile')->name('profile');
$url = route('profile');
$redirect = redirect()->route('profile');
</pre>
<h6>路由前缀</h6>
<pre class="prettyprint lang-php">
Route::group(['prefix' => 'admin'], function()
{
Route::get('users', function(){
return 'Matches The "/admin/users" URL';
});
});
</pre>
<h6>路由命名空间</h6>
<pre class="prettyprint lang-php">
// 此路由组将会传送 'Foo\Bar' 命名空间
Route::group(array('namespace' => 'Foo\Bar'), function(){})
</pre>
<h6>子域名路由</h6>
<pre class="prettyprint lang-php">
// {sub} 将在闭包中被忽略
Route::group(array('domain' => '{sub}.example.com'), function(){});
</pre>
</section>
<section class="cmd-description grid-item">
<h4><a name="app" href="#app">Environment</a> <a href="http://laravel-china.org/docs/5.1/configuration#environment-configuration" title="Environment Configuration @ Laravel Docs"><i class="icon-file-text"></i></a></h4>
<pre class="prettyprint lang-php">
$environment = app()->environment();
$environment = App::environment();
$environment = $app->environment();
// 判断当环境是否为 local
if ($app->environment('local')){}
// 判断当环境是否为 local 或 staging...
if ($app->environment('local', 'staging')){}
</pre>
</section>
<section class="cmd-description grid-item">
<h4><a name="log" href="#log">Log</a> <a href="http://laravel-china.org/docs/5.1/errors#logging" title="Log @ Laravel Docs"><i class="icon-file-text"></i></a></h4>
<pre class="prettyprint lang-php">
// 记录器提供了 7 种在 RFC 5424 标准内定义的记录等级:
// debug, info, notice, warning, error, critical, and alert.
Log::info('info');
Log::info('info',array('context'=>'additional info'));
Log::error('error');
Log::warning('warning');
// 获取 monolog 实例
Log::getMonolog();
// 添加监听器
Log::listen(function($level, $message, $context) {});
</pre>
<h6>记录 SQL 查询语句 <a href="http://laravel-china.org/docs/5.1/database#query-logging" title="Log @ Laravel Docs"><i class="icon-file-text"></i></a></h6>
<pre class="prettyprint lang-php">
// 开启 log
DB::connection()->enableQueryLog();
// 获取已执行的查询数组
DB::getQueryLog();
</pre>
</section>
<section class="cmd-description grid-item">
<h4><a name="urls" href="#urls">URL</a> <a href="http://laravel.com/api/5.0/Illuminate/Routing/UrlGenerator.html" title="UrlGenerator @ Laravel Docs"><i class="icon-file-text"></i></a> <a href="http://laravel-china.org/docs/5.1/helpers#urls" title="URL helper @ Laravel Docs"><i class="icon-file-text"></i></a></h4>
<pre class="prettyprint lang-php">
URL::full();
URL::current();
URL::previous();
URL::to('foo/bar', $parameters, $secure);
URL::action('NewsController@item', ['id'=>123]);
// 需要在适当的命名空间内
URL::action('Auth\AuthController@logout');
URL::action('FooController@method', $parameters, $absolute);
URL::route('foo', $parameters, $absolute);
URL::secure('foo/bar', $parameters);
URL::asset('css/foo.css', $secure);
URL::secureAsset('css/foo.css');
URL::isValidUrl('http://example.com');
URL::getRequest();
URL::setRequest($request);
</pre>
</section>
<section class="cmd-description grid-item">
<h4><a name="events" href="#events">Event</a> <a href="http://laravel-china.org/docs/5.1/events" title="Events @ Laravel Docs"><i class="icon-file-text"></i></a></h4>
<pre class="prettyprint lang-php">
Event::fire('foo.bar', array($bar));
// 注册一个事件监听器.
// void listen(string|array $events, mixed $listener, int $priority)
Event::listen('App\Events\UserSignup', function($bar){});
Event::listen('foo.*', function($bar){});
Event::listen('foo.bar', 'FooHandler', 10);
Event::listen('foo.bar', 'BarHandler', 5);
// 你可以直接在处理逻辑中返回 false 来停止一个事件的传播.
Event::listen('foor.bar', function($event){ return false; });
Event::subscribe('UserEventHandler');
</pre>
</section>
<section class="cmd-description grid-item">
<h4><a name="db" href="#db">DB</a> <a href="http://laravel-china.org/docs/5.1/database" title="Basic Database Usage @ Laravel Docs"><i class="icon-file-text"></i></a></h4>
<h6>基本使用</h6>
<pre class="prettyprint lang-php">
DB::connection('connection_name');
// 运行数据库查询语句
$results = DB::select('select * from users where id = ?', [1]);
$results = DB::select('select * from users where id = :id', ['id' => 1]);
// 运行普通语句
DB::statement('drop table users');
// 监听查询事件
DB::listen(function($sql, $bindings, $time){ code_here; });
// 数据库事务处理
DB::transaction(function()
{
DB::table('users')->update(['votes' => 1]);
DB::table('posts')->delete();
});
DB::beginTransaction();
DB::rollBack();
DB::commit();
</pre>
<h6>查询语句构造器 <a href="http://laravel-china.org/docs/5.1/queries" title="Query Builder @ Laravel Docs"><i class="icon-file-text"></i></a></h6>
<pre class="prettyprint lang-php">
// 取得数据表的所有行
DB::table('name')->get();
// 取数据表的部分数据
DB::table('users')->chunk(100, function($users)
{
foreach ($users as $user)
{
//
}
});
// 取回数据表的第一条数据
$user = DB::table('users')->where('name', 'John')->first();
DB::table('name')->first();
// 从单行中取出单列数据
$name = DB::table('users')->where('name', 'John')->pluck('name');
DB::table('name')->pluck('column');
// 取多行数据的「列数据」数组
$roles = DB::table('roles')->lists('title');
$roles = DB::table('roles')->lists('title', 'name');
// 指定一个选择字句
$users = DB::table('users')->select('name', 'email')->get();
$users = DB::table('users')->distinct()->get();
$users = DB::table('users')->select('name as user_name')->get();
// 添加一个选择字句到一个已存在的查询语句中
$query = DB::table('users')->select('name');
$users = $query->addSelect('age')->get();
// 使用 Where 运算符
$users = DB::table('users')->where('votes', '>', 100)->get();
$users = DB::table('users')
->where('votes', '>', 100)
->orWhere('name', 'John')
->get();
$users = DB::table('users')
->whereBetween('votes', [1, 100])->get();
$users = DB::table('users')
->whereNotBetween('votes', [1, 100])->get();
$users = DB::table('users')
->whereIn('id', [1, 2, 3])->get();
$users = DB::table('users')
->whereNotIn('id', [1, 2, 3])->get();
$users = DB::table('users')
->whereNull('updated_at')->get();
DB::table('name')->whereNotNull('column')->get();
// 动态的 Where 字句
$admin = DB::table('users')->whereId(1)->first();
$john = DB::table('users')
->whereIdAndEmail(2, '[email protected]')
->first();
$jane = DB::table('users')
->whereNameOrAge('Jane', 22)
->first();
// Order By, Group By, 和 Having
$users = DB::table('users')
->orderBy('name', 'desc')
->groupBy('count')
->having('count', '>', 100)
->get();
DB::table('name')->orderBy('column')->get();
DB::table('name')->orderBy('column','desc')->get();
DB::table('name')->having('count', '>', 100)->get();
// 偏移 & 限制
$users = DB::table('users')->skip(10)->take(5)->get();
</pre>
<h6>Joins <a href="http://laravel-china.org/docs/5.1/queries#joins" title="Joins @ Laravel Docs"><i class="icon-file-text"></i></a></h6>
<pre class="prettyprint lang-php">
// 基本的 Join 声明语句
DB::table('users')
->join('contacts', 'users.id', '=', 'contacts.user_id')
->join('orders', 'users.id', '=', 'orders.user_id')
->select('users.id', 'contacts.phone', 'orders.price')
->get();
// Left Join 声明语句
DB::table('users')
->leftJoin('posts', 'users.id', '=', 'posts.user_id')
->get();
// select * from users where name = 'John' or (votes > 100 and title <> 'Admin')
DB::table('users')
->where('name', '=', 'John')
->orWhere(function($query)
{
$query->where('votes', '>', 100)
->where('title', '<>', 'Admin');
})
->get();
</pre>
<h6>聚合 <a href="http://laravel-china.org/docs/5.1/queries#aggregates" title="Aggregates @ Laravel Docs"><i class="icon-file-text"></i></a></h6>
<pre class="prettyprint lang-php">
$users = DB::table('users')->count();
$price = DB::table('orders')->max('price');
$price = DB::table('orders')->min('price');
$price = DB::table('orders')->avg('price');
$total = DB::table('users')->sum('votes');
</pre>
<h6>原始表达句<a href="http://laravel-china.org/docs/5.1/queries#raw-expressions" title="Raw Expressions @ Laravel Docs"><i class="icon-file-text"></i></a></h6>
<pre class="prettyprint lang-php">
$users = DB::table('users')
->select(DB::raw('count(*) as user_count, status'))
->where('status', '<>', 1)
->groupBy('status')
->get();
// 返回行
DB::select('select * from users where id = ?', array('value'));
DB::insert('insert into foo set bar=2');
DB::update('update foo set bar=2');
DB::delete('delete from bar');
// 返回 void
DB::statement('update foo set bar=2');
// 在声明语句中加入原始的表达式
DB::table('name')->select(DB::raw('count(*) as count, column2'))->get();
</pre>
<h6>Inserts / Updates / Deletes / Unions / Pessimistic Locking</h6>
<pre class="prettyprint lang-php">
// 插入
DB::table('users')->insert(
['email' => '[email protected]', 'votes' => 0]
);
$id = DB::table('users')->insertGetId(
['email' => '[email protected]', 'votes' => 0]
);
DB::table('users')->insert([
['email' => '[email protected]', 'votes' => 0],
['email' => '[email protected]', 'votes' => 0]
]);
// 更新
DB::table('users')
->where('id', 1)
->update(['votes' => 1]);
DB::table('users')->increment('votes');
DB::table('users')->increment('votes', 5);
DB::table('users')->decrement('votes');
DB::table('users')->decrement('votes', 5);
DB::table('users')->increment('votes', 1, ['name' => 'John']);
// 删除
DB::table('users')->where('votes', '<', 100)->delete();
DB::table('users')->delete();
DB::table('users')->truncate();
// 集合
// unionAll() 方法也是可供使用的,调用方式与 union 相似
$first = DB::table('users')->whereNull('first_name');
$users = DB::table('users')->whereNull('last_name')->union($first)->get();
// 消极锁
DB::table('users')->where('votes', '>', 100)->sharedLock()->get();
DB::table('users')->where('votes', '>', 100)->lockForUpdate()->get();
</pre>
</section>
<section class="cmd-description grid-item">
<h4><a name="eloquent" href="#eloquent">Model</a> <a href="http://laravel-china.org/docs/5.1/eloquent" title="Eloquent @ Laravel Docs"><i class="icon-file-text"></i></a></h4>
<h6>基础使用 <a href="http://laravel-china.org/docs/5.1/eloquent#basic-usage" title="Basic Usage @ Laravel Docs"><i class="icon-file-text"></i></a></h6>
<pre class="prettyprint lang-php">
// 定义一个 Eloquent 模型
class User extends Model {}
// 生成一个 Eloquent 模型
php artisan make:model User
// 指定一个自定义的数据表名称
class User extends Model {
protected $table = 'my_users';
}
</pre>
<h6>More</h6>
<pre class="prettyprint lang-php">
Model::create(array('key' => 'value'));
// 通过属性找到第一条相匹配的数据或创造一条新数据
Model::firstOrCreate(array('key' => 'value'));
// 通过属性找到第一条相匹配的数据或实例化一条新数据
Model::firstOrNew(array('key' => 'value'));
// 通过属性找到相匹配的数据并更新,如果不存在即创建
Model::updateOrCreate(array('search_key' => 'search_value'), array('key' => 'value'));
// 使用属性的数组来填充一个模型, 用的时候要小心「Mass Assignment」安全问题 !
Model::fill($attributes);
Model::destroy(1);
Model::all();
Model::find(1);
// 使用双主键进行查找
Model::find(array('first', 'last'));
// 查找失败时抛出异常
Model::findOrFail(1);
// 使用双主键进行查找, 失败时抛出异常
Model::findOrFail(array('first', 'last'));
Model::where('foo', '=', 'bar')->get();
Model::where('foo', '=', 'bar')->first();
Model::where('foo', '=', 'bar')->exists();
// 动态属性查找
Model::whereFoo('bar')->first();
// 查找失败时抛出异常
Model::where('foo', '=', 'bar')->firstOrFail();
Model::where('foo', '=', 'bar')->count();
Model::where('foo', '=', 'bar')->delete();
// 输出原始的查询语句
Model::where('foo', '=', 'bar')->toSql();
Model::whereRaw('foo = bar and cars = 2', array(20))->get();
Model::on('connection-name')->find(1);
Model::with('relation')->get();
Model::all()->take(10);
Model::all()->skip(10);
// 默认的 Eloquent 排序是上升排序
Model::all()->orderBy('column');
Model::all()->orderBy('column','desc');
</pre>
<h6>软删除 <a href="http://laravel-china.org/docs/5.1/eloquent#soft-deleting" title="Soft Deleting @ Laravel Docs"><i class="icon-file-text"></i></a></h6>
<pre class="prettyprint lang-php">
Model::withTrashed()->where('cars', 2)->get();
// 在查询结果中包括带被软删除的模型
Model::withTrashed()->where('cars', 2)->restore();
Model::where('cars', 2)->forceDelete();
// 查找只带有软删除的模型
Model::onlyTrashed()->where('cars', 2)->get();
</pre>
<h6>模型关联</h6>
<pre class="prettyprint lang-php">
// 一对一 - User::phone()
return $this->hasOne('App\Phone', 'foreign_key', 'local_key');
// 一对一 - Phone::user(), 定义相对的关联
return $this->belongsTo('App\User', 'foreign_key', 'other_key');
// 一对多 - Post::comments()
return $this->hasMany('App\Comment', 'foreign_key', 'local_key');
// 一对多 - Comment::post()
return $this->belongsTo('App\Post', 'foreign_key', 'other_key');
// 多对多 - User::roles();
return $this->belongsToMany('App\Role', 'user_roles', 'user_id', 'role_id');
// 多对多 - Role::users();
return $this->belongsToMany('App\User');
// 多对多 - Retrieving Intermediate Table Columns
$role->pivot->created_at;
// 多对多 - 中介表字段
return $this->belongsToMany('App\Role')->withPivot('column1', 'column2');
// 多对多 - 自动维护 created_at 和 updated_at 时间戳
return $this->belongsToMany('App\Role')->withTimestamps();
// 远层一对多 - Country::posts(), 一个 Country 模型可能通过中介的 Users
// 模型关联到多个 Posts 模型(User::country_id)
return $this->hasManyThrough('App\Post', 'App\User', 'country_id', 'user_id');
// 多态关联 - Photo::imageable()
return $this->morphTo();
// 多态关联 - Staff::photos()
return $this->morphMany('App\Photo', 'imageable');
// 多态关联 - Product::photos()
return $this->morphMany('App\Photo', 'imageable');
// 多态关联 - 在 AppServiceProvider 中注册你的「多态对照表」
Relation::morphMap([
'Post' => App\Post::class,
'Comment' => App\Comment::class,
]);
// 多态多对多关联 - 涉及数据库表: posts,videos,tags,taggables
// Post::tags()
return $this->morphToMany('App\Tag', 'taggable');
// Video::tags()
return $this->morphToMany('App\Tag', 'taggable');
// Tag::posts()
return $this->morphedByMany('App\Post', 'taggable');
// Tag::videos()
return $this->morphedByMany('App\Video', 'taggable');
// 查找关联
$user->posts()->where('active', 1)->get();
// 获取所有至少有一篇评论的文章...
$posts = App\Post::has('comments')->get();
// 获取所有至少有三篇评论的文章...
$posts = Post::has('comments', '>=', 3)->get();
// 获取所有至少有一篇评论被评分的文章...
$posts = Post::has('comments.votes')->get();
// 获取所有至少有一篇评论相似于 foo% 的文章
$posts = Post::whereHas('comments', function ($query) {
$query->where('content', 'like', 'foo%');
})->get();
// 预加载
$books = App\Book::with('author')->get();
$books = App\Book::with('author', 'publisher')->get();
$books = App\Book::with('author.contacts')->get();
// 延迟预加载
$books->load('author', 'publisher');
// 写入关联模型
$comment = new App\Comment(['message' => 'A new comment.']);
$post->comments()->save($comment);
// Save 与多对多关联
$post->comments()->saveMany([
new App\Comment(['message' => 'A new comment.']),
new App\Comment(['message' => 'Another comment.']),
]);
$post->comments()->create(['message' => 'A new comment.']);
// 更新「从属」关联
$user->account()->associate($account);
$user->save();
$user->account()->dissociate();
$user->save();
// 附加多对多关系
$user->roles()->attach($roleId);
$user->roles()->attach($roleId, ['expires' => $expires]);
// 从用户上移除单一身份...
$user->roles()->detach($roleId);
// 从用户上移除所有身份...
$user->roles()->detach();
$user->roles()->detach([1, 2, 3]);
$user->roles()->attach([1 => ['expires' => $expires], 2, 3]);
// 任何不在给定数组中的 IDs 将会从中介表中被删除。
$user->roles()->sync([1, 2, 3]);
// 你也可以传递中介表上该 IDs 额外的值:
$user->roles()->sync([1 => ['expires' => true], 2, 3]);
<h6>事件</h6>
<pre class="prettyprint lang-php">
Model::creating(function($model){});
Model::created(function($model){});
Model::updating(function($model){});
Model::updated(function($model){});
Model::saving(function($model){});
Model::saved(function($model){});
Model::deleting(function($model){});
Model::deleted(function($model){});
Model::observe(new FooObserver);
</pre>
<h6>Eloquent 配置信息</h6>
<pre class="prettyprint lang-php">
// 关闭模型插入或更新操作引发的 「mass assignment」异常
Eloquent::unguard();
// 重新开启「mass assignment」异常抛出功能
Eloquent::reguard();
</pre>
</section>
<section class="cmd-description grid-item">
<h4><a name="pagination" href="#pagination">Pagination</a> <a href="http://laravel-china.org/docs/5.1/pagination" title="Pagination @ Laravel Docs"><i class="icon-file-text"></i></a></h4>
<pre class="prettyprint lang-php">
// 自动处理分页逻辑
Model::paginate(15);
Model::where('cars', 2)->paginate(15);
// 使用简单模板 - 只有 "上一页" 或 "下一页" 链接
Model::where('cars', 2)->simplePaginate(15);
// 手动分页
Paginator::make($items, $totalItems, $perPage);
// 在页面打印分页导航栏
$variable->links();
</pre>
</section>
<section class="cmd-description grid-item">
<h4><a name="localization" href="#localization">Lang</a> <a href="http://laravel-china.org/docs/5.1/localization" title="Localization @ Laravel Docs"><i class="icon-file-text"></i></a></h4>
<pre class="prettyprint lang-php">
App::setLocale('en');
Lang::get('messages.welcome');
Lang::get('messages.welcome', array('foo' => 'Bar'));
Lang::has('messages.welcome');
Lang::choice('messages.apples', 10);
// Lang::get 的别名
trans('messages.welcome');
</pre>
</section>
<section class="cmd-description grid-item">
<h4><a name="files" href="#files">File</a> <a href="http://laravel.com/api/5.0/Illuminate/Filesystem/Filesystem.html" title="Filesystem @ Laravel Docs"><i class="icon-file-text"></i></a></h4>
<pre class="prettyprint lang-php">
File::exists('path');
File::get('path');
File::getRemote('path');
// 获取文件内容
File::getRequire('path');
// 获取文件内容, 仅能引入一次
File::requireOnce('path');
// 将内容写入文件
File::put('path', 'contents');
// 将内容添加在文件原内容后
File::append('path', 'data');
// 通过给定的路径来删除文件
File::delete('path');
// 将文件移动到新目录下
File::move('path', 'target');
// Copy a file to a new location
// 将文件复制到新目录下
File::copy('path', 'target');
// 从文件的路径地址提取文件的扩展
File::extension('path');
// 获取文件类型
File::type('path');
// 获取文件大小
File::size('path');
// 获取文件的最后修改时间
File::lastModified('path');
// 判断给定的路径是否是文件目录
File::isDirectory('directory');
// 判断给定的路径是否是可写入的
File::isWritable('path');
// 判断给定的路径是否是文件
File::isFile('file');
// 查找能被匹配到的路径名
File::glob($patterns, $flag);
// Get an array of all files in a directory.
// 获取一个目录下的所有文件, 以数组类型返回
File::files('directory');
// 获取一个目录下的所有文件 (递归).
File::allFiles('directory');
// 获取一个目录内的目录
File::directories('directory');
// 创建一个目录
File::makeDirectory('path', $mode = 0777, $recursive = false);
// 将文件夹从一个目录复制到另一个目录下
File::copyDirectory('directory', 'destination', $options = null);
// 递归式删除目录
File::deleteDirectory('directory', $preserve = false);
// 清空指定目录的所有文件和文件夹
File::cleanDirectory('directory');
</pre>
</section>
<section class="cmd-description grid-item">
<h4><a name="unittest" href="#unittest">UnitTest</a> <a href="http://laravel-china.org/docs/5.1/testing" title="Unit testing @ Laravel Docs"><i class="icon-file-text"></i></a></h4>
<h6>Install and run</h6>
<pre class="prettyprint lang-php">
// 将其加入到 composer.json 并更新:
composer require "phpunit/phpunit:4.0.*"
// 运行测试 (在项目根目录下运行)
./vendor/bin/phpunit
</pre>
<h6>Asserts</h6>
<pre class="prettyprint lang-php">
$this->assertTrue(true);
$this->assertEquals('foo', $bar);
$this->assertCount(1,$times);
$this->assertResponseOk();
$this->assertResponseStatus(403);
$this->assertRedirectedTo('foo');
$this->assertRedirectedToRoute('route.name');
$this->assertRedirectedToAction('Controller@method');
$this->assertViewHas('name');
$this->assertViewHas('age', $value);
$this->assertSessionHasErrors();
// 由单个 key 值来假定 session 有错误...
$this->assertSessionHasErrors('name');
// 由多个 key 值来假定 session 有错误...
$this->assertSessionHasErrors(array('name', 'age'));
$this->assertHasOldInput();
</pre>
<h6>Calling routes</h6>
<pre class="prettyprint lang-php">
$response = $this->call($method, $uri, $parameters, $files, $server, $content);
$response = $this->callSecure('GET', 'foo/bar');
$this->session(['foo' => 'bar']);
$this->flushSession();
$this->seed();
$this->seed($connection);
</pre>
</section>
<section class="cmd-description grid-item">
<h4><a name="SSH" href="#SSH">SSH</a> <a href="http://laravel-china.org/docs/5.1/ssh" title="SSH @ Laravel Docs"><i class="icon-file-text"></i></a>
</h4>
<h6>Executing Commands</h6>
<pre class="prettyprint lang-php">
SSH::run(array $commands);
// 指定 remote, 否则将使用默认值
SSH::into($remote)->run(array $commands);
SSH::run(array $commands, function($line)
{
echo $line.PHP_EOL;
});
</pre>
<h6>任务</h6>
<pre class="prettyprint lang-php">
// 定义任务
SSH::define($taskName, array $commands);
// 执行任务
SSH::task($taskName, function($line)
{
echo $line.PHP_EOL;
});
</pre>
<h6>SFTP 上传</h6>
<pre class="prettyprint lang-php">
SSH::put($localFile, $remotePath);
SSH::putString($string, $remotePath);
</pre>