2014-12-24 3 views
1

Я использую модель для всех операций DBLaravel - Возможность иметь File Upload в модели

т.е.

В контроллере

public function VehicleProcess() 
{ 
$VehicleData = Input::all(); 
$validation = Validator::make($VehicleData, VehicleModel::$rules); // using model for validation 
if ($validation->passes()) 
    { 
    VehicleModel::create($VehicleData); //using model for creating table 
    return Redirect::to('vehicle')->withErrors('Vehicle Details Saved Succesfully'); 
    } 

Теперь я использую файл Загрузить

Итак, Получение файла

$file = Input::file('photo'); 

и хранить его в своем собственном пути назначения

Input::file('photo')->move($destinationPath, $fileName); 

Я делаю все это в контроллере,

Можно ли сделать эти вещи в модели, как отправка $ файл модели, если так Как я могу это сделать?

ответ

1

Вы можете обрабатывать запросы, как хотите. Laravel не заставляет вас программировать контроллеры определенным образом.

Разделение проблем, однако, является отличной практикой. In his book, Тейлор проливает свет на эту проблему, используя интерфейсы и инъекции зависимостей. В основном ваши контроллеры обычно зависят от некоторых интерфейсов. Для операций с БД, скажем, ваш VehicleController будет использовать VehicleRepository. А для манипулирования файловой системой ваш VehicleController будет использовать другой интерфейс (возможно, называется ImageManager). Все эти интерфейсы и их реализации вы будете кодировать самостоятельно.

Пример кода в контроллере:

class VehicleController extends BaseController { 


protected $vehicle; 

protected $imageManager; 


function __construct(VehicleRepositoryInterface $vehicle, ImageManager $imageManager) 
{ 
    $this->vehicle = $vehicle; 
    $this->imageManager = $imageManager; 
} 

Далее, вы должны закодировать класс ServiceProvider связать реализацию в интерфейсе, так что Laravel может автоматически загружать и впрыснуть, что внедрение в контроллер во время выполнения.

class RepositoryServiceProvider extends ServiceProvider{ 

/** 
* Register the service provider. 
* 
* @return void 
*/ 
public function register() 
{ 
    $this->app->bind(
     'VehicleRepositoryInterface', 
     'EloquentVehicleRepository' 
    ); 
} 

И этот blog article также очень хорошо обсуждает эту тему.

В целом, в вашем случае, вероятно, потребуется много манипуляций с файлами во многих контроллерах, поэтому я думаю, что лучше переместить такую ​​логику в конкретные интерфейсы и классы, чем кодировать ее в моделях.

Надеюсь, это поможет!

+0

Спасибо, будет функция ** __ ** конструкция получает '$ File' или' Input :: файл ('InsurancePhoto'); 'автоматически? – AngularAngularAngular

+0

Я предлагаю вам создать новую функцию в вашем файле, обрабатывающем определенный класс, который отвечает за сохранение файлов. Конструктор - это в значительной степени место, где вы позволяете Laravel вводить классы в ваш контроллер. – Carter

0

вы можете переопределить метод создания модели

class VehicleModel extends \Eloquent { 


public static function create(array $attributes) { 

     if(isset($attributes['photo'])){ 
      //put you file tranfer code 
      $attributes['photo'] = "demo.jpg"; 
     } 

     return parent::create($attributes); 
    } 
}