2014-01-29 68 views
1

我試圖維持一個瘦身控制器,但我仍然習慣於什麼可以去我的控制器,因爲之前我曾經堆積它的一切。在這個例子中,我將驗證的數據插入數據庫,我認爲這是正確的。我感到困惑的是,我想要使用其中一個字段輸入,操作其文本格式,然後將其保存到數據庫中的另一個字段。我寫的作品,但我不知道是否有好的代碼在我的控制器,如果不是它應該去哪裏?開始Laravel 4 - 保持控制器瘦身

控制器

public function store() 
{ 
    $validation = new Services\Validators\Deal; 

    if($validation->passes()) 
    { 
     $deals = Deals::create(Input::all()); 

     // start code in question 
     $image = Input::get('company'); 
     $image = strtolower($image); 
     $image = str_replace(" ", "-", $image); 
     $image .= ".png"; 

     $deals->image = $image; 
     $deals->save(); 
     // end code in question 

     return Redirect::to('deals/create') 
      ->with('message', 'Deal Created'); 
    } 

    return Redirect::back() 
     ->withInput() 
     ->withErrors($validation->errors); 
} 

總括來說,我不知道,如果有問題的代碼在我的控制器所屬的,如果沒有,哪裏會是更好地?感謝您的任何見解。

回答

2

任何業務邏輯應該被放置在模型或資料庫和您的控制器應看起來就像

<?php 

class DealsController extends controller { 

    public function __construct(Deals $deals) //// <---- Dependency Injection 
    { 
     $this->deals = $deals; 
    } 

    public function store() 
    { 
     try 
     { 
      $this->deals->insertRow(Input::all()); 
     } 
     catch (\Exceptions\ValidationException $e) 
     { 
      return Redirect::back() 
       ->withInput() 
       ->withErrors($this->deals->errors); 
     } 

     return Redirect::to('deals/create') 
      ->with('message', 'Deal Created'); 
    } 

} 

而在你的交易類,你可以做任何你需要處理的數據

class Deals extends Eloquent { 

    public function insertRow($input) 
    { 
     $validation = new Services\Validators\Deal; 

     if($validation->passes()) 
     { 
      $deals = Deals::create($input); 

      // start code in question 
      $image = $input['company']; 
      $image = strtolower($image); 
      $image = str_replace(" ", "-", $image); 
      $image .= ".png"; 

      $deals->image = $image; 
      $deals->save(); 
      // end code in question 
     } 

     $this->errors = $validation->errors; 

     throw new \Exceptions\ValidationException("Error inserting Deals", $validation->errors); 
    } 

} 

這是未經測試的和一個不真正重構的代碼,但我希望你能看到它的一個點。

+0

謝謝!這很好地回答了我的問題。 –

0

您實際上可以刪除所有有問題的代碼,而是使用Laravel Mutator。

基本上,在您的Deals類中設置一個函數,當將要通過Model Eloquent :: create或update更新數據時,它將自動處理文本格式。

喜歡的東西

public function setImageAttribute($value) 
{ 
    $image = strtolower($value); 
    $image = str_replace(" ", "-", $image); 
    $image .= ".png"; 

    $this->attributes['image'] = $image; 
} 

參考http://laravel.com/docs/eloquent#accessors-and-mutators

+0

感謝您的提示,我並不知道Laravel Mutator –

+0

不錯,我會檢查出來的 –