我正在开发一个任务管理应用程序。在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中改进这一点?如何让我的模块更具原子性?
答案 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();
}
}