Laravel 4 Artisan 命令行实战

Laravel 4 Artisan 命令行实战

需求

有一个需求, 需要把已有的老数据做整理, 为每篇 Topic 生成一个摘要信息, 并放到数据库里面, 方便以后的读取.

对于这个需求我们通过扩展 Laravel 4 的 Artisan 命令来实现.

创建命令

1. 命令行生成文件

以下命令会在 app/commands 文件夹中生成 TopicMakeExcerptCommand.php 文件

$ php artisan command:make TopicMakeExcerptCommand
Command created successfully.

2. 激活 Artisan 命令行

app/start/artisan.php 文件里面, 添加以下

Artisan::add(new TopicMakeExcerptCommand);

3. 加入业务逻辑代码

第一步生成的 TopicMakeExcerptCommand.php 文件, 修改以下区域

<?php

use Illuminate\Console\Command;
use Symfony\Component\Console\Input\InputOption;
use Symfony\Component\Console\Input\InputArgument;

class TopicMakeExcerptCommand extends Command {

  /**
   * 1. 这里是命令行调用的名字, 如这里的: `topic:excerpt`, 
   * 命令行调用的时候就是 `php artisan topic:excerpt`
   *
   * @var string
   */
  protected $name = 'topic:excerpt';

  /**
   * 2. 这里填写命令行的描述, 当执行 `php artisan` 时
   *   可以看得见.
   *
   * @var string
   */
  protected $description = '这里修改为命令行的描述';

  /**
   * Create a new command instance.
   *
   * @return void
   */
  public function __construct()
  {
    parent::__construct();
  }

  /**
   * 3. 这里是放要执行的代码, 如在我这个例子里面,
   *   生成摘要, 并保持.
   *
   * @return mixed
   */
  public function fire()
  {
        $topics = Topic::all();
        $transfer_count = 0;

        foreach ($topics as $topic) {
          if (empty($topic->excerpt))
          {
              $topic->excerpt = Topic::makeExcerpt($topic->body);
              $topic->save();
              $transfer_count++;
          }
        }
        $this->info("Transfer old data count: " . $transfer_count);
        $this->info("It's Done, have a good day.");
  }
}
?>

4. 命令行调用

先查看下是否注册成功, 直接运行:

php artisan

如以下图片:

开始执行命令

执行结果如下图:

搞定 :dancer:

最终的代码以这里为准 TopicMakeExcerptCommand.php


欢迎关注 LaravelTips, 这是一个专注于为 Laravel 开发者服务, 致力于帮助开发者更好的掌握 Laravel 框架, 提升开发效率的微信公众号.

摈弃世俗浮躁,追求技术精湛
本帖已被设为精华帖!
Summer
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
讨论数量: 10
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!