簡體   English   中英

在Laravel 5.1中整理控制器

[英]Tidy up controller in Laravel 5.1

我正在建立一個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

任何建議/鏈接等都很好。 謝謝!

如果您經常/總是使用相同的屬性集實例化對象,則可以輕松地將該代碼提取到模型構造函數中,例如:

//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();

您的實現沒有錯。 我建議您在調用save()方法時使用try catch ,以防出現問題,並向用戶發送一個不錯的錯誤消息,例如“出現問題,請聯系管理員”。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM