/** * Converte o nome de uma tabela para uma classe DbTable * * @param string $moduleName * @param string $tableName * @return string */ public static function convertTableNameToObjectName($moduleName, $tableName) { if ($moduleName == '') { $moduleName = 'Application'; } return ucfirst($moduleName) . "_Model_" . ZendT_Tool_ModelTProvider::convertTableNameToClassName($tableName) . "_Crud"; }
/** * * @param string $table * @param string $adapter * @param string $module * @return void * @throws Zend_Tool_Project_Exception * @throws Exception */ public function create($table, $adapter, $module = null) { $name = ZendT_Tool_ModelTProvider::convertTableNameToClassName($table); $this->_print(' Criando Models '); $this->_print('name: ' . $name . ' | table: ' . $table . ' | adapter : ' . $adapter . ' | module: ' . $module); $this->_loadProfile(self::NO_PROFILE_THROW_EXCEPTION); $this->connect($this->_loadedProfile, $adapter); // Check that there is not a dash or underscore, return if doesnt match regex if (preg_match('#[_-]#', $name)) { throw new Zend_Tool_Project_Provider_Exception('Form names should be camel cased.'); } $originalName = $name; $name = ucfirst($name); if ($table == '') { throw new Zend_Tool_Project_Provider_Exception('You must provide both the Form name as well as the actual db table\'s name.'); } // get request/response object $request = $this->_registry->getRequest(); $response = $this->_registry->getResponse(); // alert the user about inline converted names $tense = $request->isPretend() ? 'would be' : 'is'; if ($name !== $originalName) { $response->appendContent('Note: The canonical model name that ' . $tense . ' used with other providers is "' . $name . '";' . ' not "' . $originalName . '" as supplied', array('color' => array('yellow'))); } /** * Cria o DB Table */ try { $formResources = Zend_Tool_Project_Provider_Form::createResource($this->_loadedProfile, $name, $module); } catch (Exception $e) { $response = $this->_registry->getResponse(); $response->setException($e); return; } // do the creation if ($request->isPretend()) { $response->appendContent('Would create a Form at ' . $formResources->getContext()->getPath()); } else { $response->appendContent('Creating a Form at ' . $formResources->getContext()->getPath()); $formResources->create(); $this->_storeProfile(); $fileName = $formResources->getContext()->getPath(); $formContext = new ZendT_Tool_Context_FormFile(); $descTable = $this->_dbAdapter->describeTable($originalName); $formContext->setProperties($descTable); file_put_contents($fileName, "<?php \n" . $formContext->getContents() . "\n?>"); } $this->_print(' Finalizado Models '); }
/** * getContents() will be called at creation time. This could be * as simple as you see below or could use Zend_Tool_CodeGenerator * for this task. * * @return string */ public function getContents() { $modelName = ucfirst($this->_modelName); $moduleName = ucfirst($this->_moduleName); $adapter = strtolower($this->_adapter); $tableName = strtoupper($this->_tableName); $referenceMap = $this->_referenceMap; $dependentTables = $this->_dependentTables; if ($moduleName == '') { $moduleName = 'Application'; } $strDependentTables = ''; foreach ($dependentTables as $table) { $className = $table['OBJECT_NAME']; /** * @todo pensar em uma forma de localizar o nome do módulo */ if ($className == '') { $className = $moduleName . "_Model_" . ZendT_Tool_ModelTProvider::convertTableNameToClassName($table['TABLE_NAME']) . "_Crud_Table"; $strDependentTables .= ",\n '" . $className . "'"; } } $strDependentTables = substr($strDependentTables, 1); $strReferenceMap = ''; foreach ($referenceMap as $reference) { $className = $reference['OBJECT_NAME_PK']; /** * @todo pensar em uma forma de localizar o nome do módulo */ if ($className == '') { $className = $moduleName . "_Model_" . ZendT_Tool_ModelTProvider::convertTableNameToClassName($reference['TABLE_NAME_PK']) . "_Crud_Table"; $strReferenceMap .= ",\n '" . $className . "' = array(\n 'columns' => '" . $reference['COLUMN_NAME'] . "',\n 'refTableClass' => '" . $className . "',\n 'refColumns' => '" . $reference['COLUMN_NAME_PK'] . "'\n )"; } } $strReferenceMap = substr($strReferenceMap, 1); $contents = <<<EOS class {$moduleName}_Model_{$modelName}_Crud_Table extends Zend_Db_Table_Abstract { protected \$_name = '{$tableName}'; protected \$_schema = '{$adapter}'; protected \$_adapter = 'db.{$adapter}'; protected \$_dependentTables = array({$strDependentTables}); protected \$_referenceMap = array({$strReferenceMap}); } EOS; return $contents; }