laravel(源码阅读):kernel过程和console调度artisan命令

http kernel

使用相关:通过artisan命令、计划任务、队列启动框架进行处理的

  1. 创建应用实例
  2. 绑定内核到容器
  3. 解析http内核实例
  4. 处理http请求
  5. 发送响应
  6. 终止应用程序,中间件 terminable 善后。session写入存储器中。

Console

artisan工具:执行计划任务、异步队列,通过Console内核来实现。

内核绑定

  1. 定义调度
  2. 执行加载app里面的命令文件,并请求或者routes/console.php文件。
  3. 实例化时,定义ARTISAN_BINARY全局变量,并且绑定app和事件,启动回调执行定义console调度。

应用解析console内核

php 复制代码
   $kernel = $app->make(Illuminate\Contracts\Console\Kernel::class);
   $status = $kernel->handle(
      $input = new Symfony\Component\Console\Input\ArgvInput,
      new Symfony\Component\Console\Output\ConsoleOutput
   );

PHP是通过全局变量$_SERVER['argv']来接收所有的命令行输入的

执行命令任务

  1. _SERVER\['argv\],第一个0指的'artisan'字符串
  2. Symfony\Component\Console\Input处理输入
  3. Symfony\Component\Console\Output处理输出
  4. handle
    1. run
    2. doRun
      1. 解析命令名称
      2. 解析出入参
      3. 通过命令名称查找命令类
      4. 运行命令类
    3. doRunCommand
      1. run 处理任务,返回状态码。run方法定义在父类中,其中定义了子类的handle方法。
  5. 通过状态码结束进程,并判断是否执行成功。
相关推荐
wefly20172 小时前
免安装!m3u8live.cn在线 M3U8 播放器,小白也能快速上手
java·开发语言·python·json·php·m3u8·m3u8在线转换
luanma1509804 小时前
Laravel 10.x新特性全解析
php·laravel
Irene199112 小时前
JavaScript脚本加载的两种方式:defer/async 的区别
前端·javascript·php
luanma15098012 小时前
PHP vs C#:30字秒懂两大语言核心差异
android·开发语言·python·php·laravel
fresh hacker13 小时前
【Linux系统】通用的“系统排障”
linux·运维·服务器·网络·php
luanma15098013 小时前
Laravel 8.X重磅特性全解析
前端·javascript·vue.js·php·lua
luanma15098013 小时前
Laravel 9.x重磅升级:十大新特性解析
php·laravel
zhangren0246813 小时前
PHP vs C++:从Web脚本到系统编程的终极对比
开发语言·c++·php
luanma15098013 小时前
Laravel 7.X核心特性深度解析
android·开发语言·php·lua·laravel
IAUTOMOBILE15 小时前
两大王者-Laravel vs ThinkPHP:PHP 框架终极对决,谁更适合团队或者个人!
开发语言·php·laravel