>我正在使用模型进行所有数据库操作
即,
在控制器中
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);
我正在控制器中做这一切,
是否可以在模型中执行这些操作,例如将$file发送到模型,如果是,我该怎么做?
您可以根据需要处理请求。Laravel不会强迫您以特定方式对控制器进行编码。
然而,将关注点分开是一种很好的做法。在他的书中,Taylor使用接口和依赖注入来阐明这个问题。基本上,您的控制器通常依赖于某些接口。对于数据库操作,假设您的车辆控制器将使用车辆存储库。对于文件系统操作,您的车辆控制器将使用另一个接口(可能称为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'
);
}
这篇博客文章也很好地讨论了这个话题。
总之,在您的情况下,许多控制器很可能需要文件操作,因此我认为最好将此类逻辑移动到特定的接口和类中,而不是在模型中对其进行编码。
希望这有帮助!
你可以覆盖模型的创建方法
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);
}
}