在Laravel 5.1中整理控制器

时间:2015-07-23 15:24:49

标签: php laravel service repository laravel-5

我正在建立一个Laravel 5.1项目,并且我已经取得了很好的进展,但已经遇到了一些我正在努力解决的问题。

基本上,我一直在创建在我的控制器方法中插入数据库的对象。这并不是太糟糕,因为它们通常是单行的。

然而,我遇到了一个更复杂的数据库条目,我的控制器变得有些混乱。让我告诉你:

/**
 * Store a new ticket for the specified project.
 *
 * @param  int  $id
 * @param  TicketsRequest $request
 * @return Response
 */
public function store_ticket($id, TicketsRequest $request)
{
    $user_id = Auth::user()->id;
    $project_id = $id;

    $project_tickets = Ticket::whereProjectId($id);
    $project_ticket_id = $project_tickets->count() + 1;

    $ticket = new Ticket;
    $ticket->user_id = $user_id;
    $ticket->project_id = $project_id;
    $ticket->project_ticket_id = $project_ticket_id;
    $ticket->title = $request->title;

    $ticket->save();

    $ticket_update = new TicketUpdate;

    $ticket_update->user_id = $user_id;
    $ticket_update->ticket_id = $ticket->id;
    $ticket_update->status_id = $request->status_id;
    $ticket_update->priority_id = $request->priority_id;
    $ticket_update->assigned_to = $request->assigned_to;
    $ticket_update->description = $request->description;

    $ticket_update->save();

    return redirect('/projects');
}

正如您所看到的,我正在创建一个保存到数据库的故障单,然后还创建一个保存到数据库的故障单更新。

我想要做的是将此代码解压缩为“某事”以清理我的控制器。

在我的旅行中,我发现可能创建存储库可能是前进的方向。否则我在考虑某种服务,但我并不确信这是前进的方向。

我订阅了Laracasts并发现了以下视频,但它有点过时,我确信这仍然是在Laravel 5.1中做到这一点的'正确'方式(我发现事情似乎有一个与旧版本相比,5.1中的自然之家。)

https://laracasts.com/lessons/repositories-simplified

任何建议/链接等都会很棒。谢谢!

2 个答案:

答案 0 :(得分:0)

如果经常使用相同的属性集实例化对象,则可以轻松地将该代码提取到模型构造函数中,例如:

//in your model
public function __construct($user_id, $ticket_id, $request) {
  $this->user_id = $user_id;
  $this->ticket_id = $ticket_id;
  $this->status_id = $request->status_id;
  $this->priority_id = $request->priority_id;
  $this->assigned_to = $request->assigned_to;
  $this->description = $request->description;
}

// in your controller
$ticket_update = new TicketUpdate($user_id, $ticket->id, $request);
$ticket_update->save();

答案 1 :(得分:0)

您的实施没有错。我建议您在调用try catch方法时使用save()以防出现问题并向用户发送一个错误的错误,例如&#34;出现问题,请联系您的管理员&#34;。< / p>