app/Ship/Command/CreateMiddlewareCommand.php
<?php
namespace App\Ship\Command;
use App\Ship\Utils\FileCreator;
use Rudra\Container\Facades\Rudra;
use Rudra\Cli\ConsoleFacade as Cli;
class CreateMiddlewareCommand extends FileCreator
{
/**
* Creates a file with Seed data
* -----------------------------
* Создает файл с данными Seed
*/
public function actionIndex(): void
{
Cli::printer("Enter middleware name: ", "magneta");
$prefix = str_replace(PHP_EOL, "", Cli::reader());
$className = ucfirst($prefix) . 'Middleware';
Cli::printer("Enter container: ", "magneta");
$container = ucfirst(str_replace(PHP_EOL, "", Cli::reader()));
if (!empty($container)) {
$this->writeFile(
[str_replace('/', DIRECTORY_SEPARATOR, Rudra::config()->get('app.path') . "/app/Containers/$container/Middleware/"), "{$className}.php"],
$this->createClass($className, $container)
);
} else {
$this->actionIndex();
}
}
/**
* @param string $className
* @param string $container
* @return string
*
* Creates class data
* ------------------
* Создает данные класса
*/
private function createClass(string $className, string $container): string
{
return <<<EOT
<?php
namespace App\Containers\\{$container}\Middleware;
use Rudra\Router\MiddlewareInterface;
use Rudra\Router\RouterFacade as Router;
class {$className} implements MiddlewareInterface
{
public function __invoke(\$chainOfMiddlewares)
{
dump(__CLASS__);
\$this->next(\$chainOfMiddlewares);
}
public function next(array \$chainOfMiddlewares): void
{
Router::handleMiddleware(\$chainOfMiddlewares);
}
}\r\n
EOT;
}
}