此包在开发环境中增加了更多功能

dev-master 2021-02-25 08:44 UTC

This package is auto-updated.

Last update: 2024-09-25 16:24:19 UTC


README

这是一个Laravel包,通过添加额外的命令来帮助开发过程,可以创建服务仓储模式,以及只通过一个命令创建类、接口或特性。

Image of Yaktocat

安装

使用包管理器 composer 安装extra。

composer require ahmedhakeem/extra

配置

发布配置文件

此步骤是必需的

php artisan vendor:publish --provider="Hakeem\Extra\ExtraServiceProvider"

使用方法

服务仓储模式命令

以下命令中的每一个都会创建不同的事物

此命令将创建服务仓储模式的全开发线,从迁移到控制器

php artisan extra:sr  Product

将创建的类

  • 控制器
  • 服务类
  • 仓储类
  • 仓储接口
  • 模型
  • 迁移文件
  • 工厂

命令结果

  • ProductController
  • ProductService
  • ProductRepository
  • ProductRepositoryInterface
  • Product
  • 迁移文件示例 "2014_10_12_000000_create_products_table.php"
  • ProductFactory

结果

Image of Yaktocat

<?php

namespace App\Http\Controllers;

use App\Services\ProductService;

class ProductController extends Controller
{

    protected  $service;

    public function __construct(ProductService $service)
    {
        $this->service = $service;
    }


}

<?php

namespace App\Services;

use App\Repositories\ProductRepositoryInterface;

class ProductService
{

    protected ProductRepository $ProductRepository;

    public function __construct(ProductRepositoryInterface $ProductRepository)
    {
        $this->ProductRepository = $ProductRepository;
    }

    /**
     * Get's a record by it's ID
     *
     * @param int
     * @return collection
     */
    public function get($id)
    {
        return $this->ProductRepository->get($id);
    }

    /**
     * Get's all records.
     *
     * @return mixed
     */
    public function all()
    {
        return  $this->ProductRepository->all();
    }

    /**
     * Deletes a record.
     *
     * @param int
     */
    public function delete($id)
    {
       return $this->ProductRepository->delete($id);
    }

    /**
     * Updates a post.
     *
     * @param int
     * @param array
     */
    public function update($id, array $data)
    {
        $this->ProductRepository->update($id, $data);
    }
}


<?php

namespace App\Repositories;

interface ProductRepositoryInterface
{
    /**
     * Get's a record by it's ID
     *
     * @param int
     */
    public function get($id);

    /**
     * Get's all records.
     *
     * @return mixed
     */
    public function all();

    /**
     * Deletes a record.
     *
     * @param int
     */
    public function delete($id);

    /**
     * Updates a record.
     *
     * @param int
     * @param array
     */
    public function update($id, array $data);
}


<?php


namespace App\Repositories;

use App\Models\Product;


class ProductRepository implements ProductRepositoryInterface
{
    /**
     * Get's a record by it's ID
     *
     * @param int
     * @return collection
     */
    public function get($id)
    {
        return Product::find($id);
    }

    /**
     * Get's all records.
     *
     * @return mixed
     */
    public function all()
    {
        return Product::all();
    }

    /**
     * Deletes a record.
     *
     * @param int
     */
    public function delete($id)
    {
        Product::destroy($id);
    }

    /**
     * Updates a post.
     *
     * @param int
     * @param array
     */
    public function update($id, array $data)
    {
        Product::find($id)->update($data);
    }
}

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;

class Product extends Model
{
    use HasFactory;
}


<?php

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

class CreateProductsTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('products', function (Blueprint $table) {
            $table->id();
            $table->timestamps();
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::dropIfExists('products');
    }
}

<?php

namespace Database\Factories;

use App\Models\Product;
use Illuminate\Database\Eloquent\Factories\Factory;

class ProductFactory extends Factory
{
    /**
     * The name of the factory's corresponding model.
     *
     * @var string
     */
    protected $model = Product::class;

    /**
     * Define the model's default state.
     *
     * @return array
     */
    public function definition()
    {
        return [
            //
        ];
    }
}

之后,您需要将终端中的结果添加到AppServiceProvider中,如下所示

<?php

namespace App\Providers;

use Illuminate\Support\ServiceProvider;

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

    /**
     * Bootstrap any application services.
     *
     * @return void
     */
    public function boot()
    {
        //
    }
}

创建类命令

php artisan extra:class  {nameSpace}/{className}

这将创建位于app文件夹Make文件夹中的类,路径如下:"app\namespace\ClassName"

示例

php artisan extra:class  Helpers/VatCalculator

这将创建位于app文件夹Helpers文件夹中的类VatCalculator

创建接口命令

php artisan extra:interface  {nameSpace}/{interfaceName}

这将创建位于app文件夹Make文件夹中的类,路径如下:"app\namespace\interfaceName"

示例

php artisan extra:interface  Helpers/VatCalculatorInterface

这将创建位于app文件夹Helpers文件夹中的接口VatCalculator

创建特性命令

php artisan extra:interface  {nameSpace}/{traitName}

这将创建位于app文件夹Make文件夹中的类,路径如下:"app\namespace\traitName"

示例

php artisan extra:trait  Helpers\VatCalculatorTrait

这将创建位于app文件夹Helpers文件夹中的特性VatCalculator

贡献

欢迎pull请求。对于重大更改,请首先打开一个issue来讨论您想更改的内容。

请确保适当更新测试。

许可证

MIT