Вход Регистрация
Файл: src/vendor/way/generators/src/Way/Generators/Parsers/MigrationNameParser.php
Строк: 81
<?php namespace WayGeneratorsParsers;

class 
MigrationNameParser {

    
/**
     * Parse a migration name, like:
     * create_orders_table
     * add_last_name_to_recent_orders_table
     *
     * @param $migrationName
     * @throws InvalidActionType
     * @return array
     */
    
public function parse($migrationName)
    {
        
// Split the migration name into pieces
        // create_orders_table => ['create', 'orders', 'table']
        
$pieces explode('_'$migrationName);

        
// We'll start by fetching the CRUD action type
        
$action $this->normalizeActionName(array_shift($pieces));

        
// Next, we can remove any "table" string at
        // the end of the migration name, like:
        // create_orders_table
        
if (end($pieces) == 'table'array_pop($pieces);

        
// Now, we need to figure out the table name
        
$table $this->getTableName($pieces);

        return 
compact('action''table');
    }

    
/**
     * Determine what the table name should be
     *
     * @param array $pieces
     * @return string
     */
    
protected function getTableName(array $pieces)
    {
        
$tableName = [];

        
// This is deceptively complex, because
        // there are a number of ways to write
        // these migration names. We'll work backwards
        // to figure out the name.
        
foreach(array_reverse($pieces) as $piece)
        {
            
// Once we get to a connecting word (if any), this
            // will signal the end of our search. So, for
            // add_name_to_archived_lessons, "archived_lessons"
            // would be the table name
            
if (in_array($piece, ['to''for''on''from''into'])) break;

            
$tableName[] = $piece;
        }

        
// We can't forget to reverse it back again!
        
return implode('_'array_reverse($tableName));
    }

    
/**
     * Try to mold user's input
     * to one of the CRUD operations
     *
     * @param $action
     * @return string
     */
    
protected function normalizeActionName($action)
    {
        switch (
$action)
        {
            case 
'create':
            case 
'make':
                return 
'create';
            case 
'delete':
            case 
'destroy':
            case 
'drop':
                return 
'delete';
            case 
'add':
            case 
'append':
            case 
'update':
            case 
'insert':
                return 
'add';
            default:
                return 
$action;
        }
    }

}
Онлайн: 0
Реклама