/var/www/vhosts/ihelp.ro/httpdocs/vendor/cakephp/bake/src/Command
Edit: /var/www/vhosts/ihelp.ro/httpdocs/vendor/cakephp/bake/src/Command/ControllerCommand.php (9433B)
extractCommonProperties($args);
$name = $args->getArgument('name') ?? '';
$name = $this->_getName($name);
if (empty($name)) {
/** @var \Cake\Database\Connection $connection */
$connection = ConnectionManager::get($this->connection);
$scanner = new TableScanner($connection);
$io->out('Possible controllers based on your current database:');
foreach ($scanner->listUnskipped() as $table) {
$io->out('- ' . $this->_camelize($table));
}
return static::CODE_SUCCESS;
}
$controller = $this->_camelize($name);
$this->bake($controller, $args, $io);
return static::CODE_SUCCESS;
}
/**
* Assembles and writes a Controller file
*
* @param string $controllerName Controller name already pluralized and correctly cased.
* @param \Cake\Console\Arguments $args The console arguments
* @param \Cake\Console\ConsoleIo $io The console io
* @return void
*/
public function bake(string $controllerName, Arguments $args, ConsoleIo $io): void
{
$io->quiet(sprintf('Baking controller class for %s...', $controllerName));
$actions = [];
if (!$args->getOption('no-actions') && !$args->getOption('actions')) {
$actions = ['index', 'view', 'add', 'edit', 'delete'];
}
if ($args->getOption('actions')) {
$actions = array_map('trim', explode(',', $args->getOption('actions')));
$actions = array_filter($actions);
}
$helpers = $this->getHelpers($args);
$components = $this->getComponents($args);
$prefix = $this->getPrefix($args);
if ($prefix) {
$prefix = '\\' . str_replace('/', '\\', $prefix);
}
// Controllers default to importing AppController from `App`
$baseNamespace = $namespace = Configure::read('App.namespace');
if ($this->plugin) {
$namespace = $this->_pluginNamespace($this->plugin);
}
// If the plugin has an AppController other plugin controllers
// should inherit from it.
if ($this->plugin && class_exists("{$namespace}\Controller\AppController")) {
$baseNamespace = $namespace;
}
$currentModelName = $controllerName;
$plugin = $this->plugin;
if ($plugin) {
$plugin .= '.';
}
if ($this->getTableLocator()->exists($plugin . $currentModelName)) {
$modelObj = $this->getTableLocator()->get($plugin . $currentModelName);
} else {
$modelObj = $this->getTableLocator()->get($plugin . $currentModelName, [
'connectionName' => $this->connection,
]);
}
$pluralName = $this->_variableName($currentModelName);
$singularName = $this->_singularName($currentModelName);
$singularHumanName = $this->_singularHumanName($controllerName);
$pluralHumanName = $this->_variableName($controllerName);
$defaultModel = sprintf('%s\Model\Table\%sTable', $namespace, $controllerName);
if (!class_exists($defaultModel)) {
$defaultModel = null;
}
$entityClassName = $this->_entityName($modelObj->getAlias());
$data = compact(
'actions',
'components',
'currentModelName',
'defaultModel',
'entityClassName',
'helpers',
'modelObj',
'namespace',
'baseNamespace',
'plugin',
'pluralHumanName',
'pluralName',
'prefix',
'singularHumanName',
'singularName'
);
$data['name'] = $controllerName;
$this->bakeController($controllerName, $data, $args, $io);
$this->bakeTest($controllerName, $args, $io);
}
/**
* Generate the controller code
*
* @param string $controllerName The name of the controller.
* @param array $data The data to turn into code.
* @param \Cake\Console\Arguments $args The console args
* @param \Cake\Console\ConsoleIo $io The console io
* @return void
*/
public function bakeController(string $controllerName, array $data, Arguments $args, ConsoleIo $io): void
{
$data += [
'name' => null,
'namespace' => null,
'prefix' => null,
'actions' => null,
'helpers' => null,
'components' => null,
'plugin' => null,
'pluginPath' => null,
];
$contents = $this->createTemplateRenderer()
->set($data)
->generate('Bake.Controller/controller');
$path = $this->getPath($args);
$filename = $path . $controllerName . 'Controller.php';
$io->createFile($filename, $contents, $this->force);
}
/**
* Assembles and writes a unit test file
*
* @param string $className Controller class name
* @param \Cake\Console\Arguments $args The console arguments
* @param \Cake\Console\ConsoleIo $io The console io
* @return void
*/
public function bakeTest(string $className, Arguments $args, ConsoleIo $io): void
{
if ($args->getOption('no-test')) {
return;
}
$test = new TestCommand();
$testArgs = new Arguments(
['controller', $className],
$args->getOptions(),
['type', 'name']
);
$test->execute($testArgs, $io);
}
/**
* Get the list of components for the controller.
*
* @param \Cake\Console\Arguments $args The console arguments
* @return string[]
*/
public function getComponents(Arguments $args): array
{
$components = [];
if ($args->getOption('components')) {
$components = explode(',', $args->getOption('components'));
$components = array_values(array_filter(array_map('trim', $components)));
}
return $components;
}
/**
* Get the list of helpers for the controller.
*
* @param \Cake\Console\Arguments $args The console arguments
* @return string[]
*/
public function getHelpers(Arguments $args): array
{
$helpers = [];
if ($args->getOption('helpers')) {
$helpers = explode(',', $args->getOption('helpers'));
$helpers = array_values(array_filter(array_map('trim', $helpers)));
}
return $helpers;
}
/**
* Gets the option parser instance and configures it.
*
* @param \Cake\Console\ConsoleOptionParser $parser The console option parser
* @return \Cake\Console\ConsoleOptionParser
*/
public function buildOptionParser(ConsoleOptionParser $parser): ConsoleOptionParser
{
$parser = $this->_setCommonOptions($parser);
$parser->setDescription(
'Bake a controller skeleton.'
)->addArgument('name', [
'help' => 'Name of the controller to bake (without the `Controller` suffix). ' .
'You can use Plugin.name to bake controllers into plugins.',
])->addOption('components', [
'help' => 'The comma separated list of components to use.',
])->addOption('helpers', [
'help' => 'The comma separated list of helpers to use.',
])->addOption('prefix', [
'help' => 'The namespace/routing prefix to use.',
])->addOption('actions', [
'help' => 'The comma separated list of actions to generate. ' .
'You can include custom methods provided by your template set here.',
])->addOption('no-test', [
'boolean' => true,
'help' => 'Do not generate a test skeleton.',
])->addOption('no-actions', [
'boolean' => true,
'help' => 'Do not generate basic CRUD action methods.',
]);
return $parser;
}
}