每天laravel-20160719|Parser

<?php

namespace Illuminate\Console;

use Illuminate\Support\Str;
use InvalidArgumentException;
use Symfony\Component\Console\Input\InputOption;
use Symfony\Component\Console\Input\InputArgument;
// my name space
class Parser
{
    /**
     * Parse the given console command definition into an array.
     *
     * @param  string  $expression
     * @return array
     *
     * @throws \InvalidArgumentException
     */
    public static function parse($expression)//Parse the given console command definition into array.
    {
        if (trim($expression) === ‘‘) {
            throw new InvalidArgumentException(‘Console command definition is empty.‘);
        }// trim the expression ,if have the null
       // throw new

        preg_match(‘/[^\s]+/‘, $expression, $matches);// get you  want value in the big date.

        if (isset($matches[0])) {// is has the match value ,only get one
            $name = $matches[0];// use the name to save the matches[0] value
        } else {
            throw new InvalidArgumentException(‘Unable to determine command name from signature.‘);
        }// else throw new trouble.

        preg_match_all(‘/\{\s*(.*?)\s*\}/‘, $expression, $matches);// get all the value that be match

        $tokens = isset($matches[1]) ? $matches[1] : [];// $tokens check the matches

        if (count($tokens)) {// count($tokens) count array(); this is the matches results
            return array_merge([$name], static::parameters($tokens));// array_merge  parameters ,change the parameters
        }

        return [$name, [], []];// return the result
    }// this is  a change the
   // the $name to

    /**
     * Extract all of the parameters from the tokens.
     *
     * @param  array  $tokens
     * @return array
     */
    protected static function parameters(array $tokens)//Extract all of the parameters from the tokens.
    {
        $arguments = [];// store the arguments

        $options = [];// store the options

        foreach ($tokens as $token) {// all the tokens as token
            if (! Str::startsWith($token, ‘--‘)) {// !Str::starsWith() get the true of false
                $arguments[] = static::parseArgument($token);//
            } else {
                $options[] = static::parseOption(ltrim($token, ‘-‘));// get the options
            }
        }

        return [$arguments, $options];// back the result from tokens
    }// one is arguments,
   // one is options

    /**
     * Parse an argument expression.
     *
     * @param  string  $token
     * @return \Symfony\Component\Console\Input\InputArgument
     */
    protected static function parseArgument($token)//Parse an argument expression.
    {
        $description = null;// a store string

        if (Str::contains($token, ‘ : ‘)) {// a function to get the token get the result true or false
            list($token, $description) = explode(‘ : ‘, $token, 2);// extract the list array to the token and description

            $token = trim($token);// trim the token

            $description = trim($description);// trim the description
        }

        switch (true) {// true is value , and the value no break
            case Str::endsWith($token, ‘?*‘):// case 1 set the flag
                return new InputArgument(trim($token, ‘?*‘), InputArgument::IS_ARRAY, $description);

            case Str::endsWith($token, ‘*‘):// case 2 set the flag
                return new InputArgument(trim($token, ‘*‘), InputArgument::IS_ARRAY | InputArgument::REQUIRED, $description);

            case Str::endsWith($token, ‘?‘):// case 3 set the flag
                return new InputArgument(trim($token, ‘?‘), InputArgument::OPTIONAL, $description);

            case preg_match(‘/(.+)\=(.+)/‘, $token, $matches):// case 4 more different matches
                return new InputArgument($matches[1], InputArgument::OPTIONAL, $description, $matches[2]);

            default:
                return new InputArgument($token, InputArgument::REQUIRED, $description);
        }// change the InputArgument value
    }

    /**
     * Parse an option expression.
     *
     * @param  string  $token
     * @return \Symfony\Component\Console\Input\InputOption
     */
    protected static function parseOption($token)//Parse an option expression
    {
        $description = null;// ParseOption

        if (Str::contains($token, ‘ : ‘)) {// check the str
            list($token, $description) = explode(‘ : ‘, $token);// list the each()
            $token = trim($token);
            $description = trim($description);
        }// back the token description

        $shortcut = null;// null shortcut

        $matches = preg_split(‘/\s*\|\s*/‘, $token, 2);// split the str by preg.

        if (isset($matches[1])) {
            $shortcut = $matches[0];
            $token = $matches[1];
        }// get the value from the token

        switch (true) {
            case Str::endsWith($token, ‘=‘):// case 1
                return new InputOption(trim($token, ‘=‘), $shortcut, InputOption::VALUE_OPTIONAL, $description);

            case Str::endsWith($token, ‘=*‘):// case 2
                return new InputOption(trim($token, ‘=*‘), $shortcut, InputOption::VALUE_OPTIONAL | InputOption::VALUE_IS_ARRAY, $description);

            case preg_match(‘/(.+)\=(.+)/‘, $token, $matches):
                return new InputOption($matches[1], $shortcut, InputOption::VALUE_OPTIONAL, $description, $matches[2]);

            default:
                return new InputOption($token, $shortcut, InputOption::VALUE_NONE, $description);
        }// input Option

    }// at last you will found is a safe way to get you  input argument or option from a token
}
时间: 2024-10-12 22:28:34

