我是靠谱客的博主 机智夕阳,这篇文章主要介绍laravel使用总结(一)安装路由中间件控制器响应参数验证异常捕获自定义 Artisan 命令行工具,现在分享给大家,希望可以做个参考。


安装

复制代码
1
2
composer create-project laravel/laravel learnlaravel5 --prefer-dist v5.3.*

安装成功之后会自动生成一个key

复制代码
1
2
3
4
5
6
7
> IlluminateFoundationComposerScripts::postUpdate > php artisan optimize Generating optimized class loader The compiled class file has been removed. > php artisan key:generate Application key [base64:z6FDVhrWJfYFyjjFpJp3tmIsbqvcSAPHsHjDBN3oNpE=] set successfully.

查看目录

复制代码
1
tree

目录结果

复制代码
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
├── app │   ├── Console │   │   └── Kernel.php │   ├── Exceptions │   │   └── Handler.php │   ├── Http │   │   ├── Controllers │   │   │   ├── Auth │   │   │   │   ├── ForgotPasswordController.php │   │   │   │   ├── LoginController.php │   │   │   │   ├── RegisterController.php │   │   │   │   └── ResetPasswordController.php │   │   │   └── Controller.php │   │   ├── Kernel.php │   │   └── Middleware │   │   ├── EncryptCookies.php │   │   ├── RedirectIfAuthenticated.php │   │   └── VerifyCsrfToken.php │   ├── Providers │   │   ├── AppServiceProvider.php │   │   ├── AuthServiceProvider.php │   │   ├── BroadcastServiceProvider.php │   │   ├── EventServiceProvider.php │   │   └── RouteServiceProvider.php │   └── User.php ├── artisan ├── bootstrap │   ├── app.php │   ├── autoload.php │   └── cache ├── composer.json ├── config │   ├── app.php │   ├── auth.php │   ├── broadcasting.php │   ├── cache.php │   ├── compile.php │   ├── database.php │   ├── filesystems.php │   ├── mail.php │   ├── queue.php │   ├── services.php │   ├── session.php │   └── view.php ├── database │   ├── factories │   │   └── ModelFactory.php │   ├── migrations │   │   ├── 2014_10_12_000000_create_users_table.php │   │   └── 2014_10_12_100000_create_password_resets_table.php │   └── seeds │   └── DatabaseSeeder.php ├── gulpfile.js ├── package.json ├── phpunit.xml ├── public │   ├── css │   │   └── app.css │   ├── favicon.ico │   ├── index.php │   ├── js │   │   └── app.js │   ├── robots.txt │   └── web.config ├── readme.md ├── resources │   ├── assets │   │   ├── js │   │   │   ├── app.js │   │   │   ├── bootstrap.js │   │   │   └── components │   │   │   └── Example.vue │   │   └── sass │   │   ├── app.scss │   │   └── _variables.scss │   ├── lang │   │   └── en │   │   ├── auth.php │   │   ├── pagination.php │   │   ├── passwords.php │   │   └── validation.php │   └── views │   ├── errors │   │   └── 503.blade.php │   ├── vendor │   └── welcome.blade.php ├── routes │   ├── api.php │   ├── console.php │   └── web.php ├── server.php ├── storage │   ├── app │   │   └── public │   ├── framework │   │   ├── cache │   │   ├── sessions │   │   └── views │   └── logs └── tests ├── ExampleTest.php └── TestCase.php

app目录是开发的核心目录

  • app/Console 主要是和自定义Artisan命令相关
  • app/Exceptions 异常捕获相关,可以编写自定义异常
  • app/Http/Controllers 控制器相关
  • app/Http/Middleware 中间件,进入控制器之前,可以对URL进行拦截做权限判断,登录判断等
  • app/Http/request 默认不存在,可以通过命令生成,主要是和参数验证相关
  • app/Http/Providers 服务提供者类
  • app/Http/Jobs 默认不存在,可以通过命令生成,用于存放队列任务。可以将耗时任务放到这里
  • bootstrap 启动时,需要加载一些必要的文件
  • config 存放配置文件,也可以自定义配置文件
  • database 数据库相关,可以通过代码生成数据库表和产生一些测试数据
  • public/index,php 系统默认入口文件,需要在服务器端指定
  • resources 资源文件
  • routes 路由文件,laravel的路由会有一个统一的入口文件,就是在这里配置的

路由

单个路由

  • Route::get($uri, $callback);
  • Route::post($uri, $callback);
  • Route::put($uri, $callback);
  • Route::patch($uri, $callback);
  • Route::delete($uri, $callback);

