shomisha/stubless

一个用于生成不带stubs的PHP文件的包。

1.5.1 2021-04-28 18:11 UTC

README

Latest Stable Version Software License

Stubless是一个用于生成PHP源代码的包,它使用易于阅读、流畅的对象导向API,并且不使用任何stubs。它非常适合生成命令,并减少了在程序生成PHP代码时手动操作字符串的需要。

以下是一个Stubless能做什么的示例

<?php

require_once 'vendor/autoload.php';

use App\Http\Controllers\Controller;
use App\Http\Requests\UserRequest;
use App\Models\User;
use Illuminate\Http\Request;
use Shomisha\Stubless\Templates\Argument;
use Shomisha\Stubless\Templates\ClassMethod;
use Shomisha\Stubless\Templates\ClassTemplate;
use Shomisha\Stubless\Utilities\Importable;

$class = ClassTemplate::name('UsersController')->extends(new Importable(Controller::class))->setNamespace('App\Http\Controllers');

$requestArgument = Argument::name('request')->type(new Importable(Request::class));
$userArgument = Argument::name('user')->type(new Importable(User::class));
$userRequestArgument = Argument::name('request')->type(new Importable(UserRequest::class));

$class->withMethods([
	ClassMethod::name('index')->addArgument($requestArgument),
	ClassMethod::name('show')->withArguments([
		$requestArgument,
		$userArgument,
	]),
	ClassMethod::name('store')->addArgument($userRequestArgument),
	ClassMethod::name('update')->withArguments([
		$userRequestArgument,
		$userArgument,
	]),
	ClassMethod::name('destroy')->addArgument($userArgument),
]);

echo $class->print();

以下代码将生成以下PHP源代码

<?php

namespace App\Http\Controllers;

use App\Http\Controllers\Controller;
use App\Http\Requests\UserRequest;
use App\Models\User;
use Illuminate\Http\Request;

class UsersController extends Controller
{
    public function index(Request $request)
    {
    }

    public function show(Request $request, User $user)
    {
    }

    public function store(UserRequest $request)
    {
    }

    public function update(UserRequest $request, User $user)
    {
    }

    public function destroy(User $user)
    {
    }
}

免责声明:Stubless是针对类生成进行开发和优化的,并将在不久的将来以同样的思路进行升级。在某个时候,我可能会更多关注非面向对象的PHP生成,但这还远在未来,目前没有计划。

要了解更多关于如何使用Stubless及其所有功能,请查看wiki页面