Laravel4 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 文件, 修改以下区域

  1. <?php 
  2.  
  3. use Illuminate\Console\Command; 
  4. use Symfony\Component\Console\Input\InputOption; 
  5. use Symfony\Component\Console\Input\InputArgument; 
  6.  
  7. class TopicMakeExcerptCommand extends Command { 
  8.  
  9.   /** 
  10.    * 1. 这里是命令行调用的名字, 如这里的: `topic:excerpt`,  
  11.    * 命令行调用的时候就是 `php artisan topic:excerpt` 
  12.    * 
  13.    * @var string 
  14.    */ 
  15.   protected $name = 'topic:excerpt'
  16.  
  17.   /** 
  18.    * 2. 这里填写命令行的描述, 当执行 `php artisan` 时 
  19.    *   可以看得见. 
  20.    * 
  21.    * @var string 
  22.    */ 
  23.   protected $description = '这里修改为命令行的描述'
  24.  
  25.   /** 
  26.    * Create a new command instance. 
  27.    * 
  28.    * @return void 
  29.    */ 
  30.   public function __construct() 
  31.   { 
  32.     parent::__construct(); 
  33.   } 
  34.  
  35.   /** 
  36.    * 3. 这里是放要执行的代码, 如在我这个例子里面, 
  37.    *   生成摘要, 并保持. 
  38.    * 
  39.    * @return mixed 
  40.    */ 
  41.   public function fire() 
  42.   { 
  43.         $topics = Topic::all(); 
  44.         $transfer_count = 0; 
  45.  
  46.         foreach ($topics as $topic) { 
  47.           if (emptyempty($topic->excerpt)) 
  48.           { 
  49.               $topic->excerpt = Topic::makeExcerpt($topic->body); 
  50.               $topic->save(); 
  51.               $transfer_count++; 
  52.           } 
  53.         } 
  54.         $this->info("Transfer old data count: " . $transfer_count); 
  55.         $this->info("It's Done, have a good day."); 
  56.   } 
  57. ?> 

4. 命令行调用

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

php artisan 

如以下图片:

开始执行命令

执行结果如下图:

转载请注明:代码家园 » Laravel4 Artisan命令行实战

评论列表(网友评论仅供网友表达个人看法,并不表明本站同意其观点或证实其描述)