2014-02-24 106 views
1

我正在寻找帮助实施我正在开发的一个小型Laravel 4项目的一些最佳实践。我的下面的代码片段被简化以帮助理解我想要理解的内容。Laravel Artisan命令和存储库数据类型检查


注库片段

... 

public function deleteNotesOlderThan($days) 
{ 
    if (!is_int($days)) { 
     /* @TODO - Something here and return error possibly NULL? */ 
    } 

    $date = new \Carbon\Carbon(); 
    $date = $date->subDays($days); 
    Note::where('created_at', "<", $date)->delete(); 
} 

... 

我在注射控制器和Artisan命令这个特殊的存储库。我的问题涉及检查参数$ days的数据类型并在正确的位置返回错误。如果$ days不是一个int,我应该返回哪种类型的错误,可以在我注入的控制器和命令中使用?看到我的命令下面。


注工匠命令:

public function fire() 
{ 
    $days = $this->option('days'); 

    if (!$days) { 
     $days = 30; 
    } 

    if(!is_int($days)) { 
     $this->error("Failure - The 'Days' option must be a valid integer"); 
     return false; 
    } 

    // $this->note is being injected into command via construct 
    $this->note->deleteNotesOlderThan($days); 

    $this->info('Success - Notes older than ' . $days . ' days(s) have been deleted.'); 
} 

正如你可以在我的命令看,我检查,以确保$天又是一个整数。我想我的问题是,这里最好的做法是什么。如果我正在执行$ this-> note-> deleteNotesOlderThan($ days)并且该特定的方法已经确保$ days是一个int,那么给出错误但干什么的最好方法是什么?我希望这是有道理的。

在此先感谢。

回答

1

在你的函数,

public function deleteNotesOlderThan($days) 
    { 
     if (!is_int($days)) { 
      return FALSE; 
     } 

     $date = new \Carbon\Carbon(); 
     $date = $date->subDays($days); 
     Note::where('created_at', "<", $date)->delete(); 
     return TRUE; 

    } 

而在工匠命令,


 public function fire() 
     { 
      $days = $this->option('days');    
      if (!$days) { 
       $days = 30; 
      }  
      if($this->note->deleteNotesOlderThan($days)){ 
       $this->info('Success - Notes older than ' . $days . ' days(s) have been deleted.'); 
      }else{ 
       $this->error("Failure - The 'Days' option must be a valid integer"); 
      }     
     } 

这是我会怎么做。

+0

谢谢!我结束了这样的事情。 – Pathsofdesign