gpt4 book ai didi

php - Laravel 5 全局增删改查类

转载 作者:可可西里 更新时间:2023-11-01 14:01:21 24 4
gpt4 key购买 nike

在有人问之前,我已经研究过CRUD 生成器并且我知道所有关于 Laravel 资源路由的信息,但这并不是我在这里的目的。

我想要做的是创建一个带有几个参数的路由,以及一个全局类(使用/扩展?)用于简单 CRUD 操作的模型 Controller 。我们有 20 个左右的模型,为每个表创建资源 Controller 比寻找一种方法来创建全局 CRUD 类来处理所有“ api"类型调用和任何 ajax json 请求,如创建/更新/销毁语句。

所以我的问题是什么是构建一个类来处理我们拥有的每个 Model 的所有 CRUD 请求的最干净和最好的方法,而无需资源 controller 每个 model?我已经尝试对此进行研究,但似乎找不到任何链接,除了指向 CRUD 生成器的链接和描述 laravel 资源路径 的链接。

最佳答案

最简单的方法是执行以下操作:

  1. 为您的资源 Controller 添加路由:

    Route::resource('crud', 'CrudController', array('except' => array('create', 'edit')));
  2. 创建你的 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);
    }
    }
  3. 使用您的新 Controller :) 您必须传递包含模型键的 model 参数 - 它必须是白名单中允许的模型之一。例如。如果你想获得 id=5User

    GET /crud/5?model=user

请记住它越简单越好,您可能需要使代码更复杂以满足您的需要。

另请记住,此代码尚未经过测试 - 如果您发现任何拼写错误或有其他问题,请告诉我。我非常乐意为您运行它。

关于php - Laravel 5 全局增删改查类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31657410/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com