public function testRecordActionTemplate() { $actionTemplate = new RecordActionTemplate(); $runner = new ActionRunner(); $actionTemplate->register($runner, 'RecordActionTemplate', array('namespace' => 'test2', 'model' => 'test2Model', 'types' => array(['prefix' => 'Create'], ['prefix' => 'Update'], ['prefix' => 'Delete'], ['prefix' => 'BulkDelete']))); $className = 'test2\\Action\\Updatetest2Model'; $this->assertCount(4, $runner->getPretreatments()); $this->assertNotNull($pretreatment = $runner->getActionPretreatment($className)); $generatedAction = $actionTemplate->generate($className, $pretreatment); $this->assertRequireGeneratedAction($className, $generatedAction); }
protected function getModelActionClass(BaseModel $record, $prefix) { $recordClass = get_class($record); $refclass = new ReflectionClass($record); $actionClassNamespace = str_replace('\\Model', '\\Action', $refclass->getNamespaceName()); $actionClassShortName = ucfirst($prefix) . $refclass->getShortName(); $actionClass = $actionClassNamespace . '\\' . $actionClassShortName; if (!class_exists($actionClass, true)) { kernel()->actionRunner->loadActionClass($actionClass); } // Generate the default action and try to require it. if (!class_exists($actionClass)) { $baseAction = $prefix . 'RecordAction'; $template = new RecordActionTemplate(); if ($generatedAction = $template->generate($actionClass, ['extends' => '\\ActionKit\\RecordAction\\' . $baseAction, 'properties' => ['recordClass' => $recordClass]])) { $generatedAction->load(); } } if (!class_exists($actionClass)) { throw new Exception("Can not load action class '{$actionClass}' from model " . get_class($record)); } return $actionClass; }
/** * Create CRUD class * * @param string $recordClass * @param string $type * * @return string class code */ public static function createCRUDClass($recordClass, $type) { list($modelNs, $modelName) = explode('\\Model\\', $recordClass); $modelNs = ltrim($modelNs, '\\'); $actionFullClass = $modelNs . '\\Action\\' . $type . $modelName; $recordClass = $modelNs . '\\Model\\' . $modelName; $baseAction = $type . 'RecordAction'; $template = new RecordActionTemplate(); $generatedAction = $template->generate($actionFullClass, ['extends' => '\\ActionKit\\RecordAction\\' . $baseAction, 'properties' => ['recordClass' => $recordClass]]); if (!class_exists($actionFullClass, true)) { $generatedAction->load(); } return $actionFullClass; }