doudiejian5827 2018-04-11 07:52
浏览 30
已采纳

laravel one controller,用于具有相同模式的不同模型

Hello I am developing an application with a Laravel api server and a C# Winforms frontend. The application has many database models, but most of them consist only in an id field and a name field. No more operations than storing and retrieving that data is needed. The data can't be combined into one table (technically is possible, but it would be a mess) because is totally different data,from postal codes and associated city to families of products.

So I thought, as in C# I could make a generic form, if there is possible to make this in Laravel as it will speed up my work too much.

Edit: Here I attach one example controller I want to make it Generic.

<?php

namespace App\Http\Controllers;

use App\Http\Requests\LocalidadRequest;
use App\Localidad;
use Illuminate\Http\Request;

class LocalidadsController extends Controller
{
    public function index()
    {
        return response()->json(array("data" => Localidad::all(), "error" => 0), 200);
    }

    public function show(Localidad $localidad)
    {
        return $localidad;
    }

    public function store(LocalidadRequest $request)
    {

        $localidad = Localidad::create($request->all());

        return response()->json($localidad, 201);
    }

    public function update(LocalidadRequest $request, Localidad $localidad)
    {
        $localidad->update($request->all());
        return response()->json($localidad, 201);
    }

    public function delete(Localidad $localidad)
    {
        $localidad->delete();
        return response()->json(null, 204);
    }
}

I would like to generalize this controller like this (this isn't real code):

public function index()
{
    return response()->json(array("data" => ??::all(), "error" => 0), 200);
}

public function show(Model $routeModel)
{
    return $routeModel;
}

public function store(CommonRequest $request)
{

    $routeModel = ??::create($request->all());

    return response()->json($routeModel, 201);
}

public function update(CommonRequest $request, Model $routeModel)
{
    $routeModel->update($request->all());
    return response()->json($localidad, 201);
}

public function delete(Model $routeModel)
{
    $routeModel->delete();
    return response()->json(null, 204);
}

Thanks

  • 写回答

1条回答 默认 最新

  • douhao2153 2018-04-11 09:55
    关注

    It is possible and can structure the route and controller as follows:

    Define a generic controller:

    abstract class CommonController extends Controller
    {
        abstract protected function getModel();
    
        public function index()
        {
            return response()->json(array("data" => ($this->getModel())::all(), "error" => 0), 200);
        }
    
        ....
    }
    

    For example, if you have city model, then you can define a city controller and inherit the generic controller:

    class CityController extends CommonController
    {
        protected function getModel()
        {
            return App\City::class;
        }
    }
    

    For route, register it to corresponding controller:

    Route::get('cities', 'CityController@index');
    ....
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 matlab(相关搜索:紧聚焦)
  • ¥15 基于51单片机的厨房煤气泄露检测报警系统设计
  • ¥15 路易威登官网 里边的参数逆向
  • ¥15 Arduino无法同时连接多个hx711模块,如何解决?
  • ¥50 需求一个up主付费课程
  • ¥20 模型在y分布之外的数据上预测能力不好如何解决
  • ¥15 processing提取音乐节奏
  • ¥15 gg加速器加速游戏时,提示不是x86架构
  • ¥15 python按要求编写程序
  • ¥15 Python输入字符串转化为列表排序具体见图,严格按照输入