php - Laravel 5 全局增删改查类

标签 php laravel laravel-5 crud

在有人问之前,我已经研究过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/

相关文章:

php - 如何在 Laravel 中打印与其类别名称相关的品牌名称?

PHP curl 返回奇怪的字符

javascript - 进行中的 Ajax 请求突然开始返回状态 = 0

php - 如何阻止用户打开服务器上的文件?

php - 我应该缓存所有内容吗

mysql - 使用密码 Laravel 导入数据库

javascript - 实时时间表编辑和保存

php - Laravel,在保存过程中创建额外记录的特征?

php - 如何在 Laravel 中获取数据库列名?

php - 这个switch语句不是废话吗?