コード例 #1
0
ファイル: Generator.php プロジェクト: schmunk42/yii2-giiant
 /**
  * {@inheritdoc}
  */
 public function generate()
 {
     $files = [];
     $relations = $this->generateRelations();
     $db = $this->getDbConnection();
     foreach ($this->getTableNames() as $tableName) {
         list($relations, $translations) = array_values($this->extractTranslations($tableName, $relations));
         //var_dump($relations,$tableName);exit;
         $className = php_sapi_name() === 'cli' ? $this->generateClassName($tableName) : $this->modelClass;
         $queryClassName = $this->generateQuery ? $this->generateQueryClassName($className) : false;
         $tableSchema = $db->getTableSchema($tableName);
         $params = ['tableName' => $tableName, 'className' => $className, 'queryClassName' => $queryClassName, 'tableSchema' => $tableSchema, 'labels' => $this->generateLabels($tableSchema), 'hints' => $this->generateHints($tableSchema), 'rules' => $this->generateRules($tableSchema), 'relations' => isset($relations[$tableName]) ? $relations[$tableName] : [], 'ns' => $this->ns, 'enum' => $this->getEnum($tableSchema->columns)];
         if (!empty($translations)) {
             $params['translation'] = $translations;
         }
         $params['blameable'] = $this->generateBlameable($tableSchema);
         $params['timestamp'] = $this->generateTimestamp($tableSchema);
         $files[] = new CodeFile(Yii::getAlias('@' . str_replace('\\', '/', $this->ns)) . '/base/' . $className . $this->baseClassSuffix . '.php', $this->render('model.php', $params));
         $modelClassFile = Yii::getAlias('@' . str_replace('\\', '/', $this->ns)) . '/' . $className . '.php';
         if ($this->generateModelClass || !is_file($modelClassFile)) {
             $files[] = new CodeFile($modelClassFile, $this->render('model-extended.php', $params));
         }
         if ($queryClassName) {
             $queryClassFile = Yii::getAlias('@' . str_replace('\\', '/', $this->queryNs)) . '/' . $queryClassName . '.php';
             if ($this->generateModelClass || !is_file($queryClassFile)) {
                 $params = ['className' => $queryClassName, 'modelClassName' => $className];
                 $files[] = new CodeFile($queryClassFile, $this->render('query.php', $params));
             }
         }
         /*
          * create gii/[name]GiiantModel.json with actual form data
          */
         $suffix = str_replace(' ', '', $this->getName());
         $formDataDir = Yii::getAlias('@' . str_replace('\\', '/', $this->ns));
         $formDataFile = StringHelper::dirname($formDataDir) . '/gii' . '/' . $tableName . $suffix . '.json';
         $formData = json_encode(SaveForm::getFormAttributesValues($this, $this->formAttributes()));
         $files[] = new CodeFile($formDataFile, $formData);
     }
     return $files;
 }
コード例 #2
0
ファイル: form.php プロジェクト: unyii2/yii2-giiant
<?php

use schmunk42\giiant\helpers\SaveForm;
/*
 * @var yii\web\View
 * @var yii\bootstrap\ActiveForm                   $form
 * @var schmunk42\giiant\generators\crud\Generator $generator
 */
/*
 * JS for listbox "Saved Form"
 * on chenging listbox, form fill with selected saved forma data
 * currently work with input text, input checkbox and select form fields
 */