每天laravel-20160719|Parser的相关文章

PHP Cron Expression Parser ( LARAVEL )

   The PHP cron expression parser can parse a CRON expression, determine if it is due to run, calculate the next run date of the expression, and calculate the previous run date of the expression. You can calculate dates far into the future or past by

Laravel 5.2 INSTALL- node&#39;s npm and ruby&#39;s bundler.

https://getcomposer.org/doc/00-intro.md Introduction# Composer is a tool for dependency management in PHP. It allows you to declare the libraries your project depends on and it will manage (install/update) them for you. Dependency management# Compose

laravel项目3myPersimmon学习(使用了什么插件,视图,编辑器,migrate,seeder)1urlencode,sha1_file

p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px "Helvetica Neue"; color: #454545 } p.p2 { margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px ".PingFang SC"; color: #454545 } p.p3 { margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px "He

Laravel 5.4 中的异常处理器和HTTP异常处理实例教程

错误和异常是处理程序开发中不可回避的议题,在本地开发中我们往往希望能捕获程序抛出的异常并将其显示打印出来,以便直观的知道程序在哪里出了问题并予以解决,而在线上环境我们不希望将程序错误或异常显示在浏览器中(出于安全考虑),这个时候我们仍然要捕获异常,只不过不是显示到浏览器中,而是记录到日志中,方便日后排查问题. 百牛信息技术bainiu.ltd整理发布于博客园 Laravel当然支持PHP原生的错误和异常处理,但是在此基础上进行了一些封装处理,从而更方便在不同开发环境切换以及对错误和异常的处理.

laravel框架数据迁移

迁移就像数据库的版本控制,允许团队简单轻松的编辑并共享应用的数据库表结构,迁移通常和Laravel 的 schema 构建器结对从而可以很容易地构建应用的数据库表结构.如果你曾经告知小组成员需要手动添加列到本地数据库结构,那么这正是数据库迁移所致力于解决的问题. Laravel 的 Schema 门面提供了与数据库系统无关的创建和操纵表的支持,在 Laravel 所支持的所有数据库系统中提供一致的.优雅的.平滑的 API. laravel默认有两个文件uses  和 password_reset

详细说明php的4中开源框架(TP,CI,Laravel,Yii)

ThinkPHP简称TP,TP借鉴了Java思想,基于PHP5,充分利用了PHP5的特性,部署简单只需要一个入口文件,一起搞定,简单高效.中文文档齐全,入门超级简单.自带模板引擎,具有独特的数据验证和自动填充功能,框架更新速度比较速度. 优点:这个框架易使用 易学 安全 对bae sae支持很好提供的工具也很强大 可以支持比较大的项目开发 易扩展 全中文文档 总的来说这款框架适合非常适合国人使用 性能 上比CI还要强一些 缺点:配置对有些人来说有些复杂(其实是因为没有认真的读过其框架源码)文档有

Laravel 5.0 - Middleware (中间件)

图片:http://stackphp.com/ 如上图所示,中心的绿色区域是整个应用的核心区域. 所以,中间件就是一系列处理请求和响应的方式而不是你用程序逻辑的一部分. Laravel 中默认使用中间件处理请求中的加密解密,以及 Cookies 和 Sessions.你也可以自定义自己所需的中间件. 写中间件 artisan make:middleware MyMiddleware 执行上面的命令,生成中间件文件: <?php namespace App\Http\Middleware; use

laravel安装笔记

一.安装composer 安装之前将\php\php.ini文件中的php_openssl.dll扩展库开启,否则composer在安装过程中会出现错误提示. (我在安装过程中发现apache目录下的php.ini最好也开启php_openssl.dll,就是讲前面的‘:’号去掉) composer下载地址:https://getcomposer.org/ windows下载地址:https://getcomposer.org/Composer-Setup.exe 二.下载Laravel最新框架

Laravel 5.5 的自定义验证对象/类

本文和大家分享的主要是Laravel 5.5 的自定义验证对象/类相关内容,一起来看看吧,希望对大家学习Laravel有所帮助. Laravel 5.5 将提供一个全新的自定义验证规则的对象,以作为原来的 Validator::extend 方法的替代. Laravel 中的表单验证是比较方便的,而且内置了大量的可用验证规则,但不管官方提供了多少,总还是会有满足不了需求的时候.很多时候我们会直接用正则表达式来处理这种特殊的验证,也有时候我们会选择用 Validator::extend来扩展一个自

laravel 数据库操作小例子

public function demo() { $res = null; //insert数据插入 //$user=array('username'=>'joy','password'=>'123456','age'=>23); //$res = DB::table('users')->insert($user); /* 数据查询 $res = DB::table('users')->where('username','joy')->get(); $res = DB: