class ExceptionDetectNeedsInstallSubscriber

Same name in other branches
  1. 9 core/lib/Drupal/Core/EventSubscriber/ExceptionDetectNeedsInstallSubscriber.php \Drupal\Core\EventSubscriber\ExceptionDetectNeedsInstallSubscriber
  2. 8.9.x core/lib/Drupal/Core/EventSubscriber/ExceptionDetectNeedsInstallSubscriber.php \Drupal\Core\EventSubscriber\ExceptionDetectNeedsInstallSubscriber
  3. 11.x core/lib/Drupal/Core/EventSubscriber/ExceptionDetectNeedsInstallSubscriber.php \Drupal\Core\EventSubscriber\ExceptionDetectNeedsInstallSubscriber

Exception handler to determine if an exception indicates an uninstalled site.

Hierarchy

Expanded class hierarchy of ExceptionDetectNeedsInstallSubscriber

1 string reference to 'ExceptionDetectNeedsInstallSubscriber'
core.services.yml in core/core.services.yml
core/core.services.yml
1 service uses ExceptionDetectNeedsInstallSubscriber
exception.needs_installer in core/core.services.yml
Drupal\Core\EventSubscriber\ExceptionDetectNeedsInstallSubscriber

File

core/lib/Drupal/Core/EventSubscriber/ExceptionDetectNeedsInstallSubscriber.php, line 15

Namespace

Drupal\Core\EventSubscriber
View source
class ExceptionDetectNeedsInstallSubscriber implements EventSubscriberInterface {
    use InstallerRedirectTrait;
    
    /**
     * The default database connection.
     *
     * @var \Drupal\Core\Database\Connection
     */
    protected $connection;
    
    /**
     * Constructs a new ExceptionDetectNeedsInstallSubscriber.
     *
     * @param \Drupal\Core\Database\Connection $connection
     *   The default database connection.
     */
    public function __construct(Connection $connection) {
        $this->connection = $connection;
    }
    
    /**
     * Handles errors for this subscriber.
     *
     * @param \Symfony\Component\HttpKernel\Event\ExceptionEvent $event
     *   The event to process.
     */
    public function onException(ExceptionEvent $event) {
        $exception = $event->getThrowable();
        if ($this->shouldRedirectToInstaller($exception, $this->connection)) {
            // Only redirect if this is an HTML response (i.e., a user trying to view
            // the site in a web browser before installing it).
            $request = $event->getRequest();
            $format = $request->query
                ->get(MainContentViewSubscriber::WRAPPER_FORMAT, $request->getRequestFormat());
            if ($format == 'html') {
                $event->setResponse(new RedirectResponse($request->getBasePath() . '/core/install.php', 302, [
                    'Cache-Control' => 'no-cache',
                ]));
            }
        }
    }
    
    /**
     * Registers the methods in this class that should be listeners.
     *
     * @return array
     *   An array of event listener definitions.
     */
    public static function getSubscribedEvents() : array {
        $events[KernelEvents::EXCEPTION][] = [
            'onException',
            100,
        ];
        return $events;
    }

}

Members

Title Sort descending Modifiers Object type Summary
ExceptionDetectNeedsInstallSubscriber::$connection protected property The default database connection.
ExceptionDetectNeedsInstallSubscriber::getSubscribedEvents public static function Registers the methods in this class that should be listeners.
ExceptionDetectNeedsInstallSubscriber::onException public function Handles errors for this subscriber.
ExceptionDetectNeedsInstallSubscriber::__construct public function Constructs a new ExceptionDetectNeedsInstallSubscriber.
InstallerRedirectTrait::isCli protected function Returns whether the current PHP process runs on CLI.
InstallerRedirectTrait::shouldRedirectToInstaller protected function Determines if an exception handler should redirect to the installer.

Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.