3分钟短文|Laravel命令行调用控制器方法,你会几个?
时间:2022-07-24
本文章向大家介绍3分钟短文|Laravel命令行调用控制器方法,你会几个?,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
引言
有时候为了不重写代码,避免冗余无用重复的代码在程序内到处都是。我们总是想方设法 把写过的逻辑拿过来使用。
今天要说的就是在laravel中,能不能在命令行中调用控制器的方法, 怎么去实现?
学习时间
为了快速测试控制器方法可不可行,我们有时候会想,能不能像这样在命令行直接访问某个控制器路由的方法。
php index.php --uri=controller/method/var1/var2
要知道国内号称用途最广的thinkphp都已经这样用了,laravel可落后乎?当然不可。
于是我们想,既然laravel提供了artisan的命令行调用,何不先做一个命令,然后在命令内使用程序方法 调用控制器呢。说来就动手开写。
首先创建一个命令类。
php artisan make:command CallRoute
系统都是按照模板生成的 CallRoute.php 文件,我们只捡特殊的部分贴出来。首先定义命令格式和传入的参数。
protected $signature = 'route:call {uri}';
然后是用法的描述:
protected $description = 'php artsian route:call /route';
要访问uri地址,我们肯定要构造一个请求体,传入对应的参数,这样控制器方法才能正确地接收。
$request = Request::create($this->argument('uri'), 'GET');
这里构造的请求体非常灵活,你可以模拟任何有效的请求,地址,方法,参数,等等。然后重点来了,我们使用laravel框架提供的 Container 容器构造一个调用:
app()->make(IlluminateContractsHttpKernel::class)->handle($request);
就酱。
为了让你的命令在laravel生命周期内可被注册,还需要手动注册一下。在文件 app/Console/Kernel.php 内加这么一行:
protected $commands = [
'AppConsoleCommandsCallRoute'
];
现在你就可以在命令行使用了:
php artisan route:call /path
当然了如果你使用的laravel版本比较高,其提供了 tinker 功能,会让你眼前一亮,相见恨晚。比如原始的请求路由地址是这样的:
URL: http://xxx.test/calendar?filter[id]=1&anotherparam=2
那么我们可以直接使用容器实例化一个控制器对象:
$cc = app()->make('AppHttpControllersCalendarController');
然后使用全局容器盒子调用控制器对象的方法,并传送参数:
app()->call([$cc, 'getCalendarV2'], ['filter[id]'=>1, 'anotherparam' => '2']);
是不是超级简单,有没有?可见,laravel容器盒子这种设计理念,几乎可以跨任意区域调用, 提供的强大能力,非同寻常。
- Mysql备份系列(1)--备份方案总结性梳理
- ASP.NET中常用的优化性能的方法(转贴,Icyer收集整理)
- 顶象全场景IoT安全方案解决物联网两大难题
- 诡异的【session丢失】和【<img src="">标签】
- TensorFlow核心使用要点
- “搜一搜”直达生活服务 微信连接移动消费新场景
- Linux服务器安全登录设置记录
- Linux系统下的ssh使用(依据个人经验总结)
- 从MapX到MapXtreme2004[4]-标注AutoLabel
- Linux下锁定账号,禁止登录系统的设置总结
- 深度解析 TypeConverter & TypeConverterAttribute (一)
- 从MapX到MapXtreme2004[7]-对Table、Feature等的理解
- 互联网赋能传统装企 “科技撬动力巨大”
- Python接口自动化-8-测试报告
- php概述
- php教程
- php环境搭建
- PHP书写格式
- php变量
- php常量
- PHP注释
- php数组
- php字符串 string
- PHP整型 integer
- PHP浮点型 float
- php布尔型
- php数据类型之数组
- php数据类型之对象
- php数据类型之null
- php数据类型之间的转换
- php运算符
- php表达式
- PHP循环控制
- PHP流程控制
- php函数
- php全局变量
- PHP魔术变量
- php命名空间
- php 日期
- PHP包含文件
- php文件
- PHP 文件上传
- php Cookies
- php Sessions
- php email
- php安全email
- php错误处理
- PHP异常处理
- php过滤器
- PHP 高级过滤器
- php json
- php 表单
- PHP MySQL 简介
- PHP 连接 MySQL
- php创建数据库
- php 创建表
- php mysq 插入数据
- PHP MySQL 插入多条数据
- PHP MySQL 预处理语句
- php mysql 读取数据
- php mysql where
- PHP MySQL Order By
- PHP MySQL Update
- PHP MySQL Delete
- php ODBC
- 刷题记录-猿辅导2020
- redis stream(一):stream命令入门
- os.path.basename()
- 利用frida与ida实战脱壳360加固
- 你知道C语言中的危险函数吗?
- python与安全(四)shell反弹
- 怎么快速修复 bug ?
- 变量类型(cpu/gpu)
- 【Go语言学习】匿名函数与闭包
- Python中两种UnboundLocalError的解决方法
- 传智播客OA项目学习--阶段二(实体设计及技巧)
- 小生归一(五)md5扩展长度攻击
- 传智播客OA项目学习--阶段二(系统管理模块)
- main函数中的argc和argv到底是个啥?
- 传智播客OA项目学习--阶段一(2、框架整合)