$this->registerJs(SaveForm::getSavedFormsJs($generator->getName()), yii\web\View::POS_END);
$this->registerJs(SaveForm::jsFillForm(), yii\web\View::POS_END);
echo $form->field($generator, 'savedForm')->dropDownList(SaveForm::getSavedFormsListbox($generator->getName()), ['onchange' => 'fillForm(this.value)']);
echo $form->field($generator, 'modelClass');
echo $form->field($generator, 'searchModelClass');
echo $form->field($generator, 'controllerClass');
echo $form->field($generator, 'baseControllerClass');
echo $form->field($generator, 'viewPath');
echo $form->field($generator, 'pathPrefix');
echo $form->field($generator, 'accessFilter')->checkbox();
echo $form->field($generator, 'generateAccessFilterMigrations')->checkbox();
echo $form->field($generator, 'enableI18N')->checkbox();
echo $form->field($generator, 'messageCategory');
echo $form->field($generator, 'modelMessageCategory');
echo $form->field($generator, 'singularEntities')->checkbox();
echo $form->field($generator, 'indexWidgetType')->dropDownList(['grid' => 'GridView', 'list' => 'ListView']);
echo $form->field($generator, 'formLayout')->dropDownList(['default' => 'full-width', 'horizontal' => 'horizontal', 'inline' => 'inline']);
echo $form->field($generator, 'actionButtonClass')->dropDownList(['yii\\grid\\ActionColumn' => 'Default']);
コード例 #3
0
ファイル: Generator.php プロジェクト: schmunk42/yii2-giiant
 public function generate()
 {
     $accessDefinitions = (require $this->getTemplatePath() . '/access_definition.php');
     $this->controllerNs = \yii\helpers\StringHelper::dirname(ltrim($this->controllerClass, '\\'));
     $this->moduleNs = \yii\helpers\StringHelper::dirname(ltrim($this->controllerNs, '\\'));
     $controllerName = substr(\yii\helpers\StringHelper::basename($this->controllerClass), 0, -10);
     if ($this->singularEntities) {
         $this->modelClass = Inflector::singularize($this->modelClass);
         $this->controllerClass = Inflector::singularize(substr($this->controllerClass, 0, strlen($this->controllerClass) - 10)) . 'Controller';
         $this->searchModelClass = Inflector::singularize($this->searchModelClass);
     }
     $controllerFile = Yii::getAlias('@' . str_replace('\\', '/', ltrim($this->controllerClass, '\\')) . '.php');
     $baseControllerFile = StringHelper::dirname($controllerFile) . '/base/' . StringHelper::basename($controllerFile);
     $restControllerFile = StringHelper::dirname($controllerFile) . '/api/' . StringHelper::basename($controllerFile);
     /*
      * search generated migration and overwrite it or create new
      */
     $migrationDir = StringHelper::dirname(StringHelper::dirname($controllerFile)) . '/migrations';
     if (file_exists($migrationDir) && ($migrationDirFiles = glob($migrationDir . '/m*_' . $controllerName . '00_access.php'))) {
         $this->migrationClass = pathinfo($migrationDirFiles[0], PATHINFO_FILENAME);
     } else {
         $this->migrationClass = 'm' . date('ymd_Hi') . '00_' . $controllerName . '_access';
     }
     $files[] = new CodeFile($baseControllerFile, $this->render('controller.php', ['accessDefinitions' => $accessDefinitions]));
     $params['controllerClassName'] = \yii\helpers\StringHelper::basename($this->controllerClass);
     if ($this->overwriteControllerClass || !is_file($controllerFile)) {
         $files[] = new CodeFile($controllerFile, $this->render('controller-extended.php', $params));
     }
     if ($this->overwriteRestControllerClass || !is_file($restControllerFile)) {
         $files[] = new CodeFile($restControllerFile, $this->render('controller-rest.php', $params));
     }
     if (!empty($this->searchModelClass)) {
         $searchModel = Yii::getAlias('@' . str_replace('\\', '/', ltrim($this->searchModelClass, '\\') . '.php'));
         if ($this->overwriteSearchModelClass || !is_file($searchModel)) {
             $files[] = new CodeFile($searchModel, $this->render('search.php'));
         }
     }
     $viewPath = $this->getViewPath();
     $templatePath = $this->getTemplatePath() . '/views';
     foreach (scandir($templatePath) as $file) {
         if (empty($this->searchModelClass) && $file === '_search.php') {
             continue;
         }
         if (is_file($templatePath . '/' . $file) && pathinfo($file, PATHINFO_EXTENSION) === 'php') {
             echo $file;
             $files[] = new CodeFile("{$viewPath}/{$file}", $this->render("views/{$file}", ['permisions' => $permisions]));
         }
     }
     if ($this->generateAccessFilterMigrations) {
         /*
          * access migration
          */
         $migrationFile = $migrationDir . '/' . $this->migrationClass . '.php';
         //var_dump($migrationFile);exit;
         $files[] = new CodeFile($migrationFile, $this->render('migration_access.php', ['accessDefinitions' => $accessDefinitions]));
         /*
          * access roles translation
          */
         $forRoleTranslationFile = StringHelper::dirname(StringHelper::dirname($controllerFile)) . '/messages/for-translation/' . $controllerName . '.php';
         $files[] = new CodeFile($forRoleTranslationFile, $this->render('roles-translation.php', ['accessDefinitions' => $accessDefinitions]));
     }
     /*
      * create gii/[name]GiantCRUD.json with actual form data
      */
     $suffix = str_replace(' ', '', $this->getName());
     $controllerFileinfo = pathinfo($controllerFile);
     $formDataFile = StringHelper::dirname(StringHelper::dirname($controllerFile)) . '/gii/' . str_replace('Controller', $suffix, $controllerFileinfo['filename']) . '.json';
     //$formData = json_encode($this->getFormAttributesValues());
     $formData = json_encode(SaveForm::getFormAttributesValues($this, $this->formAttributes()));
     $files[] = new CodeFile($formDataFile, $formData);
     return $files;
 }