作者热门文章
- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
在有人问之前,我已经研究过CRUD
生成器并且我知道所有关于 Laravel
资源路由的信息,但这并不是我在这里的目的。
我想要做的是创建一个带有几个参数的路由,以及一个全局类(使用/扩展?)用于简单 CRUD
操作的模型 Controller 。我们有 20 个左右的模型,为每个表创建资源 Controller
比寻找一种方法来创建全局 CRUD
类来处理所有“ api
"类型调用和任何 ajax json
请求,如创建/更新/销毁语句。
所以我的问题是什么是构建一个类来处理我们拥有的每个 Model
的所有 CRUD
请求的最干净和最好的方法,而无需资源 controller
每个 model
?我已经尝试对此进行研究,但似乎找不到任何链接,除了指向 CRUD
生成器的链接和描述 laravel 资源路径
的链接。
最佳答案
最简单的方法是执行以下操作:
为您的资源 Controller 添加路由:
Route::resource('crud', 'CrudController', array('except' => array('create', 'edit')));
创建你的 crud Controller
<?php namespace App\Http\Controllers;
use Illuminate\Routing\Controller;
use App\Models\User;
use App\Models\Product;
use Input;
class CrudController extends Controller
{
const MODEL_KEY = 'model';
protected $modelsMapping = [
'user' => User::class,
'product' => Product::class
];
protected function getModel() {
$modelKey = Input::get(static::MODEL_KEY);
if (array_key_exists($modelKey, $this->modelsMapping)) {
return $this->modelsMapping[$modelKey];
}
throw new \InvalidArgumentException('Invalid model');
}
public function index()
{
$model = $this->getModel();
return $model::all();
}
public function store()
{
$model = $this->getModel();
return $model::create(array_except(Input::all(), static::MODEL_KEY));
}
public function show($id)
{
$model = $this->getModel();
return $model::findOrFail($id);
}
public function update($id)
{
$model = $this->getModel();
$object = $model::findOrFail($id);
return $object->update(array_except(Input::all(), static::MODEL_KEY));
}
public function destroy($id)
{
$model = $this->getModel();
return $model::remove($id);
}
}
使用您的新 Controller :) 您必须传递包含模型键的 model 参数 - 它必须是白名单中允许的模型之一。例如。如果你想获得 id=5 的 User 做
GET /crud/5?model=user
请记住它越简单越好,您可能需要使代码更复杂以满足您的需要。
另请记住,此代码尚未经过测试 - 如果您发现任何拼写错误或有其他问题,请告诉我。我非常乐意为您运行它。
关于php - Laravel 5 全局增删改查类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31657410/
我是一名优秀的程序员,十分优秀!