2017-04-06 01:09:27 +00:00
|
|
|
<?php
|
2019-08-07 04:33:55 +00:00
|
|
|
/**
|
|
|
|
* PHP-DI Services
|
|
|
|
*/
|
|
|
|
|
2019-09-29 07:50:24 +00:00
|
|
|
use App;
|
2019-09-12 05:31:01 +00:00
|
|
|
use App\Settings;
|
2019-08-07 04:33:55 +00:00
|
|
|
use Doctrine\ORM\EntityManager;
|
|
|
|
use Psr\Container\ContainerInterface;
|
|
|
|
|
|
|
|
return [
|
|
|
|
|
|
|
|
/*
|
|
|
|
* Slim Component Overrides
|
|
|
|
*/
|
|
|
|
|
|
|
|
// URL Router helper
|
2019-09-29 07:50:24 +00:00
|
|
|
App\Http\Router::class => function (
|
2019-08-07 04:33:55 +00:00
|
|
|
Settings $settings,
|
|
|
|
\Slim\App $app,
|
2019-09-29 07:50:24 +00:00
|
|
|
App\Entity\Repository\SettingsRepository $settingsRepo
|
2019-08-07 04:33:55 +00:00
|
|
|
) {
|
|
|
|
$route_parser = $app->getRouteCollector()->getRouteParser();
|
2019-09-29 07:50:24 +00:00
|
|
|
return new App\Http\Router($settings, $route_parser, $settingsRepo);
|
2019-08-07 04:33:55 +00:00
|
|
|
},
|
|
|
|
Azura\Http\RouterInterface::class => DI\Get(App\Http\Router::class),
|
|
|
|
|
|
|
|
// Error Handler
|
|
|
|
App\Http\ErrorHandler::class => DI\autowire(),
|
|
|
|
Slim\Interfaces\ErrorHandlerInterface::class => DI\Get(App\Http\ErrorHandler::class),
|
|
|
|
|
|
|
|
/*
|
|
|
|
* Doctrine Database
|
|
|
|
*/
|
|
|
|
|
2019-09-29 07:50:24 +00:00
|
|
|
EntityManager::class => DI\decorate(function (EntityManager $em, ContainerInterface $di) {
|
2019-04-12 04:46:27 +00:00
|
|
|
$event_manager = $em->getEventManager();
|
2019-08-14 23:50:53 +00:00
|
|
|
$event_manager->addEventSubscriber($di->get(App\Doctrine\Event\StationRequiresRestart::class));
|
|
|
|
$event_manager->addEventSubscriber($di->get(App\Doctrine\Event\AuditLog::class));
|
|
|
|
|
2019-04-12 04:46:27 +00:00
|
|
|
return $em;
|
2019-08-07 04:33:55 +00:00
|
|
|
}),
|
|
|
|
|
2019-08-14 23:50:53 +00:00
|
|
|
App\Doctrine\Event\AuditLog::class => DI\autowire(),
|
|
|
|
App\Doctrine\Event\StationRequiresRestart::class => DI\autowire(),
|
|
|
|
|
2019-09-29 07:50:24 +00:00
|
|
|
// Repositories
|
|
|
|
App\Entity\Repository\ApiKeyRepository::class => DI\autowire(),
|
|
|
|
App\Entity\Repository\ListenerRepository::class => DI\autowire(),
|
|
|
|
App\Entity\Repository\RoleRepository::class => DI\autowire(),
|
|
|
|
App\Entity\Repository\RolePermissionRepository::class => DI\autowire(),
|
|
|
|
App\Entity\Repository\SettingsRepository::class => DI\autowire(),
|
|
|
|
App\Entity\Repository\SongHistoryRepository::class => DI\autowire(),
|
|
|
|
App\Entity\Repository\SongRepository::class => DI\autowire(),
|
|
|
|
App\Entity\Repository\StationMediaRepository::class => DI\autowire(),
|
|
|
|
App\Entity\Repository\StationMountRepository::class => DI\autowire(),
|
2019-11-06 21:19:32 +00:00
|
|
|
App\Entity\Repository\StationPlaylistScheduleRepository::class => DI\autowire(),
|
2019-09-29 07:50:24 +00:00
|
|
|
App\Entity\Repository\StationPlaylistMediaRepository::class => DI\autowire(),
|
|
|
|
App\Entity\Repository\StationRepository::class => DI\autowire(),
|
|
|
|
App\Entity\Repository\StationRequestRepository::class => DI\autowire(),
|
|
|
|
App\Entity\Repository\StationStreamerRepository::class => DI\autowire(),
|
|
|
|
App\Entity\Repository\UserRepository::class => DI\autowire(),
|
|
|
|
|
2019-08-07 04:33:55 +00:00
|
|
|
/*
|
|
|
|
* View
|
|
|
|
*/
|
|
|
|
|
2019-09-29 07:50:24 +00:00
|
|
|
Azura\View::class => DI\decorate(function (Azura\View $view, ContainerInterface $di) {
|
2018-09-22 11:52:43 +00:00
|
|
|
$view->registerFunction('mailto', function ($address, $link_text = null) {
|
|
|
|
$address = substr(chunk_split(bin2hex(" $address"), 2, ";&#x"), 3, -3);
|
|
|
|
$link_text = $link_text ?? $address;
|
|
|
|
return '<a href="mailto:' . $address . '">' . $link_text . '</a>';
|
|
|
|
});
|
|
|
|
$view->registerFunction('pluralize', function ($word, $num = 0) {
|
|
|
|
if ((int)$num === 1) {
|
|
|
|
return $word;
|
|
|
|
}
|
2019-08-07 04:33:55 +00:00
|
|
|
return Doctrine\Common\Inflector\Inflector::pluralize($word);
|
2018-09-22 11:52:43 +00:00
|
|
|
});
|
|
|
|
$view->registerFunction('truncate', function ($text, $length = 80) {
|
2019-08-07 04:33:55 +00:00
|
|
|
return App\Utilities::truncateText($text, $length);
|
2018-09-22 11:52:43 +00:00
|
|
|
});
|
2019-09-29 07:50:24 +00:00
|
|
|
$view->registerFunction('truncateUrl', function ($url) {
|
2019-08-07 04:33:55 +00:00
|
|
|
return App\Utilities::truncateUrl($url);
|
2018-11-26 08:16:55 +00:00
|
|
|
});
|
2019-09-29 07:50:24 +00:00
|
|
|
$view->registerFunction('link', function ($url, $external = true, $truncate = true) {
|
2019-05-10 05:44:47 +00:00
|
|
|
$url = htmlspecialchars($url, \ENT_QUOTES, 'UTF-8');
|
|
|
|
|
2019-09-29 07:50:24 +00:00
|
|
|
$a = ['href="' . $url . '"'];
|
2019-05-10 05:44:47 +00:00
|
|
|
if ($external) {
|
|
|
|
$a[] = 'target="_blank"';
|
|
|
|
}
|
|
|
|
|
2019-08-07 04:33:55 +00:00
|
|
|
$a_body = ($truncate) ? App\Utilities::truncateUrl($url) : $url;
|
2019-09-29 07:50:24 +00:00
|
|
|
return '<a ' . implode(' ', $a) . '>' . $a_body . '</a>';
|
2019-05-10 05:44:47 +00:00
|
|
|
});
|
2018-09-22 11:52:43 +00:00
|
|
|
|
|
|
|
$view->addData([
|
2019-08-07 04:33:55 +00:00
|
|
|
'assets' => $di->get(Azura\Assets::class),
|
|
|
|
'auth' => $di->get(App\Auth::class),
|
|
|
|
'acl' => $di->get(App\Acl::class),
|
|
|
|
'customization' => $di->get(App\Customization::class),
|
|
|
|
'version' => $di->get(App\Version::class),
|
2018-09-22 11:52:43 +00:00
|
|
|
]);
|
2017-04-06 01:09:27 +00:00
|
|
|
return $view;
|
2019-08-07 04:33:55 +00:00
|
|
|
}),
|
2017-04-06 01:09:27 +00:00
|
|
|
|
2019-08-07 04:33:55 +00:00
|
|
|
/*
|
|
|
|
* Event Dispatcher
|
|
|
|
*/
|
2018-07-03 22:51:05 +00:00
|
|
|
|
2019-09-29 07:50:24 +00:00
|
|
|
Azura\EventDispatcher::class => DI\decorate(function (Azura\EventDispatcher $dispatcher, ContainerInterface $di) {
|
2019-08-07 04:33:55 +00:00
|
|
|
if ($di->has(App\Plugins::class)) {
|
|
|
|
/** @var App\Plugins $plugins */
|
|
|
|
$plugins = $di->get(App\Plugins::class);
|
2018-09-21 12:04:05 +00:00
|
|
|
|
2018-11-12 16:59:15 +00:00
|
|
|
// Register plugin-provided events.
|
|
|
|
$plugins->registerEvents($dispatcher);
|
|
|
|
}
|
2018-09-21 12:04:05 +00:00
|
|
|
|
|
|
|
return $dispatcher;
|
2019-08-07 04:33:55 +00:00
|
|
|
}),
|
|
|
|
|
|
|
|
/*
|
|
|
|
* AzuraCast-specific dependencies
|
|
|
|
*/
|
|
|
|
|
|
|
|
App\Acl::class => DI\autowire(),
|
|
|
|
App\Auth::class => DI\autowire(),
|
|
|
|
App\ApiUtilities::class => DI\autowire(),
|
|
|
|
App\Customization::class => DI\autowire(),
|
|
|
|
App\Version::class => DI\autowire(),
|
2019-08-10 07:45:17 +00:00
|
|
|
App\Service\AzuraCastCentral::class => DI\autowire(),
|
2020-01-22 10:48:02 +00:00
|
|
|
App\Service\IpGeolocation::class => DI\autowire(),
|
2019-08-07 04:33:55 +00:00
|
|
|
App\Service\NChan::class => DI\autowire(),
|
2020-01-05 21:29:56 +00:00
|
|
|
App\Service\Sentry::class => DI\autowire(),
|
2020-01-08 19:24:33 +00:00
|
|
|
App\Service\SftpGo::class => DI\autowire(),
|
2019-08-07 04:33:55 +00:00
|
|
|
App\Validator\Constraints\StationPortCheckerValidator::class => DI\autowire(),
|
|
|
|
|
|
|
|
// Message queue manager class
|
2019-09-29 07:50:24 +00:00
|
|
|
App\MessageQueue::class => function (
|
2019-08-18 01:33:44 +00:00
|
|
|
\Redis $redis,
|
2019-08-07 04:33:55 +00:00
|
|
|
ContainerInterface $di,
|
2019-11-01 02:52:09 +00:00
|
|
|
Monolog\Logger $logger,
|
|
|
|
EntityManager $em
|
2019-08-07 04:33:55 +00:00
|
|
|
) {
|
2018-12-30 10:18:48 +00:00
|
|
|
// Build QueueFactory
|
2019-08-07 04:33:55 +00:00
|
|
|
$driver = new Bernard\Driver\PhpRedis\Driver($redis);
|
2018-12-30 10:18:48 +00:00
|
|
|
|
2019-08-07 04:33:55 +00:00
|
|
|
$normalizer = new Normalt\Normalizer\AggregateNormalizer([
|
|
|
|
new Bernard\Normalizer\EnvelopeNormalizer,
|
2019-09-29 07:50:24 +00:00
|
|
|
new Symfony\Component\Serializer\Normalizer\PropertyNormalizer,
|
2019-02-28 21:26:18 +00:00
|
|
|
]);
|
|
|
|
|
2019-08-07 04:33:55 +00:00
|
|
|
$serializer = new Bernard\Serializer($normalizer);
|
2019-02-28 21:26:18 +00:00
|
|
|
|
2019-08-07 04:33:55 +00:00
|
|
|
$queue_factory = new Bernard\QueueFactory\PersistentFactory($driver, $serializer);
|
2018-12-30 10:18:48 +00:00
|
|
|
|
|
|
|
// Event dispatcher
|
2019-08-07 04:33:55 +00:00
|
|
|
$dispatcher = new Symfony\Component\EventDispatcher\EventDispatcher;
|
2018-12-30 10:18:48 +00:00
|
|
|
|
|
|
|
// Build Producer
|
2019-08-07 04:33:55 +00:00
|
|
|
$producer = new Bernard\Producer($queue_factory, $dispatcher);
|
2018-12-30 10:18:48 +00:00
|
|
|
|
|
|
|
// Build Consumer
|
2019-08-07 04:33:55 +00:00
|
|
|
$receivers = require __DIR__ . '/messagequeue.php';
|
|
|
|
$router = new Bernard\Router\ReceiverMapRouter($receivers, new Bernard\Router\ContainerReceiverResolver($di));
|
2018-12-30 10:18:48 +00:00
|
|
|
|
|
|
|
$consumer = new Bernard\Consumer($router, $dispatcher);
|
|
|
|
|
2019-08-07 04:33:55 +00:00
|
|
|
$mq = new App\MessageQueue(
|
2018-12-30 10:18:48 +00:00
|
|
|
$queue_factory,
|
|
|
|
$producer,
|
2019-02-27 19:18:12 +00:00
|
|
|
$consumer,
|
2019-11-01 02:52:09 +00:00
|
|
|
$logger,
|
|
|
|
$em
|
2018-12-30 10:18:48 +00:00
|
|
|
);
|
2019-02-27 19:18:12 +00:00
|
|
|
|
|
|
|
$dispatcher->addSubscriber($mq);
|
|
|
|
return $mq;
|
2019-08-07 04:33:55 +00:00
|
|
|
},
|
2018-12-30 10:18:48 +00:00
|
|
|
|
2019-08-07 04:33:55 +00:00
|
|
|
// InfluxDB
|
2019-09-29 07:50:24 +00:00
|
|
|
InfluxDB\Database::class => function (Settings $settings) {
|
2019-08-07 04:33:55 +00:00
|
|
|
$opts = [
|
|
|
|
'host' => $settings->isDocker() ? 'influxdb' : 'localhost',
|
|
|
|
'port' => 8086,
|
|
|
|
];
|
2018-02-01 11:49:40 +00:00
|
|
|
|
2019-08-07 04:33:55 +00:00
|
|
|
$influx = new InfluxDB\Client($opts['host'], $opts['port']);
|
|
|
|
return $influx->selectDB('stations');
|
|
|
|
},
|
|
|
|
|
|
|
|
// Supervisor manager
|
2019-09-29 07:50:24 +00:00
|
|
|
Supervisor\Supervisor::class => function (Settings $settings) {
|
2019-08-07 04:33:55 +00:00
|
|
|
$guzzle_client = new GuzzleHttp\Client();
|
|
|
|
$client = new fXmlRpc\Client(
|
|
|
|
'http://' . ($settings->isDocker() ? 'stations' : '127.0.0.1') . ':9001/RPC2',
|
|
|
|
new fXmlRpc\Transport\HttpAdapterTransport(
|
|
|
|
new Http\Message\MessageFactory\GuzzleMessageFactory(),
|
|
|
|
new Http\Adapter\Guzzle6\Client($guzzle_client)
|
|
|
|
)
|
2018-03-17 02:40:34 +00:00
|
|
|
);
|
2018-02-01 11:49:40 +00:00
|
|
|
|
2019-08-07 04:33:55 +00:00
|
|
|
$connector = new Supervisor\Connector\XmlRpc($client);
|
|
|
|
$supervisor = new Supervisor\Supervisor($connector);
|
2018-08-12 06:35:48 +00:00
|
|
|
|
2019-08-07 04:33:55 +00:00
|
|
|
if (!$supervisor->isConnected()) {
|
|
|
|
throw new \Azura\Exception(sprintf('Could not connect to supervisord.'));
|
|
|
|
}
|
|
|
|
|
|
|
|
return $supervisor;
|
|
|
|
},
|
|
|
|
|
2019-09-29 07:50:24 +00:00
|
|
|
Azura\Assets::class => function (Azura\Config $config, Settings $settings) {
|
2018-08-12 06:35:48 +00:00
|
|
|
$libraries = $config->get('assets');
|
2017-06-23 04:54:50 +00:00
|
|
|
|
2017-09-24 11:29:19 +00:00
|
|
|
$versioned_files = [];
|
2019-09-29 07:50:24 +00:00
|
|
|
$assets_file = $settings[Settings::BASE_DIR] . '/web/static/assets.json';
|
2017-09-24 11:29:19 +00:00
|
|
|
if (file_exists($assets_file)) {
|
|
|
|
$versioned_files = json_decode(file_get_contents($assets_file), true);
|
|
|
|
}
|
2017-06-23 04:54:50 +00:00
|
|
|
|
2019-08-07 04:33:55 +00:00
|
|
|
return new Azura\Assets($libraries, $versioned_files);
|
|
|
|
},
|
|
|
|
|
|
|
|
/*
|
|
|
|
* Radio Components
|
|
|
|
*/
|
|
|
|
|
|
|
|
App\Radio\Adapters::class => DI\autowire(),
|
|
|
|
App\Radio\AutoDJ::class => DI\autowire(),
|
|
|
|
App\Radio\Configuration::class => DI\autowire(),
|
|
|
|
|
2019-08-18 01:33:44 +00:00
|
|
|
App\Radio\Filesystem::class => DI\autowire(),
|
2019-08-07 04:33:55 +00:00
|
|
|
|
|
|
|
App\Radio\Backend\Liquidsoap::class => DI\autowire(),
|
|
|
|
App\Radio\Backend\None::class => DI\autowire(),
|
|
|
|
|
|
|
|
App\Radio\Frontend\Icecast::class => DI\autowire(),
|
|
|
|
App\Radio\Frontend\Remote::class => DI\autowire(),
|
|
|
|
App\Radio\Frontend\SHOUTcast::class => DI\autowire(),
|
|
|
|
|
|
|
|
App\Radio\Remote\AzuraRelay::class => DI\autowire(),
|
|
|
|
App\Radio\Remote\Icecast::class => DI\autowire(),
|
|
|
|
App\Radio\Remote\SHOUTcast1::class => DI\autowire(),
|
|
|
|
App\Radio\Remote\SHOUTcast2::class => DI\autowire(),
|
|
|
|
|
|
|
|
/*
|
|
|
|
* Synchronized (Cron) Tasks
|
|
|
|
*/
|
|
|
|
|
2019-09-29 07:50:24 +00:00
|
|
|
App\Sync\Runner::class => function (
|
2019-08-07 04:33:55 +00:00
|
|
|
ContainerInterface $di,
|
2019-09-29 07:50:24 +00:00
|
|
|
Monolog\Logger $logger,
|
|
|
|
App\Entity\Repository\SettingsRepository $settingsRepo
|
2019-08-07 04:33:55 +00:00
|
|
|
) {
|
|
|
|
return new App\Sync\Runner(
|
|
|
|
$settingsRepo,
|
|
|
|
$logger,
|
|
|
|
[
|
|
|
|
$di->get(App\Sync\Task\NowPlaying::class),
|
|
|
|
$di->get(App\Sync\Task\ReactivateStreamer::class),
|
|
|
|
],
|
|
|
|
[ // Every minute tasks
|
|
|
|
$di->get(App\Sync\Task\RadioRequests::class),
|
|
|
|
$di->get(App\Sync\Task\Backup::class),
|
|
|
|
$di->get(App\Sync\Task\RelayCleanup::class),
|
|
|
|
],
|
|
|
|
[ // Every 5 minutes tasks
|
|
|
|
$di->get(App\Sync\Task\Media::class),
|
2020-01-30 21:48:34 +00:00
|
|
|
$di->get(App\Sync\Task\FolderPlaylists::class),
|
2019-08-07 04:33:55 +00:00
|
|
|
$di->get(App\Sync\Task\CheckForUpdates::class),
|
|
|
|
],
|
|
|
|
[ // Every hour tasks
|
|
|
|
$di->get(App\Sync\Task\Analytics::class),
|
|
|
|
$di->get(App\Sync\Task\RadioAutomation::class),
|
|
|
|
$di->get(App\Sync\Task\HistoryCleanup::class),
|
|
|
|
$di->get(App\Sync\Task\RotateLogs::class),
|
2020-01-08 20:37:56 +00:00
|
|
|
$di->get(App\Sync\Task\UpdateGeoLiteDatabase::class),
|
2019-08-07 04:33:55 +00:00
|
|
|
]
|
2018-11-02 05:25:47 +00:00
|
|
|
);
|
2019-08-07 04:33:55 +00:00
|
|
|
},
|
|
|
|
|
|
|
|
App\Sync\Task\Analytics::class => DI\autowire(),
|
|
|
|
App\Sync\Task\Backup::class => DI\autowire(),
|
|
|
|
App\Sync\Task\CheckForUpdates::class => DI\autowire(),
|
2020-01-30 21:48:34 +00:00
|
|
|
App\Sync\Task\FolderPlaylists::class => DI\autowire(),
|
2019-08-07 04:33:55 +00:00
|
|
|
App\Sync\Task\HistoryCleanup::class => DI\autowire(),
|
|
|
|
App\Sync\Task\Media::class => DI\autowire(),
|
|
|
|
App\Sync\Task\ReactivateStreamer::class => DI\autowire(),
|
|
|
|
App\Sync\Task\NowPlaying::class => DI\autowire(),
|
|
|
|
App\Sync\Task\RadioAutomation::class => DI\autowire(),
|
|
|
|
App\Sync\Task\RadioRequests::class => DI\autowire(),
|
|
|
|
App\Sync\Task\RelayCleanup::class => DI\autowire(),
|
|
|
|
App\Sync\Task\RotateLogs::class => DI\autowire(),
|
2020-01-08 20:37:56 +00:00
|
|
|
App\Sync\Task\UpdateGeoLiteDatabase::class => DI\autowire(),
|
2019-08-07 04:33:55 +00:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Web Hooks
|
|
|
|
*/
|
|
|
|
|
2019-09-29 07:50:24 +00:00
|
|
|
App\Webhook\Dispatcher::class => function (
|
2019-08-07 04:33:55 +00:00
|
|
|
ContainerInterface $di,
|
|
|
|
Azura\Config $config,
|
|
|
|
Monolog\Logger $logger
|
2019-09-29 07:50:24 +00:00
|
|
|
) {
|
2019-08-07 04:33:55 +00:00
|
|
|
$webhooks = $config->get('webhooks');
|
|
|
|
$services = [];
|
2019-09-29 07:50:24 +00:00
|
|
|
foreach ($webhooks['webhooks'] as $webhook_key => $webhook_info) {
|
2019-08-07 04:33:55 +00:00
|
|
|
$services[$webhook_key] = $di->get($webhook_info['class']);
|
|
|
|
}
|
2019-04-09 09:06:44 +00:00
|
|
|
|
2019-08-07 04:33:55 +00:00
|
|
|
return new App\Webhook\Dispatcher($logger, $services);
|
|
|
|
},
|
|
|
|
|
|
|
|
App\Webhook\Connector\Discord::class => DI\autowire(),
|
|
|
|
App\Webhook\Connector\Generic::class => DI\autowire(),
|
|
|
|
App\Webhook\Connector\Local::class => DI\autowire(),
|
|
|
|
App\Webhook\Connector\TuneIn::class => DI\autowire(),
|
|
|
|
App\Webhook\Connector\Telegram::class => DI\autowire(),
|
|
|
|
App\Webhook\Connector\Twitter::class => DI\autowire(),
|
|
|
|
|
|
|
|
/*
|
|
|
|
* Middleware
|
|
|
|
*/
|
|
|
|
|
|
|
|
App\Middleware\EnforceSecurity::class => DI\autowire(),
|
|
|
|
App\Middleware\GetCurrentUser::class => DI\autowire(),
|
|
|
|
App\Middleware\GetStation::class => DI\autowire(),
|
|
|
|
App\Middleware\InjectAcl::class => DI\autowire(),
|
|
|
|
App\Middleware\RequireLogin::class => DI\create(),
|
|
|
|
|
|
|
|
// Module-specific middleware
|
|
|
|
App\Middleware\Module\Admin::class => DI\autowire(),
|
|
|
|
App\Middleware\Module\Api::class => DI\autowire(),
|
|
|
|
App\Middleware\Module\Stations::class => DI\autowire(),
|
|
|
|
App\Middleware\Module\StationFiles::class => DI\autowire(),
|
|
|
|
|
|
|
|
/*
|
|
|
|
* Notifications
|
|
|
|
*/
|
|
|
|
|
|
|
|
App\Notification\Manager::class => DI\autowire(),
|
|
|
|
|
|
|
|
/*
|
2020-01-05 21:29:56 +00:00
|
|
|
* Class Groups
|
2019-08-07 04:33:55 +00:00
|
|
|
*/
|
|
|
|
|
2020-01-05 21:29:56 +00:00
|
|
|
'App\Form\*Form' => DI\autowire(),
|
|
|
|
'App\Entity\Fixture\*' => DI\autowire(),
|
2018-02-13 02:10:02 +00:00
|
|
|
|
2019-08-07 04:33:55 +00:00
|
|
|
/*
|
2020-01-05 21:29:56 +00:00
|
|
|
* Controller Classes
|
2019-08-07 04:33:55 +00:00
|
|
|
*/
|
2017-12-16 03:37:42 +00:00
|
|
|
|
2019-08-07 04:33:55 +00:00
|
|
|
'App\Controller\Admin\*Controller' => DI\autowire(),
|
2018-11-15 13:41:52 +00:00
|
|
|
|
2019-08-07 04:33:55 +00:00
|
|
|
'App\Controller\Api\*Controller' => DI\autowire(),
|
|
|
|
'App\Controller\Api\Admin\*Controller' => DI\autowire(),
|
|
|
|
'App\Controller\Api\Stations\*Controller' => DI\autowire(),
|
2019-02-18 00:52:01 +00:00
|
|
|
|
2019-08-07 04:33:55 +00:00
|
|
|
'App\Controller\Frontend\*Controller' => DI\autowire(),
|
2017-12-16 03:37:42 +00:00
|
|
|
|
2019-08-07 04:33:55 +00:00
|
|
|
'App\Controller\Stations\*Controller' => DI\autowire(),
|
|
|
|
'App\Controller\Stations\Files\*Controller' => DI\autowire(),
|
|
|
|
'App\Controller\Stations\Reports\*Controller' => DI\autowire(),
|
|
|
|
];
|