如何在Laravel 5项目中组织课程?

时间:2015-08-19 07:22:29

标签: php oop laravel laravel-5

我正在开发一个任务管理应用程序。在App中有一个用户模型,还有 Project Task 模型。

为了让用户添加项目和相关任务,我在模型级别所做的就是:

class Project extends Model
{
    public function add($user_id,$task_details)
    {
        //Add Project Meta
        $this->title = "Project Title";
        $this->description "Desc"
        $this->save()

        for($t=0;$t<count($task_details);$t++) {
        //Add Task Details
        $task = new Task();
        $task->title = $task_details["title"];
        $task->description = $task_details["description"];
        $task->save();
        }
    }
}

对我来说看起来很笨拙。如何在Laravel 5中改进这一点?如何让我的模块更具原子性?

1 个答案:

答案 0 :(得分:3)

是的,它很笨拙。您应该使用存储库模式,以便不存在此类多重职责。 而且Eloquent已经有了像 findorCreate 这样的创建方法,或者只是创建方法。 这是UserRepository的简单示例。

//UserRepository
<?php namespace App\Repository\User;
use App\User;


class UserRepository{
   public $model;
   public function __construct(User $userModel) // type hinting the User Model
   {
     $this->model=$userModel;
   }
   public function create($inputs)
   { 
      return $this->model->create($inputs);
   }

}


// UserController

<?php namespace App\Http\Controllers;
use \App\Repository\User\UserRepository;
class UserController extends Controller{

   public $userRepo;

   public function __construct(UserRepository $userRepository) //type hinting the userRepository Class
   {
      $this->userRepo=$userRepository;
   }

   public function getUser($id)
   {
      return $this->userRepo->model->findorfail($id);
   }
   public function getCreate()
   {
      if($this->userRepo->create(Input::all())
        return view('success');
      return Redirect->back()->withErrors();
   }
}