1
0
mirror of https://github.com/flarum/core.git synced 2025-08-01 22:20:21 +02:00

Pass container into apps, adapt path matching

This commit is contained in:
Franz Liedke
2018-08-23 22:17:37 +02:00
parent 869ec54bd0
commit 2d4dc02ca1
3 changed files with 32 additions and 23 deletions

View File

@@ -44,6 +44,7 @@
"league/flysystem": "^1.0.11", "league/flysystem": "^1.0.11",
"league/oauth2-client": "~1.0", "league/oauth2-client": "~1.0",
"matthiasmullie/minify": "^1.3", "matthiasmullie/minify": "^1.3",
"middlewares/base-path": "^1.1",
"middlewares/base-path-router": "^0.2.1", "middlewares/base-path-router": "^0.2.1",
"middlewares/request-handler": "^1.2", "middlewares/request-handler": "^1.2",
"monolog/monolog": "^1.16.0", "monolog/monolog": "^1.16.0",

View File

@@ -18,6 +18,8 @@ use Flarum\Foundation\Console\CacheClearCommand;
use Flarum\Foundation\Console\InfoCommand; use Flarum\Foundation\Console\InfoCommand;
use Flarum\Http\Middleware\DispatchRoute; use Flarum\Http\Middleware\DispatchRoute;
use Flarum\Settings\SettingsRepositoryInterface; use Flarum\Settings\SettingsRepositoryInterface;
use Illuminate\Contracts\Container\Container;
use Middlewares\BasePath;
use Middlewares\BasePathRouter; use Middlewares\BasePathRouter;
use Middlewares\RequestHandler; use Middlewares\RequestHandler;
use Zend\Stratigility\MiddlewarePipe; use Zend\Stratigility\MiddlewarePipe;
@@ -25,18 +27,18 @@ use Zend\Stratigility\MiddlewarePipe;
class InstalledApp implements AppInterface class InstalledApp implements AppInterface
{ {
/** /**
* @var Application * @var Container
*/ */
protected $laravel; protected $container;
/** /**
* @var array * @var array
*/ */
protected $config; protected $config;
public function __construct(Application $laravel, array $config) public function __construct(Container $container, array $config)
{ {
$this->laravel = $laravel; $this->container = $container;
$this->config = $config; $this->config = $config;
} }
@@ -53,14 +55,15 @@ class InstalledApp implements AppInterface
$pipe = new MiddlewarePipe; $pipe = new MiddlewarePipe;
$pipe->pipe(new BasePath($this->basePath()));
$pipe->pipe( $pipe->pipe(
new BasePathRouter([ new BasePathRouter([
$this->subPath('api') => 'flarum.api.middleware', $this->subPath('api') => 'flarum.api.middleware',
$this->subPath('admin') => 'flarum.admin.middleware', $this->subPath('admin') => 'flarum.admin.middleware',
$this->subPath('') => 'flarum.forum.middleware', '/' => 'flarum.forum.middleware',
]) ])
); );
$pipe->pipe(new RequestHandler($this->laravel)); $pipe->pipe(new RequestHandler($this->container));
return $pipe; return $pipe;
} }
@@ -72,7 +75,7 @@ class InstalledApp implements AppInterface
private function needsUpdate(): bool private function needsUpdate(): bool
{ {
$settings = $this->laravel->make(SettingsRepositoryInterface::class); $settings = $this->container->make(SettingsRepositoryInterface::class);
$version = $settings->get('version'); $version = $settings->get('version');
return $version !== Application::VERSION; return $version !== Application::VERSION;
@@ -85,15 +88,20 @@ class InstalledApp implements AppInterface
{ {
$pipe = new MiddlewarePipe; $pipe = new MiddlewarePipe;
$pipe->pipe( $pipe->pipe(
new DispatchRoute($this->laravel->make('flarum.update.routes')) new DispatchRoute($this->container->make('flarum.update.routes'))
); );
return $pipe; return $pipe;
} }
private function basePath(): string
{
return parse_url($this->config['url'], PHP_URL_PATH) ?: '/';
}
private function subPath($pathName): string private function subPath($pathName): string
{ {
return parse_url($this->laravel->url($pathName), PHP_URL_PATH) ?: '/'; return '/'.$this->config['paths'][$pathName];
} }
/** /**
@@ -102,11 +110,11 @@ class InstalledApp implements AppInterface
public function getConsoleCommands() public function getConsoleCommands()
{ {
return [ return [
$this->laravel->make(GenerateMigrationCommand::class), $this->container->make(GenerateMigrationCommand::class),
$this->laravel->make(InfoCommand::class, ['config' => $this->config]), $this->container->make(InfoCommand::class, ['config' => $this->config]),
$this->laravel->make(MigrateCommand::class), $this->container->make(MigrateCommand::class),
$this->laravel->make(ResetCommand::class), $this->container->make(ResetCommand::class),
$this->laravel->make(CacheClearCommand::class), $this->container->make(CacheClearCommand::class),
]; ];
} }
} }

View File

@@ -12,23 +12,23 @@
namespace Flarum\Install; namespace Flarum\Install;
use Flarum\Foundation\AppInterface; use Flarum\Foundation\AppInterface;
use Flarum\Foundation\Application;
use Flarum\Http\Middleware\DispatchRoute; use Flarum\Http\Middleware\DispatchRoute;
use Flarum\Http\Middleware\HandleErrorsWithWhoops; use Flarum\Http\Middleware\HandleErrorsWithWhoops;
use Flarum\Http\Middleware\StartSession; use Flarum\Http\Middleware\StartSession;
use Flarum\Install\Console\InstallCommand; use Flarum\Install\Console\InstallCommand;
use Illuminate\Contracts\Container\Container;
use Zend\Stratigility\MiddlewarePipe; use Zend\Stratigility\MiddlewarePipe;
class Installer implements AppInterface class Installer implements AppInterface
{ {
/** /**
* @var Application * @var Container
*/ */
protected $laravel; protected $container;
public function __construct(Application $laravel) public function __construct(Container $container)
{ {
$this->laravel = $laravel; $this->container = $container;
} }
/** /**
@@ -37,10 +37,10 @@ class Installer implements AppInterface
public function getRequestHandler() public function getRequestHandler()
{ {
$pipe = new MiddlewarePipe; $pipe = new MiddlewarePipe;
$pipe->pipe($this->laravel->make(HandleErrorsWithWhoops::class)); $pipe->pipe($this->container->make(HandleErrorsWithWhoops::class));
$pipe->pipe($this->laravel->make(StartSession::class)); $pipe->pipe($this->container->make(StartSession::class));
$pipe->pipe( $pipe->pipe(
new DispatchRoute($this->laravel->make('flarum.install.routes')) new DispatchRoute($this->container->make('flarum.install.routes'))
); );
return $pipe; return $pipe;
@@ -52,7 +52,7 @@ class Installer implements AppInterface
public function getConsoleCommands() public function getConsoleCommands()
{ {
return [ return [
$this->laravel->make(InstallCommand::class), $this->container->make(InstallCommand::class),
]; ];
} }
} }