www.gusucode.com > Catfish(鲶鱼) CMS系统 PHP版 v4.8.21源码程序 > Catfishcms_v4.8.21/vendor/topthink/think-migration/src/command/AbstractCommand.php
<?php // +---------------------------------------------------------------------- // | TopThink [ WE CAN DO IT JUST THINK IT ] // +---------------------------------------------------------------------- // | Copyright (c) 2015 http://www.topthink.com All rights reserved. // +---------------------------------------------------------------------- // | Author: zhangyajun <448901948@qq.com> // +---------------------------------------------------------------------- namespace think\migration\command; use InvalidArgumentException; use think\console\Command; use think\console\Input; use think\console\input\Option as InputOption; use think\console\Output; use Phinx\Config; use Phinx\Migration\Manager; use Phinx\Db\Adapter\AdapterInterface; abstract class AbstractCommand extends Command { /** * The location of the default migration template. */ const DEFAULT_MIGRATION_TEMPLATE = '/../../phinx/src/Phinx/Migration/Migration.template.php.dist'; /** * The location of the default seed template. */ const DEFAULT_SEED_TEMPLATE = '/../../phinx/src/Phinx/Seed/Seed.template.php.dist'; /** * @var Config */ protected $config; /** * @var AdapterInterface */ protected $adapter; /** * @var Manager */ protected $manager; /** * {@inheritdoc} */ protected function configure() { $this->addOption('--configuration', '-c', InputOption::VALUE_REQUIRED, 'The configuration file to load'); } /** * Bootstrap Phinx. * * @param Input $input * @param Output $output * @return void */ public function bootstrap(Input $input, Output $output) { if (!$this->getConfig()) { $this->loadConfig($input, $output); } $this->loadManager($output); // report the paths $output->writeln('<info>using migration path</info> ' . $this->getConfig()->getMigrationPath()); try { $output->writeln('<info>using seed path</info> ' . $this->getConfig()->getSeedPath()); } catch (\UnexpectedValueException $e) { // do nothing as seeds are optional } } /** * Sets the config. * * @param Config $config * @return AbstractCommand */ public function setConfig(Config $config) { $this->config = $config; return $this; } /** * Gets the config. * * @return Config */ public function getConfig() { return $this->config; } /** * Sets the database adapter. * * @param AdapterInterface $adapter * @return AbstractCommand */ public function setAdapter(AdapterInterface $adapter) { $this->adapter = $adapter; return $this; } /** * Gets the database adapter. * * @return AdapterInterface */ public function getAdapter() { return $this->adapter; } /** * Sets the migration manager. * * @param Manager $manager * @return AbstractCommand */ public function setManager(Manager $manager) { $this->manager = $manager; return $this; } /** * Gets the migration manager. * * @return Manager */ public function getManager() { return $this->manager; } /** * Parse the config file and load it into the config object * * @param Input $input * @param Output $output * @throws \InvalidArgumentException * @return void */ protected function loadConfig(Input $input, Output $output) { $configFile = $input->getOption('configuration'); if (null === $configFile || false === $configFile) { $configFile = APP_PATH . 'database' . EXT; } if (!is_file($configFile)) { throw new InvalidArgumentException(); } $output->writeln('<info>using config file</info> .' . str_replace(getcwd(), '', realpath($configFile))); $config = new Config($configFile); $this->setConfig($config); } /** * Load the migrations manager and inject the config * * @param Output $output * @return void */ protected function loadManager(Output $output) { if (null === $this->getManager()) { $manager = new Manager($this->getConfig(), $output); $this->setManager($manager); } } /** * Verify that the migration directory exists and is writable. * * @param $path */ protected function verifyMigrationDirectory($path) { if (!is_dir($path)) { throw new InvalidArgumentException(sprintf( 'Migration directory "%s" does not exist', $path )); } if (!is_writable($path)) { throw new InvalidArgumentException(sprintf( 'Migration directory "%s" is not writable', $path )); } } /** * Verify that the seed directory exists and is writable. * * @param $path */ protected function verifySeedDirectory($path) { if (!is_dir($path)) { throw new InvalidArgumentException(sprintf( 'Seed directory "%s" does not exist', $path )); } if (!is_writable($path)) { throw new InvalidArgumentException(sprintf( 'Seed directory "%s" is not writable', $path )); } } /** * Returns the migration template filename. * * @return string */ protected function getMigrationTemplateFilename() { return __DIR__ . self::DEFAULT_MIGRATION_TEMPLATE; } /** * Returns the seed template filename. * * @return string */ protected function getSeedTemplateFilename() { return __DIR__ . self::DEFAULT_SEED_TEMPLATE; } }