[英]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.