gpt4 book ai didi

php - 如何创建一个单独的类来在表中创建新记录并通过 Controller 的接口(interface)或外观调用它

转载 作者:行者123 更新时间:2023-12-05 03:27:31 27 4
gpt4 key购买 nike

我想重构在表 products 中创建新记录的 Controller 代码:

public function store(Request $request)
{
$newPro = Product::create([
'name' => $request->product_name,
'en_name' => $request->product_name_english,
'type' => $request->product_type,
'cat_id' => $request->category_product,
]);
...
}

现在为了重构这段代码,我有两个选择:

1- 在同一个 Controller 中创建一个单独的方法,然后像这样调用它:

$newPro = self::createProduct($request->product_name,$request->product_name_english,$request->product_type,$request->category_product)

2- 创建一个单独的类并通过interfacefacade 调用它(最佳方式)

现在我想使用第二个选项,但我真的不知道该怎么做!

如果你知道请告诉我...

最佳答案

首先创建您的存储库服务提供者:

php artisan make:provider RepositoryServiceProvider

然后你应该在 register 方法中映射接口(interface)和你的存储库(当然你也必须创建 ProductRepository 和 ProductRepositoryInterface),比如:

/**
* Register services.
*
* @return void
*/
public function register()
{
$this->app->bind(ProductRepositoryInterface::class, ProductRepository::class);

}

之后,您可以像这样将您的存储库注入(inject)您的 Controller :

public function store(Request $request, ProductRepositoryInterface $productRepository)
{
$newPro = $productRepository->createProduct($productData);
...
}

这是您的ProductRepository:

<?php
namespace App\Repositories;

class ProductRepository extends BaseRepository implements ProductRepositoryInterface
{
protected Product $product;

/**
* @param Product $product
*/
public function __construct(Product $product)
{
$this->product = $product;
}

/**
* @param array $productArray
* @return Product
*/
public function createProduct(array $productArray): Product
{
return $this->product->create($productArray);
}
}

和您的 ProductRepositoryInterface:

<?php

namespace App\Repositories;

interface CategoryRepositoryInterface
{
/**
* @param array $productArray
* @return Product
*/
public function createProduct(array $productArray): Product;
}

关于php - 如何创建一个单独的类来在表中创建新记录并通过 Controller 的接口(interface)或外观调用它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71465112/

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