2014-01-29 3 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'); 
    } 

} 

И в классе Deals , вы делаете все, что вам нужно делать с вашими данными

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.

В принципе, настройте функцию в вашем классе «Сделки», которая будет автоматически обрабатывать форматирование текста, когда данные будут установлены/сохранены с помощью модели 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

хорошо, я проверю его –

Смежные вопросы