Laravel 4 Artisan 命令行实战
9

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 框架, 提升开发效率的微信公众号.


Practice makes perfect.

本帖已被设为精华帖!
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
讨论数量: 10
(= ̄ω ̄=)··· 暂无内容!

  • 请注意单词拼写,以及中英文排版,参考此页
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`, 更多语法请见这里 Markdown 语法
  • 支持表情,使用方法请见 Emoji 自动补全来咯,可用的 Emoji 请见 :metal: :point_right: Emoji 列表 :star: :sparkles:
  • 上传图片, 支持拖拽和剪切板黏贴上传, 格式限制 - jpg, png, gif
  • 发布框支持本地存储功能,会在内容变更时保存,「提交」按钮点击时清空
  请勿发布不友善或者负能量的内容。与人为善,比聪明更重要!