路由群组

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
Route::group(['namespace'=>'Admin','prefix'=>'api'],function() { //Admin 命名空间 api 路由前缀 Route::post('/admin/test1', 'AdminController@tes1'); Route::get('/admin/test2', 'AdminController@tes2'); Route::get('/admin/test3', 'AdminController@test3'); Route::group(['middleware' => ['login.auth']], function () { // 使用 login.auth 中间件 Route::Get('/admin/index', 'TestController@index'); Route::Put('/admin/update', 'MemberController@update'); Route::post('/admin/store', 'MemberController@store'); }); });

中间件

1.使用命令生成中间件

复制代码
1
php artisan make:middleware checkAge

2.会在 app/Http/Middleware 目录下生成 checkAge.php,可以在handle方法中判断参数是否合法 或者做登录验证

复制代码
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
<?php namespace AppHttpMiddleware; use Closure; class checkAge { /** * Handle an incoming request. * * @param IlluminateHttpRequest $request * @param Closure $next * @return mixed */ public function handle($request, Closure $next) { $input = $request->input(); if(!isset($input['age']) || $input['age']>120){ $return_value = array( 'code' =>config('statuscode.parameter_error'), 'message' =>'error', ); return response()->json($return_value); } return $next($request); } }

3. 还需要在Kernel.php文件中注册这个中间件

复制代码
1
2
3
protected $routeMiddleware = [ 'checkAge'=>AppHttpMiddlewareAuthorityAuth::class, ];

控制器

1.使用命令生成中间件,控制器会默认生成到 AppHttpControllers 目录下,并且会自动生成Admin控制器

复制代码
1
php artisan make:controller Admin/LoginController.php

2.关于控制器的命名空间

默认情况下,RouteServiceProvider 中载入 routes.php 文件,并且该路由群组指定定了群组中路由控制器所在的命名空间。如果你在 AppHttpControllers 目录下选择使用 PHP 命名空间嵌套或组织控制器,只需要使用相对于AppHttpControllers 命名空间的指定类名即可。因此,如果你的完整控制器类是AppHttpControllersAdminLoginController,你可以像这样注册路由:

复制代码
1
Route::get('foo', 'AdminLoginController@method');

响应

1.引入相应相关包

复制代码
1
use IlluminateSupportFacadesResponse;

2.返回json和jsonp数据

复制代码
1
2
return response()->json($return_value); return response()->jsonp($return_value);

3.添加响应头

复制代码
1
2
3
4
return response($content) ->header('Content-Type', $type) ->header('X-Header-One', 'Header Value') ->header('X-Header-Two', 'Header Value');

3.添加Cookie

复制代码
1
2
3
return response($content) ->header('Content-Type', $type) ->cookie('name', 'value', $minutes);

参数验证

1.使用命令生成验证文件 会在app/Http/Requests 目录下生成 LoginRequest.php文件

复制代码
1
php artisan make:request LoginRequest

2.修改验证文件 rules方法为验证规则,response为验证失败返回的数据

复制代码
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
public function authorize() { return true; } public function response(array $errors) { $fields = array(); foreach($errors as $key=>$error){ } $return_value = array( 'code' =>config('statuscode.parameter_error'), 'fields' =>$fields ); return response()->json($return_value); } /** * Get the validation rules that apply to the request. * * @return array */ public function rules() { return [ 'data.param1' =>'required', 'data.param2' =>'required|in:1,2,3', 'data.param3' =>'required', ]; }

3.引入验证文件 需要将默认的参数类型替换为LoginRequest

复制代码
1
2
3
4
5
6
7
use AppHttpRequestsLoginRequest.php; public function login(LoginRequest $request){ }

异常捕获

复制代码
1
目录/app/Exceptions下有一个Handle.php文件 这里可有两个方法可以捕获异常
  • report 方法用于记录异常或将其发送到外部服务
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
$reflector = new ReflectionClass($exception); $exception_name = $reflector->getShortName(); if($exception_name !== 'ValidationException'){ $file = $exception->getFile(); $line = $exception->getLine(); $message = $exception->getMessage(); $error = array( 'exception_name' =>$exception_name, 'uri' =>Request::getRequestUri(), 'file' =>$file, 'line' =>$line, 'message' =>$message, ); ExceptionLog::error('Exception',$error,'exception'); }
  • render 方法负责将异常转换成 HTTP 响应发送给浏览器
复制代码
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
$reflector = new ReflectionClass($exception); $exception_name = $reflector->getShortName(); $file = $exception->getFile(); $line = $exception->getLine(); $message = $exception->getMessage(); $exception_value = array( 'code' =>config('statuscode.fail_server'), 'fields'=>array( 'server_error'=>array( 'field' =>'server_error', 'message' =>$message, 'file' =>$file, 'line' =>$line ) ) ); $return_value = array( 'code' =>'500', 'message' =>'/error?code=500', 'file' =>$file, 'line' =>$line, 'error_message' =>$message, ); return response()->json($return_value);

自定义 Artisan 命令行工具

生成文件

复制代码
1
php artisan make:command Task #app/Console/Commands目录下会生成一个Task.php文件

打开文件 并编辑 修改文件如下

复制代码
1
2
3
4
5
6
7
8
9
protected $signature = 'Task:Calculate'; ##命令 protected $description = 'Calculate Data'; ##描述 public function handle() { sleep(1); echo "Calculate Data"; ##计算任务 }

注册命令

复制代码
1
2
3
4
## 编辑 app/Console/Kernel.php protected $commands = [ AppConsoleCommandsTask::class ];

查看命令

复制代码
1
2
3
root@ubuntu:/www# php artisan --list | grep Task Task Task:Calculate Calculate Data

运行命令

复制代码
1
php artisan Task:Calculate ##输出calculate data

Service Provider

复制代码
1
2
laravel 实现了 IOC注册了特定的服务 这里通过curl插件做一下演示 服务提供者需要在每个环境下都要加载,只要把它放在这个数组下面就可以了

1.安装

复制代码
1
composer require ixudra/curl ##通过composer安装插件

2.注册服务

复制代码
1
IxudraCurlCurlServiceProvider::class ##编辑 config/app.php文件 在providers文件中添加服务

3.使用

复制代码
1
2
3
4
use IxudraCurlFacadesCurl; $response = Curl::to('http://local.laravel.com/api') ->get();

任务调度

复制代码
1
2
3
利用linux的crontab 可以部署不同的任务 如果有多个任务需要部署 则需要编辑多个crontab任务 laravel的 app/Console/Kernel.php文件 提供了一个 schedule 方法 这里可以定义不同的时间 执行不同的命令
复制代码
1
2
3
4
5
6
7
8
//每天凌晨2点执行计算任务 $schedule->command('Task:Calculate') ->withoutOverlapping() ->dailyAt('2:00'); //每小时执行计算任务 $schedule->command('Task:Calculate') ->hourly();

注册服务 监听sql

复制代码
1
希望根据不同环境加载 则编辑app/Providers/AppServiceProvider 文件
复制代码
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
public function register() { if ($this->app->environment() !== 'production') { $this->dbQuerySql();; } public function dbQuerySql(){ DB::listen( function ($sql) { foreach ($sql->bindings as $i => $binding) { if ($binding instanceof DateTime) { $sql->bindings[$i] = $binding->format(''Y-m-d H:i:s''); } else { if (is_string($binding)) { $sql->bindings[$i] = "'$binding'"; } } } if(env('DEBUG_SQL_INSERT')){ //只记录 insert sql语句 $sql_type = strstr($sql->sql,"insert"); if(!$sql_type) return; } $query = str_replace(array('%', '?'), array('%%', '%s'), $sql->sql); $query = vsprintf($query, $sql->bindings); $log = array( 'query'=>$query, ); Log::debug('sql_log',$log,'sql_log'); } ); } }

队列

复制代码
1
laravel实现了队列服务 目的是将耗时的任务延时处理 从而尽快返回请求 队列支持数据库,Redis等类型。 配置文件在config/queue.php文件中

使用数据库来驱动队列

创建数据库

复制代码
1
2
php artisan queue:table //生成数据库队列的 migration php artisan migrate //创建该数据库队列表

创建队列

复制代码
1
php artisan make:job SleepJob
复制代码
1
队列创建完成之后 会在app/Jobs目录下生成一个SleepJob.php文件
复制代码
1
2
3
4
5
6
7
8
9
public function handle() { //在handle方法中执行耗时操作 $value = array( 'time'=>date('Y-m-d H:i:s') ); file_put_contents('./tmp.log',json_encode($value).PHP_EOL,FILE_APPEND); sleep(2); }

执行队列

复制代码
1
dispatch(new AppJobsSleepJob());

修改配置 异步执行job

  • 编辑.env文件QUEUE_DRIVER=database

查看jobs表数据

复制代码
1
2
3
4
5
6
7
8
9
10
{ "displayName":"AppJobsSleepJob", "job":"IlluminateQueueCallQueuedHandler@call", "maxTries":null, "timeout":null, "data":{ "commandName":"AppJobsSleepJob", "command":"O:17:"AppJobsSleepJob":4:{s:6:"*job";N;s:10:"connection";N;s:5:"queue";N;s:5:"delay";N;}" } }

消费队列数据

复制代码
1
2
$ php artisan queue:work Processing: AppJobsSleepJob
复制代码
1
队列数据执行完成之后 会自动从数据库中移出

重启队列

复制代码
1
队列的数据 只会加载一次 如果修改了代码则需要重启队列
复制代码
1
2
$ php artisan queu:restart Broadcasting queue restart signal.

守护进程Supervisor

复制代码
1
为了防止队列挂掉 则可以配合守护进程

转载于:https://www.cnblogs.com/alin-qu/p/8166281.html

最后

以上就是机智夕阳最近收集整理的关于laravel使用总结(一)安装路由中间件控制器响应参数验证异常捕获自定义 Artisan 命令行工具的全部内容,更多相关laravel使用总结(一)安装路由中间件控制器响应参数验证异常捕获自定义内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(76)

评论列表共有 0 条评论

立即
投稿
返回
顶部