mvan/clitoris

项目 CLI 任务简单 PHP 框架

v1.1 2020-05-06 08:24 UTC

This package is auto-updated.

Last update: 2024-09-06 19:20:15 UTC


README

CLItoris - 轻量级 PHP 框架,用于执行 CLI 任务

此库可以帮助您构建项目中的命令行任务结构。它还允许您向终端输出彩色和格式化的消息。 享受简洁!

功能

  • 路由和执行 CLI 任务
  • 将给定参数解析为 stdClass
  • 用于彩色和格式化文本输出的工具
  • 创建和渲染表格

设置

将库添加到项目中的 composer.json 文件

{
  "require": {
      "mvan/clitoris": "1.*"
  }
}

使用 composer 安装库

$ php composer.phar install

Composer 将在您的 vendor 文件夹中安装 CLItoris。然后您可以将以下内容添加到您的 .php 文件中,以使用自动加载库。

require_once __DIR__ . '/vendor/autoload.php';

或者,您可以在命令行上使用 composer 来要求并安装 CLItoris

$ php composer.phar require mvan/clitoris:1.*

最低要求

  • PHP 7

使用方法

定义任务

<?php
date_default_timezone_set("Europe/Prague");

require_once '../src/Dispatcher.php';
require_once '../src/BaseTask.php';
require_once '../src/Color.php';
require_once '../src/Output.php';
require_once '../src/Table.php';
require_once 'Demo.php';

use mvan\CLItoris\Dispatcher;

$demo = new Dispatcher($argv);
$demo->addTask('hello-world', mvan\CLItoris\tasks\Demo::class, 'helloWorld', 'Hello world! This is a dummy task where you can palay with parameters in format php yourFile.php param:value');
$demo->addTask('rainbow', mvan\CLItoris\tasks\Demo::class, 'rainbow', 'Shows all available text colors.');
$demo->addTask('tables', mvan\CLItoris\tasks\Demo::class, 'tables', 'Shows work with tables.');
$demo->dispatch();

实现它们

<?php

namespace mvan\CLItoris\tasks;

use mvan\CLItoris\BaseTask, mvan\CLItoris\Color, mvan\CLItoris\Output, mvan\CLItoris\Table;

/**
 *
 * @author Martin Vancura <mv@mvan.eu>
 */

class Demo extends BaseTask {
    public function helloWorld() {
        $out = new Output();

        if(!empty((array)$this->args)){
            $out->printColoredLn("Arguments to your task are: ".PHP_EOL, Color::TXT_LIGHT_PURPLE);
            var_dump($this->args);
        } else {
            $out->printColoredLn("You have not used any arguments. Try some by typing ", Color::TXT_LIGHT_PURPLE);
            $out->printColoredLn("$ php executable.php hello-world argument:value yay:3 ", Color::TXT_LIGHT_GREEN);
            $out->printColoredLn("to the terminal.".PHP_EOL, Color::TXT_LIGHT_PURPLE);
        }
    }

    public function rainbow() {
        /**
         * Really long text will be automatically wrapped wrapped after certain number of characters if you want.
         * Available text align: Output::ALIGN_CENTER, Output::ALIGN_LEFT, Output::ALIGN_RIGHT
         */
        $longTextOut = new Output(80,Output::ALIGN_CENTER);
        $longTextOut->printColoredLn('sakldj laskjdl alskjd alksjd alksjd laksj dlkaj slkdja lskjdl ajskd lajsd laksjd lakjs dlajksdl akjslkdj alksjdl alskjd alksjd lajsdlk jlkqjlk wjelqkwjel qwkje qlkwje lqwjke qlwkje qlwkje qlkwje lqkwje lqwkje lqwkje qlwkje qlkwje lqkwje lkqjwelqjkw elkqjw elkqwje ',Color::TXT_LIGHT_GRAY, Color::BG_BLUE,true);

        $out = new Output();

        /**
         * You can print line without color decorator
         */
        $out->printLn(PHP_EOL);

        /**
         * You can use different colors on the same line
         */
        $out->printColoredLn('Blue text next to the ', Color::TXT_BLUE);
        $out->printColoredLn('cyan text'.PHP_EOL, Color::TXT_CYAN);
        $out->printLn(PHP_EOL);

        /**
         * Or use any available color combination
         */
        $out->printColoredLn('Dark grey text'.PHP_EOL, Color::TXT_DARK_GRAY);
        $out->printColoredLn('Green text'.PHP_EOL, Color::TXT_GREEN);
        $out->printColoredLn('Light blue text'.PHP_EOL, Color::TXT_LIGHT_BLUE);
        $out->printColoredLn('Light cyan text'.PHP_EOL, Color::TXT_LIGHT_CYAN);
        $out->printColoredLn('Light grey text'.PHP_EOL, Color::TXT_LIGHT_GRAY);
        $out->printColoredLn('Light green text'.PHP_EOL, Color::TXT_LIGHT_GREEN);
        $out->printColoredLn('Light purple text'.PHP_EOL, Color::TXT_LIGHT_PURPLE);
        $out->printColoredLn('Light red text'.PHP_EOL, Color::TXT_LIGHT_RED);
        $out->printColoredLn('Purple text'.PHP_EOL, Color::TXT_PURPLE);
        $out->printColoredLn('Red text'.PHP_EOL, Color::TXT_RED);
        $out->printColoredLn(' White text on green background '.PHP_EOL, Color::TXT_WHITE, Color::BG_GREEN);
        $out->printColoredLn('Yellow text'.PHP_EOL, Color::TXT_YELLOW);
        $out->printColoredLn(' Black text on yellow background '.PHP_EOL, Color::TXT_BLACK, Color::BG_YELLOW);
        $out->printColoredLn(' Light grey text on blue background '.PHP_EOL, Color::TXT_LIGHT_GRAY, Color::BG_BLUE);
    }

    public function tables() {
        $table = new Table();
        $table
            ->setHeaders(['Name', 'Age', 'Salary', 'Interests'])
            ->addRow(['Mike Ross', 37, '$ 557,323', 'Practising law, drinking'])
            ->addRow(['Barney Stinson', 42, '$ 757,323', 'Girls, booze, laser tag'])
            ->setIndent(0)
            ->setPadding(5)
            ->display();
    }
}