save() 공개 메소드

Save the code object to disk.
public save ( string $to = null, boolean $append = false ) : void
$to string
$append boolean
리턴 void
예제 #1
0
 /**
  * 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();
     }
 }
예제 #2
0
 public function testRenderAndSave()
 {
     $c = new Generator(__DIR__ . '/../tmp/Test.php', Generator::CREATE_CLASS);
     $c->setNamespace(new NamespaceGenerator('Test\\Space'));
     $c->setBody('test body')->setClose(true);
     $c->appendToBody('more code');
     $body = $c->render(true);
     ob_start();
     $c->render();
     $output = ob_get_clean();
     $this->assertContains('namespace Test\\Space', $output);
     $c->save();
     $this->assertContains('test body', $body);
     $this->assertContains('more code', $body);
     $this->fileExists(__DIR__ . '/../tmp/Test.php');
     if (file_exists(__DIR__ . '/../tmp/Test.php')) {
         unlink(__DIR__ . '/../tmp/Test.php');
     }
 }
예제 #3
0
 /**
  * Install the project class files
  *
  * @param \Pop\Config $install
  * @param string     $installDir
  * @return void
  */
 public static function install($install, $installDir)
 {
     // Create the project class file
     $projectCls = new Generator($install->project->base . '/module/' . $install->project->name . '/src/' . $install->project->name . '/Project.php', Generator::CREATE_CLASS);
     // Set namespace
     $ns = new NamespaceGenerator($install->project->name);
     $ns->setUse('Pop\\Project\\Project', 'P');
     // Create 'run' method
     $run = new MethodGenerator('run');
     $run->setDesc('Add any project specific code to this method for run-time use here.');
     $run->appendToBody('parent::run();', false);
     $run->getDocblock()->setReturn('void');
     // Finalize the project config file and save it
     $projectCls->setNamespace($ns);
     $projectCls->code()->setParent('P')->addMethod($run);
     $projectCls->save();
     $input = self::installWeb();
     // Install any web config and controller files
     if ($input != 'n') {
         if (file_exists(__DIR__ . '/Web/index.php')) {
             $index = new Generator(__DIR__ . '/Web/index.php');
             $contents = $index->read() . '// Run the project' . PHP_EOL . 'try {' . PHP_EOL . '    $project->run();' . PHP_EOL . '} catch (\\Exception $e) {' . PHP_EOL . '    echo $e->getMessage();' . PHP_EOL . '}' . PHP_EOL;
             file_put_contents($install->project->docroot . '/index.php', $contents);
         }
         if ($input == 'a') {
             if (file_exists(__DIR__ . '/Web/ht.access')) {
                 copy(__DIR__ . '/Web/ht.access', $install->project->docroot . '/.htaccess');
             }
         } else {
             if ($input == 'i') {
                 if (file_exists(__DIR__ . '/Web/web.config')) {
                     copy(__DIR__ . '/Web/web.config', $install->project->docroot . '/web.config');
                 }
             } else {
                 echo \Pop\I18n\I18n::factory()->__('You will have to install your web server rewrite configuration manually.') . PHP_EOL;
             }
         }
     }
 }
예제 #4
0
 /**
  * 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();
     }
 }
예제 #5
0
파일: Forms.php 프로젝트: nicksagona/PopPHP
 /**
  * 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();
     }
 }
예제 #6
0
<?php

require_once '../../bootstrap.php';
use Pop\Code;
try {
    // Create the code generator object
    $code = new Code\Generator('../tmp/MyInterface.php', Code\Generator::CREATE_INTERFACE);
    $code->setDocblock(new Code\Generator\DocblockGenerator('This is my test interface file'))->getDocblock()->setTag('category', 'Pop')->setTag('package', 'Pop_Code')->setTag('author', 'Joe Author');
    // Create namespace object
    $ns = new Code\Generator\NamespaceGenerator('Some\\Other');
    $ns->setUse('Some\\Other\\Thing')->setUse('Some\\Other\\Blah', 'B')->setUse('Some\\Other\\Another');
    // Create a method object
    $method = new Code\Generator\MethodGenerator('testMethod');
    $method->setDesc('This is a test method')->addArgument('test', "null", '\\Pop\\Filter\\String')->addArgument('other', "array()", 'array');
    // Create another method object
    $method2 = new Code\Generator\MethodGenerator('anotherMethod');
    $method2->setDesc('This is another test method')->addArgument('someParam', "array()", 'array');
    // Add code pieces to the code file
    $code->setNamespace($ns);
    $code->code()->setDocblock(new Code\Generator\DocblockGenerator('This is my test interface'))->getDocblock()->setTag('category', 'Pop')->setTag('package', 'Pop_Code')->setTag('author', 'Joe Author');
    $code->code()->addMethod($method)->addMethod($method2);
    // Render and save the interface
    $code->save();
    echo 'Interface saved.';
} catch (\Exception $e) {
    echo $e->getMessage() . PHP_EOL . PHP_EOL;
}