Method to convert the string from under_score to camelCase format
public static underscoreToCamelcase ( string $string ) : string | ||
$string | string | |
Результат | string |
/** * Install the model class files * * @param \Pop\Config $install * @return void */ public static function install($install) { echo \Pop\I18n\I18n::factory()->__('Creating model class files...') . PHP_EOL; // Create model class folder $modelDir = $install->project->base . '/module/' . $install->project->name . '/src/' . $install->project->name . '/Model'; if (!file_exists($modelDir)) { mkdir($modelDir); } $models = $install->models->asArray(); foreach ($models as $model) { $modelName = ucfirst(\Pop\Filter\String::underscoreToCamelcase($model)); // Define namespace $ns = new NamespaceGenerator($install->project->name . '\\Model'); // Create and save model class file $modelCls = new Generator($modelDir . '/' . $modelName . '.php', Generator::CREATE_CLASS); $modelCls->setNamespace($ns); $modelCls->save(); } }
/** * Install the table class files * * @param \Pop\Config $install * @param array $dbTables * @return void */ public static function install($install, $dbTables) { echo \Pop\I18n\I18n::factory()->__('Creating database table class files...') . PHP_EOL; // Create table class folder $tableDir = $install->project->base . '/module/' . $install->project->name . '/src/' . $install->project->name . '/Table'; if (!file_exists($tableDir)) { mkdir($tableDir); } // Loop through the tables, creating the classes foreach ($dbTables as $table => $value) { $prefix = isset($value['prefix']) ? $value['prefix'] : null; $tableName = ucfirst(\Pop\Filter\String::underscoreToCamelcase(str_replace($prefix, '', $table))); $ns = new NamespaceGenerator($install->project->name . '\\Table'); $ns->setUse('Pop\\Db\\Record'); if (strpos($value['primaryId'], '|') !== false) { $pIdType = 'array'; $pId = explode('|', $value['primaryId']); } else { $pIdType = 'string'; $pId = $value['primaryId']; } if (null !== $prefix) { $prefix = new PropertyGenerator('prefix', 'string', $prefix, 'protected'); } $propId = new PropertyGenerator('primaryId', $pIdType, $pId, 'protected'); $propAuto = new PropertyGenerator('auto', 'boolean', $value['auto'], 'protected'); // Create and save table class file $tableCls = new Generator($tableDir . '/' . $tableName . '.php', Generator::CREATE_CLASS); $tableCls->setNamespace($ns); $tableCls->code()->setParent('Record')->addProperty($propId)->addProperty($propAuto); if (null !== $prefix) { $tableCls->code()->addProperty($prefix); } $tableCls->save(); } }
public function testUnderscoreToCamelCase() { $this->assertEquals('helloWorld', String::underscoreToCamelcase('hello_world')); }
/** * Create the bootstrap file * * @param \Pop\Config $install * @return void */ public static function install($install) { // Define full paths of the autoloader and config files $autoload = realpath(__DIR__ . '/../../Loader/Autoloader.php'); $moduleSrc = realpath($install->project->base . '/module/' . $install->project->name . '/src'); $projectCfg = realpath($install->project->base . '/config/project.php'); $moduleCfg = realpath($install->project->base . '/module/' . $install->project->name . '/config/module.php'); // Figure out the relative base and docroot $base = str_replace("\\", '/', realpath($install->project->base)); $docroot = str_replace("\\", '/', realpath($install->project->docroot)); $base = substr($base, -1) == '/' ? substr($base, 0, -1) : $base; $docroot = substr($docroot, -1) == '/' ? substr($docroot, 0, -1) : $docroot; // If the base and docroot are the same if (strlen($base) == strlen($docroot)) { $autoload = "__DIR__ . '/vendor/PopPHPFramework/src/Pop/Loader/Autoloader.php'"; $moduleSrc = "__DIR__ . '/module/" . $install->project->name . "/src'"; $projectCfg = "__DIR__ . '/config/project.php'"; $moduleCfg = "__DIR__ . '/module/" . $install->project->name . "/config/module.php'"; // If the docroot is under the base } else { if (strlen($base) < strlen($docroot)) { // Calculate how many levels up the base is from the docroot $diff = str_replace($base, '', $docroot); $levels = substr_count($diff, '/'); $dirs = '/'; for ($i = 0; $i < $levels; $i++) { $dirs .= '../'; } $autoload = "__DIR__ . '" . $dirs . "vendor/PopPHPFramework/src/Pop/Loader/Autoloader.php'"; $moduleSrc = "__DIR__ . '" . $dirs . "module/" . $install->project->name . "/src'"; $projectCfg = "__DIR__ . '" . $dirs . "config/project.php'"; $moduleCfg = "__DIR__ . '" . $dirs . "module/" . $install->project->name . "/config/module.php'"; // If the base is under the docroot } else { if (strlen($base) > strlen($docroot)) { $dir = str_replace($docroot, '', $base); $autoload = "__DIR__ . '" . $dir . "/vendor/PopPHPFramework/src/Pop/Loader/Autoloader.php'"; $moduleSrc = "__DIR__ . '" . $dir . "/module/" . $install->project->name . "/src'"; $projectCfg = "__DIR__ . '" . $dir . "/config/project.php'"; $moduleCfg = "__DIR__ . '" . $dir . "/module/" . $install->project->name . "/config/module.php'"; } } } // Create new Code file object $bootstrap = new \Pop\Code\Generator($install->project->docroot . '/bootstrap.php'); // Create new bootstrap file if (!file_exists($install->project->docroot . '/bootstrap.php')) { $bootstrap->appendToBody("// Require the Autoloader class file" . PHP_EOL . "require_once {$autoload};" . PHP_EOL)->appendToBody("// Instantiate the autoloader object" . PHP_EOL . "\$autoloader = Pop\\Loader\\Autoloader::factory();" . PHP_EOL . "\$autoloader->splAutoloadRegister();"); } // Else, just append to the existing bootstrap file $bootstrap->appendToBody("\$autoloader->register('{$install->project->name}', {$moduleSrc});" . PHP_EOL)->appendToBody("// Create a project object")->appendToBody("\$project = {$install->project->name}\\Project::factory(")->appendToBody(" include {$projectCfg},")->appendToBody(" include {$moduleCfg},"); // Set up any controllers via a router object if (isset($install->controllers)) { $controllers = $install->controllers->asArray(); $ctrls = array(); foreach ($controllers as $key => $value) { $subs = array(); foreach ($value as $k => $v) { if (is_array($v)) { $subs[] = $k; } } if (count($subs) > 0) { $ctls = "'{$key}' => array(" . PHP_EOL; if (array_key_exists('index', $value)) { $ctls .= " '/' => '{$install->project->name}\\Controller\\" . ucfirst(String::underscoreToCamelcase(substr($key, 1))) . "\\IndexController'," . PHP_EOL; } foreach ($subs as $sub) { $ctls .= " '{$sub}' => '{$install->project->name}\\Controller\\" . ucfirst(String::underscoreToCamelcase(substr($key, 1))) . "\\" . ucfirst(String::underscoreToCamelcase(substr($sub, 1))) . "Controller'," . PHP_EOL; } $ctls .= ' )'; $ctrls[] = $ctls; } else { if ($key == '/') { $ctrls[] = "'{$key}' => '{$install->project->name}\\Controller\\IndexController'"; } else { $controllerName = substr($key, 1); if (array_key_exists('index', $value)) { $ctrls[] = "'{$key}' => '{$install->project->name}\\Controller\\" . ucfirst(String::underscoreToCamelcase($controllerName)) . "\\IndexController'"; } else { $ctrls[] = "'{$key}' => '{$install->project->name}\\Controller\\" . ucfirst(String::underscoreToCamelcase($controllerName)) . "Controller'"; } } } } $bootstrap->appendToBody(" new Pop\\Mvc\\Router(array("); $i = 1; foreach ($ctrls as $c) { $end = $i < count($ctrls) ? ',' : null; $bootstrap->appendToBody(" " . $c . $end); $i++; } $bootstrap->appendToBody(" ))"); } // Finalize and save the bootstrap file $bootstrap->appendToBody(");")->save(); }
/** * Install the form class files * * @param \Pop\Config $install * @return void */ public static function install($install) { echo \Pop\I18n\I18n::factory()->__('Creating form class files...') . PHP_EOL; // Create form class folder $formDir = $install->project->base . '/module/' . $install->project->name . '/src/' . $install->project->name . '/Form'; if (!file_exists($formDir)) { mkdir($formDir); } $forms = $install->forms->asArray(); foreach ($forms as $name => $form) { $formName = ucfirst(\Pop\Filter\String::underscoreToCamelcase($name)); // Define namespace $ns = new NamespaceGenerator($install->project->name . '\\Form'); $ns->setUse('Pop\\Form\\Form')->setUse('Pop\\Form\\Element')->setUse('Pop\\Validator'); // Create the constructor $construct = new MethodGenerator('__construct'); $construct->setDesc('Constructor method to instantiate the form object'); $construct->getDocblock()->setReturn('self'); $construct->addArguments(array(array('name' => 'action', 'value' => 'null', 'type' => 'string'), array('name' => 'method', 'value' => "'post'", 'type' => 'string'), array('name' => 'fields', 'value' => 'null', 'type' => 'array'), array('name' => 'indent', 'value' => 'null', 'type' => 'string'))); // Create the init values array within the constructor if (is_array($form) && count($form) > 0) { $construct->appendToBody("\$this->initFieldsValues = array ("); $i = 0; foreach ($form as $name => $field) { $i++; $construct->appendToBody(" '" . $name . "' => array ("); $j = 0; foreach ($field as $key => $value) { $j++; $comma = $j < count($field) ? ',' : null; if ($key == 'validators') { $val = null; if (is_array($value)) { $val = 'array(' . PHP_EOL; foreach ($value as $v) { $val .= ' new Validator\\' . $v . ',' . PHP_EOL; } $val .= ' )'; } else { $val = 'new Validator\\' . $value; } $construct->appendToBody(" '{$key}' => {$val}{$comma}"); } else { if ($key == 'value' || $key == 'marked' || $key == 'attributes' || $key == 'error') { $val = var_export($value, true); $val = str_replace(PHP_EOL, PHP_EOL . ' ', $val); if (strpos($val, 'Select::') !== false) { $val = 'Element\\' . str_replace("'", '', $val); } $construct->appendToBody(" '{$key}' => {$val}{$comma}"); } else { if (is_bool($value)) { $val = $value ? 'true' : 'false'; } else { $val = "'" . $value . "'"; } $construct->appendToBody(" '{$key}' => {$val}{$comma}"); } } } $end = $i < count($form) ? ' ),' : ' )'; $construct->appendToBody($end); } $construct->appendToBody(");"); } $construct->appendToBody("parent::__construct(\$action, \$method, \$fields, \$indent);"); // Create and save form class file $formCls = new Generator($formDir . '/' . $formName . '.php', Generator::CREATE_CLASS); $formCls->setNamespace($ns); $formCls->code()->setParent('Form')->addMethod($construct); $formCls->save(); } }