0

我目前正在构建一个应用程序,其中我有几个能够“建立联系”的模型,并且想知道如何在控制器中以最佳方式处理它。

我在下面列出了一些方法 - 你们认为哪一种是最好的,为什么或者你个人使用的一种,为什么?

方法 1 - 嵌套资源控制器

namespace App\Http\Controllers;

class SupplierContactController extends Controller
{
    public function all(Supplier $supplier)
    {
        return response($supplier->contacts);
    }

    public function store(Request $request, Supplier $supplier)
    {
        $supplier->contact($request->user()->id, $request->all());

        return response(null, 201);
    }
}

方法 2 - 扩展另一个父资源控制器的嵌套资源控制器

namespace App\Http\Controllers;

class SupplierContactController extends ContactController
{
    public function all(Supplier $supplier)
    {
        return parent::all($supplier);
    }

    public function store(Request $request, Supplier $supplier)
    {
        return parent::store($request, $supplier);
    }
}

方法 3 - 具有每种模型类型的方法的资源控制器

namespace App\Http\Controllers;

class ContactController extends Controller
{
    public function forSupplier(Supplier $supplier)
    {
        return $this->forModel($supplier);
    }

    public function forCustomer(Customer $customer)
    {
        return $this->forModel($customer);
    }

    public function storeForSupplier(StoreContact $request, Supplier $supplier)
    {
        return $this->store($request, $supplier);
    }

    public function storeForCustomer(StoreContact $request, Customer $customer)
    {
        return $this->store($request, $customer);
    }

    private function forModel(Model $model)
    {
        return response($model->contacts);
    }

    private function store(Request $request, Model $model)
    {
        $model->contact($request->user()->id, $request->all());

        return response(null, 201);
    }
}

方法 4 - 具有路由参数和 if 语句的资源控制器

namespace App\Http\Controllers;

class ContactController extends Controller
{
    public function all(string $type, int $id)
    {
        if ($type === 'supplier') $model = Supplier::find($id);
        if ($type === 'customer') $model = Customer::find($id);

        return response($model->contacts);
    }

    public function store(Request $request, string $type, int $id)
    {
        if ($type === 'supplier') $model = Supplier::find($id);
        if ($type === 'customer') $model = Customer::find($id);

        $model->contact($request->user()->id, $request->all());

        return response(null, 201);
    }
}
4

0 回答 0