fix:更新已知bug,优化代码
This commit is contained in:
387
vendor/webman/console/src/Commands/AppPluginCreateCommand.php
vendored
Normal file
387
vendor/webman/console/src/Commands/AppPluginCreateCommand.php
vendored
Normal file
@@ -0,0 +1,387 @@
|
||||
<?php
|
||||
|
||||
namespace Webman\Console\Commands;
|
||||
|
||||
use Symfony\Component\Console\Command\Command;
|
||||
use Symfony\Component\Console\Input\InputArgument;
|
||||
use Symfony\Component\Console\Input\InputInterface;
|
||||
use Symfony\Component\Console\Output\OutputInterface;
|
||||
use Symfony\Component\Console\Input\InputOption;
|
||||
use Webman\Console\Util;
|
||||
|
||||
class AppPluginCreateCommand extends Command
|
||||
{
|
||||
protected static $defaultName = 'app-plugin:create';
|
||||
protected static $defaultDescription = 'App Plugin Create';
|
||||
|
||||
/**
|
||||
* @return void
|
||||
*/
|
||||
protected function configure()
|
||||
{
|
||||
$this->addArgument('name', InputArgument::REQUIRED, 'App plugin name');
|
||||
}
|
||||
|
||||
/**
|
||||
* @param InputInterface $input
|
||||
* @param OutputInterface $output
|
||||
* @return int
|
||||
*/
|
||||
protected function execute(InputInterface $input, OutputInterface $output): int
|
||||
{
|
||||
$name = $input->getArgument('name');
|
||||
$output->writeln("Create App Plugin $name");
|
||||
|
||||
if (strpos($name, '/') !== false) {
|
||||
$output->writeln('<error>Bad name, name must not contain character \'/\'</error>');
|
||||
return self::FAILURE;
|
||||
}
|
||||
|
||||
// Create dir config/plugin/$name
|
||||
if (is_dir($plugin_config_path = base_path()."/plugin/$name")) {
|
||||
$output->writeln("<error>Dir $plugin_config_path already exists</error>");
|
||||
return self::FAILURE;
|
||||
}
|
||||
|
||||
$this->createAll($name);
|
||||
|
||||
return self::SUCCESS;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param $name
|
||||
* @return void
|
||||
*/
|
||||
protected function createAll($name)
|
||||
{
|
||||
$base_path = base_path();
|
||||
$this->mkdir("$base_path/plugin/$name/app/controller", 0777, true);
|
||||
$this->mkdir("$base_path/plugin/$name/app/exception", 0777, true);
|
||||
$this->mkdir("$base_path/plugin/$name/app/model", 0777, true);
|
||||
$this->mkdir("$base_path/plugin/$name/app/middleware", 0777, true);
|
||||
$this->mkdir("$base_path/plugin/$name/app/view/index", 0777, true);
|
||||
$this->mkdir("$base_path/plugin/$name/config", 0777, true);
|
||||
$this->mkdir("$base_path/plugin/$name/public", 0777, true);
|
||||
$this->createFunctionsFile("$base_path/plugin/$name/app/functions.php");
|
||||
$this->createControllerFile("$base_path/plugin/$name/app/controller/IndexController.php", $name);
|
||||
$this->createViewFile("$base_path/plugin/$name/app/view/index/index.html");
|
||||
$this->createExceptionFile("$base_path/plugin/$name/app/exception/Handler.php", $name);
|
||||
$this->createConfigFiles("$base_path/plugin/$name/config", $name);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param $path
|
||||
* @return void
|
||||
*/
|
||||
protected function mkdir($path)
|
||||
{
|
||||
if (is_dir($path)) {
|
||||
return;
|
||||
}
|
||||
echo "Create $path\r\n";
|
||||
mkdir($path, 0777, true);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param $path
|
||||
* @param $name
|
||||
* @return void
|
||||
*/
|
||||
protected function createControllerFile($path, $name)
|
||||
{
|
||||
$content = <<<EOF
|
||||
<?php
|
||||
|
||||
namespace plugin\\$name\\app\\controller;
|
||||
|
||||
use support\\Request;
|
||||
|
||||
class IndexController
|
||||
{
|
||||
|
||||
public function index()
|
||||
{
|
||||
return view('index/index', ['name' => '$name']);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
EOF;
|
||||
file_put_contents($path, $content);
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @param $path
|
||||
* @return void
|
||||
*/
|
||||
protected function createViewFile($path)
|
||||
{
|
||||
$content = <<<EOF
|
||||
<!doctype html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<link rel="shortcut icon" href="/favicon.ico"/>
|
||||
<title>webman app plugin</title>
|
||||
|
||||
</head>
|
||||
<body>
|
||||
hello <?=htmlspecialchars(\$name)?>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
|
||||
EOF;
|
||||
file_put_contents($path, $content);
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @param $path
|
||||
* @return void
|
||||
*/
|
||||
protected function createExceptionFile($path, $name)
|
||||
{
|
||||
$content = <<<EOF
|
||||
<?php
|
||||
namespace plugin\\$name\\app\\exception;
|
||||
|
||||
use Throwable;
|
||||
use Webman\\Http\\Request;
|
||||
use Webman\\Http\\Response;
|
||||
|
||||
/**
|
||||
* Class Handler
|
||||
* @package Support\Exception
|
||||
*/
|
||||
class Handler extends \\support\\exception\\Handler
|
||||
{
|
||||
public function render(Request \$request, Throwable \$exception): Response
|
||||
{
|
||||
\$code = \$exception->getCode();
|
||||
if (\$request->expectsJson()) {
|
||||
\$json = ['code' => \$code ? \$code : 500, 'message' => \$this->_debug ? \$exception->getMessage() : 'Server internal error', 'type' => 'failed'];
|
||||
\$this->_debug && \$json['traces'] = (string)\$exception;
|
||||
return new Response(200, ['Content-Type' => 'application/json'],
|
||||
\json_encode(\$json, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES));
|
||||
}
|
||||
\$error = \$this->_debug ? \\nl2br((string)\$exception) : 'Server internal error';
|
||||
return new Response(500, [], \$error);
|
||||
}
|
||||
}
|
||||
|
||||
EOF;
|
||||
file_put_contents($path, $content);
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @param $file
|
||||
* @return void
|
||||
*/
|
||||
protected function createFunctionsFile($file)
|
||||
{
|
||||
$content = <<<EOF
|
||||
<?php
|
||||
/**
|
||||
* Here is your custom functions.
|
||||
*/
|
||||
|
||||
|
||||
|
||||
EOF;
|
||||
file_put_contents($file, $content);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param $base
|
||||
* @param $name
|
||||
* @return void
|
||||
*/
|
||||
protected function createConfigFiles($base, $name)
|
||||
{
|
||||
// app.php
|
||||
$content = <<<EOF
|
||||
<?php
|
||||
|
||||
use support\\Request;
|
||||
|
||||
return [
|
||||
'debug' => true,
|
||||
'controller_suffix' => 'Controller',
|
||||
'controller_reuse' => true,
|
||||
];
|
||||
|
||||
EOF;
|
||||
file_put_contents("$base/app.php", $content);
|
||||
|
||||
// autoload.php
|
||||
$content = <<<EOF
|
||||
<?php
|
||||
return [
|
||||
'files' => [
|
||||
base_path() . '/plugin/$name/app/functions.php',
|
||||
]
|
||||
];
|
||||
EOF;
|
||||
file_put_contents("$base/autoload.php", $content);
|
||||
|
||||
// container.php
|
||||
$content = <<<EOF
|
||||
<?php
|
||||
return new Webman\\Container;
|
||||
|
||||
EOF;
|
||||
file_put_contents("$base/container.php", $content);
|
||||
|
||||
|
||||
// database.php
|
||||
$content = <<<EOF
|
||||
<?php
|
||||
return [];
|
||||
|
||||
EOF;
|
||||
file_put_contents("$base/database.php", $content);
|
||||
|
||||
// exception.php
|
||||
$content = <<<EOF
|
||||
<?php
|
||||
|
||||
return [
|
||||
'' => \\plugin\\$name\\app\\exception\\Handler::class,
|
||||
];
|
||||
|
||||
EOF;
|
||||
file_put_contents("$base/exception.php", $content);
|
||||
|
||||
// log.php
|
||||
$content = <<<EOF
|
||||
<?php
|
||||
|
||||
return [
|
||||
'default' => [
|
||||
'handlers' => [
|
||||
[
|
||||
'class' => Monolog\\Handler\\RotatingFileHandler::class,
|
||||
'constructor' => [
|
||||
runtime_path() . '/logs/$name.log',
|
||||
7,
|
||||
Monolog\\Logger::DEBUG,
|
||||
],
|
||||
'formatter' => [
|
||||
'class' => Monolog\\Formatter\\LineFormatter::class,
|
||||
'constructor' => [null, 'Y-m-d H:i:s', true],
|
||||
],
|
||||
]
|
||||
],
|
||||
],
|
||||
];
|
||||
|
||||
EOF;
|
||||
file_put_contents("$base/log.php", $content);
|
||||
|
||||
// middleware.php
|
||||
$content = <<<EOF
|
||||
<?php
|
||||
|
||||
return [
|
||||
'' => [
|
||||
|
||||
]
|
||||
];
|
||||
|
||||
EOF;
|
||||
file_put_contents("$base/middleware.php", $content);
|
||||
|
||||
// process.php
|
||||
$content = <<<EOF
|
||||
<?php
|
||||
return [];
|
||||
|
||||
EOF;
|
||||
file_put_contents("$base/process.php", $content);
|
||||
|
||||
// redis.php
|
||||
$content = <<<EOF
|
||||
<?php
|
||||
return [
|
||||
'default' => [
|
||||
'host' => '127.0.0.1',
|
||||
'password' => null,
|
||||
'port' => 6379,
|
||||
'database' => 0,
|
||||
],
|
||||
];
|
||||
|
||||
EOF;
|
||||
file_put_contents("$base/redis.php", $content);
|
||||
|
||||
// route.php
|
||||
$content = <<<EOF
|
||||
<?php
|
||||
|
||||
use Webman\\Route;
|
||||
|
||||
|
||||
EOF;
|
||||
file_put_contents("$base/route.php", $content);
|
||||
|
||||
// static.php
|
||||
$content = <<<EOF
|
||||
<?php
|
||||
|
||||
return [
|
||||
'enable' => true,
|
||||
'middleware' => [], // Static file Middleware
|
||||
];
|
||||
|
||||
EOF;
|
||||
file_put_contents("$base/static.php", $content);
|
||||
|
||||
// translation.php
|
||||
$content = <<<EOF
|
||||
<?php
|
||||
|
||||
return [
|
||||
// Default language
|
||||
'locale' => 'zh_CN',
|
||||
// Fallback language
|
||||
'fallback_locale' => ['zh_CN', 'en'],
|
||||
// Folder where language files are stored
|
||||
'path' => "$base/resource/translations",
|
||||
];
|
||||
|
||||
EOF;
|
||||
file_put_contents("$base/translation.php", $content);
|
||||
|
||||
// view.php
|
||||
$content = <<<EOF
|
||||
<?php
|
||||
|
||||
use support\\view\\Raw;
|
||||
use support\\view\\Twig;
|
||||
use support\\view\\Blade;
|
||||
use support\\view\\ThinkPHP;
|
||||
|
||||
return [
|
||||
'handler' => Raw::class
|
||||
];
|
||||
|
||||
EOF;
|
||||
file_put_contents("$base/view.php", $content);
|
||||
|
||||
// thinkorm.php
|
||||
$content = <<<EOF
|
||||
<?php
|
||||
|
||||
return [];
|
||||
|
||||
EOF;
|
||||
file_put_contents("$base/thinkorm.php", $content);
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
@@ -29,7 +29,7 @@ class MakeCommandCommand extends Command
|
||||
*/
|
||||
protected function execute(InputInterface $input, OutputInterface $output): int
|
||||
{
|
||||
$command = $name = $input->getArgument('name');
|
||||
$command = $name = trim($input->getArgument('name'));
|
||||
$output->writeln("Make command $name");
|
||||
|
||||
// make:command 不支持子目录
|
||||
@@ -37,12 +37,14 @@ class MakeCommandCommand extends Command
|
||||
if (!$command_str = Util::guessPath(app_path(), 'command')) {
|
||||
$command_str = Util::guessPath(app_path(), 'controller') === 'Controller' ? 'Command' : 'command';
|
||||
}
|
||||
$upper = $command_str === 'Command';
|
||||
$name = ucfirst($name);
|
||||
$items= explode(':', $name);
|
||||
$name='';
|
||||
foreach ($items as $item) {
|
||||
$name.=ucfirst($item);
|
||||
}
|
||||
$file = app_path() . "/$command_str/$name.php";
|
||||
$upper = $command_str === 'Command';
|
||||
$namespace = $upper ? 'App\Command' : 'app\command';
|
||||
|
||||
|
||||
$this->createCommand($name, $namespace, $file, $command);
|
||||
|
||||
return self::SUCCESS;
|
||||
|
||||
@@ -58,7 +58,15 @@ class MakeModelCommand extends Command
|
||||
$file = app_path() . "/$path/$name.php";
|
||||
$namespace = str_replace('/', '\\', ($upper ? 'App/' : 'app/') . $path);
|
||||
}
|
||||
if (!config('database') && config('thinkorm')) {
|
||||
$database = config('database');
|
||||
if (isset($database['default']) && strpos($database['default'], 'plugin.') === 0) {
|
||||
$database = false;
|
||||
}
|
||||
$thinkorm = config('thinkorm');
|
||||
if (isset($thinkorm['default']) && strpos($thinkorm['default'], 'plugin.') === 0) {
|
||||
$thinkorm = false;
|
||||
}
|
||||
if (!$database && $thinkorm) {
|
||||
$this->createTpModel($name, $namespace, $file);
|
||||
} else {
|
||||
$this->createModel($name, $namespace, $file);
|
||||
|
||||
@@ -20,13 +20,13 @@ class RouteListCommand extends Command
|
||||
*/
|
||||
protected function execute(InputInterface $input, OutputInterface $output): int
|
||||
{
|
||||
$headers = ['uri', 'method', 'callback', 'middleware'];
|
||||
$headers = ['uri', 'method', 'callback', 'middleware', 'name'];
|
||||
$rows = [];
|
||||
foreach (Route::getRoutes() as $route) {
|
||||
foreach ($route->getMethods() as $method) {
|
||||
$cb = $route->getCallback();
|
||||
$cb = $cb instanceof \Closure ? 'Closure' : (is_array($cb) ? json_encode($cb) : var_export($cb, 1));
|
||||
$rows[] = [$route->getPath(), $method, $cb, json_encode($route->getMiddleware() ?: null)];
|
||||
$rows[] = [$route->getPath(), $method, $cb, json_encode($route->getMiddleware() ?: null), $route->getName()];
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user