从控制器调用Laravel模型?这是正确的方法吗?
我正在尝试拆分一些代码,让模型处理所有数据库内容,比如创建、检索等 当时所有的代码都在控制器中,我很快意识到代码非常混乱,所以我想做如下事情:从控制器调用Laravel模型?这是正确的方法吗?,laravel,laravel-5,Laravel,Laravel 5,我正在尝试拆分一些代码,让模型处理所有数据库内容,比如创建、检索等 当时所有的代码都在控制器中,我很快意识到代码非常混乱,所以我想做如下事情: public function incompletedEntity(EntityRequestPartial $request) { $partial_entity = EntityTrash::saveEntity(); } 我的模型是: public static function saveEntity(Request $request)
public function incompletedEntity(EntityRequestPartial $request)
{
$partial_entity = EntityTrash::saveEntity();
}
我的模型是:
public static function saveEntity(Request $request)
{
$entity = new EntityTrash();
$entity->lat = $request->input('lat');
$entity->lng = $request->input('lng');
$entity->slug = $request->input('name');
$user_id = Auth::id();
$entity->name = $request->input('name');
$entity->type = $request->input('type');
$entity->email = $request->input('email');
$entity->tags = $request->input('tags');
$entity->slug = $user_id;
$entity->building_name = $request->input('building_name');
$entity->address = $request->input('address');
$entity->town = $request->input('town');
$entity->postcode = $request->input('postcode');
$entity->telephone = $request->input('telephone');
$entity->save();
}
但是,我不能调用该函数,因为我没有从控制器传递参数,正确的方法是什么?我应该在控制器中执行$request->input并将其分配给数组吗?并在控制器中处理它?如果您希望拆分代码,以便控制器不接触模型,我建议您查看存储库模式 这背后的想法是,在您的控制器中
$this->entityRepository->create($data);
可以传入数组,也可以传入每个单独的属性
$this->entityRepository->create($lat, $lng, $name, $type..etc);
这样,控制器就可以检索所有数据并对其进行验证
$data = $request->only(['lat', 'lng', 'name', 'type', 'email', 'tags', ..etc]);
$validator = Validator::make($data, ['name' => ['required']]);
显然,您可以使用请求验证或任何您熟悉的方法
这样,您的控制器负责接收数据并对其进行验证。然后,它可以盲目地将它传递给存储库,知道它是有效的,并且相信存储库会完成它的工作
作为补充说明,我强烈建议您不要让模型直接与请求对象交互。
lighting\Http\Request
类属于Http层,模型属于持久层。这两个层永远不应该知道另一层的存在。如果您希望拆分代码以便控制器不接触模型,我建议您查看存储库模式
这背后的想法是,在您的控制器中
$this->entityRepository->create($data);
可以传入数组,也可以传入每个单独的属性
$this->entityRepository->create($lat, $lng, $name, $type..etc);
这样,控制器就可以检索所有数据并对其进行验证
$data = $request->only(['lat', 'lng', 'name', 'type', 'email', 'tags', ..etc]);
$validator = Validator::make($data, ['name' => ['required']]);
显然,您可以使用请求验证或任何您熟悉的方法
这样,您的控制器负责接收数据并对其进行验证。然后,它可以盲目地将它传递给存储库,知道它是有效的,并且相信存储库会完成它的工作
作为补充说明,我强烈建议您不要让模型直接与请求对象交互。
lighting\Http\Request
类属于Http层,模型属于持久层。这两层永远不应该知道另一层的存在。一般来说,您的模型永远不应该依赖于请求对象。模型可用于对数据库或其他存储区域的任何访问。许多访问点可能根本不是HTTP
您的HTTP控制器应始终用于将信息从HTTP请求传递到应用程序的更深层(例如模型)。因此,如果您在任何地方使用请求对象,它应该位于HTTP控制器中
我认为,重要的是,您要了解为什么控制器层存在,以及为什么我们不只是拥有模型和视图。一般来说,您的模型不应该依赖于请求对象。模型可用于对数据库或其他存储区域的任何访问。许多访问点可能根本不是HTTP 您的HTTP控制器应始终用于将信息从HTTP请求传递到应用程序的更深层(例如模型)。因此,如果您在任何地方使用请求对象,它应该位于HTTP控制器中
我认为,重要的是,您应该回顾一下为什么控制器层存在,为什么我们没有模型和视图。我建议您先看看正式的Laravel文档:以及控制器/雄辩的模型章节。此外,当前Laracon的Adam Wathans演讲是进一步重构的好读物 首先,利用Laravel控制器的CRUD模式以及雄辩的模型。然后通过创建/保存方法将验证数据传递给模型
<?php
namespace App\Http\Controllers;
use App\EntityTrash;
use App\Http\Controllers\Controller;
class EntityTrashController extends Controller
{
public function create(EntityRequestPartial $request)
{
return EntityTrash::create($request->only(['lat', 'lng', 'name', 'type', 'email', ...]));
}
}
我建议您先看看正式的Laravel文档:以及控制器/雄辩的模型章节。此外,当前Laracon的Adam Wathans演讲是进一步重构的好读物
首先,利用Laravel控制器的CRUD模式以及雄辩的模型。然后通过创建/保存方法将验证数据传递给模型
<?php
namespace App\Http\Controllers;
use App\EntityTrash;
use App\Http\Controllers\Controller;
class EntityTrashController extends Controller
{
public function create(EntityRequestPartial $request)
{
return EntityTrash::create($request->only(['lat', 'lng', 'name', 'type', 'email', ...]));
}
}
您应该将所有CRUD方法保留在控制器中。。。该模型只需要定义getter和setter并设置可填充属性。。。该模型仅用于定义getter和setter以及设置可填充属性。