diff --git a/Command/AbstractCommand.php b/Command/AbstractCommand.php
index 3df2948..63f97d7 100644
--- a/Command/AbstractCommand.php
+++ b/Command/AbstractCommand.php
@@ -45,8 +45,6 @@ abstract class AbstractCommand extends ContainerAwareCommand
*/
protected $output;
- protected $tempSchemas = [];
-
use FormattingHelpers;
/**
@@ -96,17 +94,15 @@ abstract class AbstractCommand extends ContainerAwareCommand
$finalSchemas = $this->getFinalSchemas($kernel, $this->bundle);
foreach ($finalSchemas as $schema) {
- /** @var Bundle $bundle */
+ /** @var null|Bundle $bundle */
list($bundle, $finalSchema) = $schema;
- $tempSchema = $bundle->getName().'-'.$finalSchema->getBaseName();
- $this->tempSchemas[$tempSchema] = array(
- 'bundle' => $bundle->getName(),
- 'basename' => $finalSchema->getBaseName(),
- 'path' => $finalSchema->getPathname(),
- );
+ if ($bundle) {
+ $file = $cacheDir.DIRECTORY_SEPARATOR.'bundle-'.$bundle->getName().'-'.$finalSchema->getBaseName();
+ } else {
+ $file = $cacheDir.DIRECTORY_SEPARATOR.'app-'.$finalSchema->getBaseName();
+ }
- $file = $cacheDir.DIRECTORY_SEPARATOR.$tempSchema;
$filesystem->copy((string) $finalSchema, $file, true);
// the package needs to be set absolute
@@ -119,12 +115,18 @@ abstract class AbstractCommand extends ContainerAwareCommand
// This is used to override the package resulting from namespace conversion.
$database['package'] = $database['package'];
} elseif (isset($database['namespace'])) {
-
- $database['package'] = $this->getPackageFromBundle($bundle, (string)$database['namespace']);
+ if ($bundle) {
+ $database['package'] = $this->getPackageFromBundle($bundle, (string)$database['namespace']);
+ } else {
+ $database['package'] = $this->getPackageFromApp((string)$database['namespace']);
+ }
} else {
throw new \RuntimeException(
- sprintf('%s : Please define a `package` attribute or a `namespace` attribute for schema `%s`',
- $bundle->getName(), $finalSchema->getBaseName())
+ sprintf(
+ '%s : Please define a `package` attribute or a `namespace` attribute for schema `%s`',
+ $bundle ? $bundle->getName() : 'App',
+ $finalSchema->getBaseName()
+ )
);
}
@@ -134,7 +136,6 @@ abstract class AbstractCommand extends ContainerAwareCommand
if (!in_array((string) $database['name'], $connections)) {
// we skip this schema because the connection name doesn't
// match the input values
- unset($this->tempSchemas[$tempSchema]);
$filesystem->remove($file);
$this->output->writeln(sprintf(
'Skipped schema %s due to database name missmatch (%s not in [%s]).',
@@ -150,7 +151,11 @@ abstract class AbstractCommand extends ContainerAwareCommand
if (isset($table['package'])) {
$table['package'] = $table['package'];
} elseif (isset($table['namespace'])) {
- $table['package'] = $this->getPackageFromBundle($bundle, (string)$table['namespace']);
+ if ($bundle) {
+ $table['package'] = $this->getPackageFromBundle($bundle, (string)$table['namespace']);
+ } else {
+ $table['package'] = $this->getPackageFromApp((string)$table['namespace']);
+ }
} else {
$table['package'] = $database['package'];
}
@@ -175,7 +180,7 @@ abstract class AbstractCommand extends ContainerAwareCommand
return $this->getSchemaLocator()->locateFromBundle($bundle);
}
- return $this->getSchemaLocator()->locateFromBundles($kernel->getBundles());
+ return $this->getSchemaLocator()->locateFromBundlesAndConfiguration($kernel->getBundles());
}
/**
@@ -304,6 +309,24 @@ abstract class AbstractCommand extends ContainerAwareCommand
return $this->getContainer()->get('propel.schema_locator');
}
+ /**
+ * @param string $namespace
+ *
+ * @return string
+ */
+ protected function getPackageFromApp($namespace)
+ {
+ if ('\\' === $namespace[0]) {
+ $namespace = substr($namespace, 1);
+ }
+
+ if (0 === stripos($namespace, 'App\\')) {
+ $namespace = substr($namespace, 4);
+ }
+
+ return 'src.'.str_replace('\\', '.', $namespace);
+ }
+
/**
* @param Bundle $bundle
* @param string $namespace
diff --git a/Resources/config/propel.xml b/Resources/config/propel.xml
index 478b07c..383671b 100644
--- a/Resources/config/propel.xml
+++ b/Resources/config/propel.xml
@@ -21,6 +21,7 @@
+ %propel.configuration%
diff --git a/Service/SchemaLocator.php b/Service/SchemaLocator.php
index 10de414..d25ff0c 100644
--- a/Service/SchemaLocator.php
+++ b/Service/SchemaLocator.php
@@ -17,10 +17,25 @@ use Symfony\Component\HttpKernel\Bundle\BundleInterface;
class SchemaLocator
{
protected $fileLocator;
+ protected $configuration;
- public function __construct(FileLocatorInterface $fileLocator)
+ public function __construct(FileLocatorInterface $fileLocator, array $configuration)
{
$this->fileLocator = $fileLocator;
+ $this->configuration = $configuration;
+ }
+
+ public function locateFromBundlesAndConfiguration(array $bundles)
+ {
+ $schemas = $this->locateFromBundles($bundles);
+
+ $path = $this->configuration['paths']['schemaDir'].'/schema.xml';
+ if (file_exists($path)) {
+ $schema = new \SplFileInfo($path);
+ $schemas[(string) $schema] = array(null, $schema);
+ }
+
+ return $schemas;
}
public function locateFromBundles(array $bundles)