1
0
Fork 0
mirror of https://github.com/archtechx/tenancy.git synced 2025-12-12 14:34:04 +00:00
This commit is contained in:
Samuel Štancl 2019-09-07 16:40:45 +02:00
parent d3712dfacc
commit 0ac7fb74d6
4 changed files with 20 additions and 22 deletions

View file

@ -55,7 +55,7 @@ return [
'mysql' => 'Stancl\Tenancy\TenantDatabaseManagers\MySQLDatabaseManager', 'mysql' => 'Stancl\Tenancy\TenantDatabaseManagers\MySQLDatabaseManager',
'pgsql' => 'Stancl\Tenancy\TenantDatabaseManagers\PostgreSQLDatabaseManager', 'pgsql' => 'Stancl\Tenancy\TenantDatabaseManagers\PostgreSQLDatabaseManager',
], ],
'tenancy_bootstrappers' => [ 'bootstrappers' => [
'database' => 'Stancl\Tenancy\TenancyBootstrappers\DatabaseTenancyBootstrapper', 'database' => 'Stancl\Tenancy\TenancyBootstrappers\DatabaseTenancyBootstrapper',
'cache' => 'Stancl\Tenancy\TenancyBootstrappers\CacheTenancyBootstrapper', 'cache' => 'Stancl\Tenancy\TenancyBootstrappers\CacheTenancyBootstrapper',
'filesystem' => 'Stancl\Tenancy\TenancyBootstrappers\FilesystemTenancyBootstrapper', 'filesystem' => 'Stancl\Tenancy\TenancyBootstrappers\FilesystemTenancyBootstrapper',

View file

@ -125,15 +125,17 @@ class TenancyServiceProvider extends ServiceProvider
$this->mergeConfigFrom(__DIR__ . '/../assets/config.php', 'tenancy'); $this->mergeConfigFrom(__DIR__ . '/../assets/config.php', 'tenancy');
$this->app->bind(StorageDriver::class, $this->app['config']['tenancy.storage_driver']); $this->app->bind(StorageDriver::class, $this->app['config']['tenancy.storage_driver']);
$this->app->bind(ServerConfigManager::class, $this->app['config']['tenancy.server.manager']);
$this->app->singleton(DatabaseManager::class); $this->app->singleton(DatabaseManager::class);
$this->app->singleton(TenantManager::class, function ($app) { $this->app->singleton(TenantManager::class, function ($app) {
return new TenantManager( return new TenantManager(
$app, $app[StorageDriver::class], $app[DatabaseManager::class], $app[$app['config']['tenancy.unique_id_generator']] $app, $app[StorageDriver::class], $app[DatabaseManager::class], $app[$app['config']['tenancy.unique_id_generator']] // todo
); );
}); });
// todo foreach bootstrappers, singleton // todo foreach bootstrappers, singleton
foreach ($this->app['config']['tenancy.bootstrappers'] as $bootstrapper) {
$this->app->singleton($bootstrapper); // todo key?
}
$this->app->singleton(Migrate::class, function ($app) { $this->app->singleton(Migrate::class, function ($app) {
return new Migrate($app['migrator'], $app[DatabaseManager::class]); return new Migrate($app['migrator'], $app[DatabaseManager::class]);

View file

@ -50,7 +50,7 @@ class Tenant implements ArrayAccess, CurrentTenant
public static function new(): self public static function new(): self
{ {
return app(static::class)->withData([ return app(static::class)->withData([
'id' => static::generateId(), 'id' => static::generateId(), // todo
]); ]);
} }

View file

@ -7,7 +7,6 @@ namespace Stancl\Tenancy;
use Illuminate\Foundation\Application; use Illuminate\Foundation\Application;
// todo rethink integration events // todo rethink integration events
// todo events
/** /**
* @internal Class is subject to breaking changes in minor and patch versions. * @internal Class is subject to breaking changes in minor and patch versions.
@ -27,6 +26,10 @@ class TenantManagerv2
/** @var Contracts\StorageDriver */ /** @var Contracts\StorageDriver */
private $storage; private $storage;
// todo event "listeners" instead of "callbacks"
/** @var callable[][] */
public $callbacks = [];
public function __construct(Application $app, Contracts\StorageDriver $storage) public function __construct(Application $app, Contracts\StorageDriver $storage)
{ {
$this->app = $app; $this->app = $app;
@ -63,6 +66,8 @@ class TenantManagerv2
$this->app[$bootstrapper]->start($tenant); $this->app[$bootstrapper]->start($tenant);
} }
$this->event('bootstrapped');
return $this; return $this;
} }
@ -74,6 +79,8 @@ class TenantManagerv2
$this->app[$bootstrapper]->end(); $this->app[$bootstrapper]->end();
} }
$this->event('ended');
return $this; return $this;
} }
@ -92,28 +99,17 @@ class TenantManagerv2
*/ */
public function tenancyBootstrappers($except = []): array public function tenancyBootstrappers($except = []): array
{ {
return array_key_diff(config('tenancy.tenancy_bootstrappers'), $except); return array_key_diff(config('tenancy.bootstrappers'), $except);
} }
// todo event "listeners" instead of "callbacks"
/** /**
* TODO * Add event callback.
* *
* @param string $name * @param string $name
* @param callable $callback * @param callable $callback
* @return self|string[] * @return self
*/ */
public function event(string $name, callable $callback = null) public function eventCallback(string $name, callable $callback): self
{
if ($callback) {
return $this->addEventCallback($name, $callback);
}
return $this->executeEventCallbacks($name);
}
public function addEventCallback(string $name, callable $callback): self
{ {
isset($this->eventCallbacks[$name]) || $this->eventCallbacks[$name] = []; isset($this->eventCallbacks[$name]) || $this->eventCallbacks[$name] = [];
$this->eventCallbacks[$name][] = $callback; $this->eventCallbacks[$name][] = $callback;
@ -122,12 +118,12 @@ class TenantManagerv2
} }
/** /**
* TODO * Execute event callbacks.
* *
* @param string $name * @param string $name
* @return string[] * @return string[]
*/ */
public function executeEventCallbacks(string $name): array protected function event(string $name): array
{ {
return array_reduce($this->eventCalbacks[$name] ?? [], function ($prevented, $callback) { return array_reduce($this->eventCalbacks[$name] ?? [], function ($prevented, $callback) {
$prevented = array_merge($prevented, $callback($this) ?? []); $prevented = array_merge($prevented, $callback($this) ?? []);