#3分钟短文 | Laravel 命令行调用控制器方法,你会几个?
引言
有时候为了不重写代码,避免冗余无用重复的代码在程序内到处都是。我们总是想方设法 把写过的逻辑拿过来使用。今天要说的就是在laravel中,能不能在命令行中调用控制器的方法, 怎么去实现?
学习时间
为了快速测试控制器方法可不可行,我们有时候会想,能不能像这样在命令行直接访问某个控制器路由的方法。
|
|
要知道国内号称用途最广的thinkphp都已经这样用了,laravel可落后乎?当然不可。
于是我们想,既然laravel提供了artisan的命令行调用,何不先做一个命令,然后在命令内使用程序方法 调用控制器呢。说来就动手开写。
首先创建一个命令类。
|
|
系统都是按照模板生成的 CallRoute.php 文件,我们只捡特殊的部分贴出来。 首先定义命令格式和传入的参数。
|
|
然后是用法的描述:
|
|
要访问uri地址,我们肯定要构造一个请求体,传入对应的参数,这样控制器方法才能正确地接收。
|
|
这里构造的请求体非常灵活,你可以模拟任何有效的请求,地址,方法,参数,等等。
然后重点来了,我们使用laravel框架提供的 Container
容器构造一个调用:
|
|
就酱。
为了让你的命令在laravel生命周期内可被注册,还需要手动注册一下。在文件 app/Console/Kernel.php
内加这么一行:
|
|
现在你就可以在命令行使用了:
|
|
当然了如果你使用的laravel版本比较高,其提供了 tinker 功能,会让你眼前一亮,相见恨晚。 比如原始的请求路由地址是这样的:
|
|
那么我们可以直接使用容器实例化一个控制器对象:
|
|
然后使用全局容器盒子调用控制器对象的方法,并传送参数:
|
|
是不是超级简单,有没有?可见,laravel容器盒子这种设计理念,几乎可以跨任意区域调用, 提供的强大能力,非同寻常。
写在最后
本文通过详细地设计实现了命令行调用控制器方法的步骤,其中低版本的推荐第一种写法, 通过写入请求体到框架上下文进行通讯;高版本的可以随便开挂,容器盒子威力无比!
Happy coding :-)
我是@程序员小助手,专注编程知识,圈子动态的IT领域原创作者。