ahmedhakeem / extra
此包在开发环境中增加了更多功能
dev-master
2021-02-25 08:44 UTC
Requires
- php: >=7.0.0
Requires (Dev)
- laravel/framework: >=8
This package is auto-updated.
Last update: 2024-09-25 16:24:19 UTC
README
这是一个Laravel包,通过添加额外的命令来帮助开发过程,可以创建服务仓储模式,以及只通过一个命令创建类、接口或特性。
安装
使用包管理器 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
结果
<?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来讨论您想更改的内容。
请确保适当更新测试。