class SessionTestController

Same name and namespace in other branches
  1. 9 core/modules/system/tests/modules/session_test/src/Controller/SessionTestController.php \Drupal\session_test\Controller\SessionTestController
  2. 8.9.x core/modules/system/tests/modules/session_test/src/Controller/SessionTestController.php \Drupal\session_test\Controller\SessionTestController
  3. 10 core/modules/system/tests/modules/session_test/src/Controller/SessionTestController.php \Drupal\session_test\Controller\SessionTestController

Controller providing page callbacks for the action admin interface.

Hierarchy

Expanded class hierarchy of SessionTestController

File

core/modules/system/tests/modules/session_test/src/Controller/SessionTestController.php, line 14

Namespace

Drupal\session_test\Controller
View source
class SessionTestController extends ControllerBase {
    
    /**
     * Prints the stored session value to the screen.
     *
     * @return string
     *   A notification message.
     */
    public function get() {
        return empty($_SESSION['session_test_value']) ? [] : [
            '#markup' => $this->t('The current value of the stored session variable is: %val', [
                '%val' => $_SESSION['session_test_value'],
            ]),
        ];
    }
    
    /**
     * Prints the stored session value to the screen.
     *
     * @param \Symfony\Component\HttpFoundation\Request $request
     *   The incoming request.
     *
     * @return string
     *   A notification message.
     */
    public function getFromSessionObject(Request $request) {
        $value = $request->getSession()
            ->get("session_test_key");
        return empty($value) ? [] : [
            '#markup' => $this->t('The current value of the stored session variable is: %val', [
                '%val' => $value,
            ]),
        ];
    }
    
    /**
     * Print the current session ID.
     *
     * @param \Symfony\Component\HttpFoundation\Request $request
     *   The incoming request.
     *
     * @return string
     *   A notification message with session ID.
     */
    public function getId(Request $request) {
        // Set a value in $_SESSION, so that SessionManager::save() will start
        // a session.
        $_SESSION['test'] = 'test';
        $request->getSession()
            ->save();
        return [
            '#markup' => 'session_id:' . session_id() . "\n",
        ];
    }
    
    /**
     * Print the current session ID as read from the cookie.
     *
     * @param \Symfony\Component\HttpFoundation\Request $request
     *   The request object.
     *
     * @return string
     *   A notification message with session ID.
     */
    public function getIdFromCookie(Request $request) {
        return [
            '#markup' => 'session_id:' . $request->cookies
                ->get(session_name()) . "\n",
            '#cache' => [
                'contexts' => [
                    'cookies:' . session_name(),
                ],
            ],
        ];
    }
    
    /**
     * Stores a value in $_SESSION['session_test_value'].
     *
     * @param string $test_value
     *   A session value.
     *
     * @return string
     *   A notification message.
     */
    public function set($test_value) {
        $_SESSION['session_test_value'] = $test_value;
        return [
            '#markup' => $this->t('The current value of the stored session variable has been set to %val', [
                '%val' => $test_value,
            ]),
        ];
    }
    
    /**
     * Turns off session saving and then tries to save a value anyway.
     *
     * @param string $test_value
     *   A session value.
     *
     * @return string
     *   A notification message.
     */
    public function noSet($test_value) {
        \Drupal::service('session_handler.write_safe')->setSessionWritable(FALSE);
        $this->set($test_value);
        return [
            '#markup' => $this->t('session saving was disabled, and then %val was set', [
                '%val' => $test_value,
            ]),
        ];
    }
    
    /**
     * Sets a message to me displayed on the following page.
     *
     * @return string
     *   A notification message.
     */
    public function setMessage() {
        $this->messenger()
            ->addStatus($this->t('This is a dummy message.'));
        return new Response($this->t('A message was set.'));
        // Do not return anything, so the current request does not result in a themed
        // page with messages. The message will be displayed in the following request
        // instead.
    }
    
    /**
     * Sets a message but call drupal_save_session(FALSE).
     *
     * @return string
     *   A notification message.
     */
    public function setMessageButDoNotSave() {
        \Drupal::service('session_handler.write_safe')->setSessionWritable(FALSE);
        $this->setMessage();
        return [
            '#markup' => '',
        ];
    }
    
    /**
     * Only available if current user is logged in.
     *
     * @return string
     *   A notification message.
     */
    public function isLoggedIn() {
        return [
            '#markup' => $this->t('User is logged in.'),
        ];
    }
    
    /**
     * Returns the trace recorded by test proxy session handlers as JSON.
     *
     * @param \Symfony\Component\HttpFoundation\Request $request
     *   The incoming request.
     *
     * @return \Symfony\Component\HttpFoundation\JsonResponse
     *   The response.
     */
    public function traceHandler(Request $request) {
        // Start a session if necessary, set a value and then save and close it.
        $request->getSession()
            ->start();
        if (empty($_SESSION['trace-handler'])) {
            $_SESSION['trace-handler'] = 1;
        }
        else {
            $_SESSION['trace-handler']++;
        }
        $request->getSession()
            ->save();
        // Collect traces and return them in JSON format.
        $trace = \Drupal::service('session_test.session_handler_proxy_trace')->getArrayCopy();
        return new JsonResponse($trace);
    }
    
    /**
     * Returns the values stored in the active session and the user ID.
     *
     * @param \Symfony\Component\HttpFoundation\Request $request
     *   The request object.
     *
     * @return \Symfony\Component\HttpFoundation\JsonResponse
     *   A response object containing the session values and the user ID.
     */
    public function getSession(Request $request) {
        return new JsonResponse([
            'session' => $request->getSession()
                ->all(),
            'user' => $this->currentUser()
                ->id(),
        ]);
    }
    
    /**
     * Sets a test value on the session.
     *
     * @param \Symfony\Component\HttpFoundation\Request $request
     *   The request object.
     * @param string $test_value
     *   A value to set on the session.
     *
     * @return \Symfony\Component\HttpFoundation\JsonResponse
     *   A response object containing the session values and the user ID.
     */
    public function setSession(Request $request, $test_value) {
        $session = $request->getSession();
        $session->set('test_value', $test_value);
        return new JsonResponse([
            'session' => $session->all(),
            'user' => $this->currentUser()
                ->id(),
        ]);
    }
    
    /**
     * Sets the test flag in the session test bag.
     *
     * @param \Symfony\Component\HttpFoundation\Request $request
     *   The request object.
     *
     * @return \Symfony\Component\HttpFoundation\Response
     *   The response object.
     */
    public function setSessionBagFlag(Request $request) {
        
        /** @var \Drupal\session_test\Session\TestSessionBag */
        $bag = $request->getSession()
            ->getBag(TestSessionBag::BAG_NAME);
        $bag->setFlag();
        return new Response();
    }
    
    /**
     * Clears the test flag from the session test bag.
     *
     * @param \Symfony\Component\HttpFoundation\Request $request
     *   The request object.
     *
     * @return \Symfony\Component\HttpFoundation\Response
     *   The response object.
     */
    public function clearSessionBagFlag(Request $request) {
        
        /** @var \Drupal\session_test\Session\TestSessionBag */
        $bag = $request->getSession()
            ->getBag(TestSessionBag::BAG_NAME);
        $bag->clearFlag();
        return new Response();
    }
    
    /**
     * Prints a message if the flag in the session bag is set.
     *
     * @param \Symfony\Component\HttpFoundation\Request $request
     *   The request object.
     *
     * @return \Symfony\Component\HttpFoundation\Response
     *   The response object.
     */
    public function hasSessionBagFlag(Request $request) {
        
        /** @var \Drupal\session_test\Session\TestSessionBag */
        $bag = $request->getSession()
            ->getBag(TestSessionBag::BAG_NAME);
        return new Response(empty($bag->hasFlag()) ? $this->t('Flag is absent from session bag') : $this->t('Flag is present in session bag'));
    }
    
    /**
     * Trigger an exception when the session is written.
     *
     * @param \Symfony\Component\HttpFoundation\Request $request
     *   The request object.
     */
    public function triggerWriteException(Request $request) {
        $session = $request->getSession();
        $session->set('test_value', 'Ensure session contains some data');
        // Move sessions table out of the way.
        $schema = \Drupal::database()->schema();
        $schema->renameTable('sessions', 'sessions_tmp');
        // There needs to be a session table, otherwise
        // InstallerRedirectTrait::shouldRedirectToInstaller() will instruct the
        // handleException::handleException to redirect to the installer.
        $schema->createTable('sessions', [
            'description' => "Fake sessions table missing some columns.",
            'fields' => [
                'sid' => [
                    'description' => "A fake session ID column.",
                    'type' => 'varchar_ascii',
                    'length' => 128,
                    'not null' => TRUE,
                ],
            ],
            'primary key' => [
                'sid',
            ],
        ]);
        drupal_register_shutdown_function(function () {
            $schema = \Drupal::database()->schema();
            $schema->dropTable('sessions');
            $schema->renameTable('sessions_tmp', 'sessions');
        });
        return new Response();
    }

}

Members

Title Sort descending Modifiers Object type Summary Overrides
AutowireTrait::create public static function Instantiates a new instance of the implementing class using autowiring. 32
ControllerBase::$configFactory protected property The configuration factory.
ControllerBase::$currentUser protected property The current user service. 2
ControllerBase::$entityFormBuilder protected property The entity form builder.
ControllerBase::$entityTypeManager protected property The entity type manager.
ControllerBase::$formBuilder protected property The form builder. 1
ControllerBase::$keyValue protected property The key-value storage. 1
ControllerBase::$languageManager protected property The language manager. 1
ControllerBase::$moduleHandler protected property The module handler. 1
ControllerBase::$stateService protected property The state service.
ControllerBase::cache protected function Returns the requested cache bin.
ControllerBase::config protected function Retrieves a configuration object.
ControllerBase::container private function Returns the service container.
ControllerBase::currentUser protected function Returns the current user. 2
ControllerBase::entityFormBuilder protected function Retrieves the entity form builder.
ControllerBase::entityTypeManager protected function Retrieves the entity type manager.
ControllerBase::formBuilder protected function Returns the form builder service. 1
ControllerBase::keyValue protected function Returns a key/value storage collection. 1
ControllerBase::languageManager protected function Returns the language manager service. 1
ControllerBase::moduleHandler protected function Returns the module handler. 1
ControllerBase::redirect protected function Returns a redirect response object for the specified route.
ControllerBase::state protected function Returns the state storage service.
LoggerChannelTrait::$loggerFactory protected property The logger channel factory service.
LoggerChannelTrait::getLogger protected function Gets the logger for a specific channel.
LoggerChannelTrait::setLoggerFactory public function Injects the logger channel factory.
MessengerTrait::$messenger protected property The messenger. 16
MessengerTrait::messenger public function Gets the messenger. 16
MessengerTrait::setMessenger public function Sets the messenger.
RedirectDestinationTrait::$redirectDestination protected property The redirect destination service. 2
RedirectDestinationTrait::getDestinationArray protected function Prepares a 'destination' URL query parameter for use with \Drupal\Core\Url.
RedirectDestinationTrait::getRedirectDestination protected function Returns the redirect destination service.
RedirectDestinationTrait::setRedirectDestination public function Sets the redirect destination service.
SessionTestController::clearSessionBagFlag public function Clears the test flag from the session test bag.
SessionTestController::get public function Prints the stored session value to the screen.
SessionTestController::getFromSessionObject public function Prints the stored session value to the screen.
SessionTestController::getId public function Print the current session ID.
SessionTestController::getIdFromCookie public function Print the current session ID as read from the cookie.
SessionTestController::getSession public function Returns the values stored in the active session and the user ID.
SessionTestController::hasSessionBagFlag public function Prints a message if the flag in the session bag is set.
SessionTestController::isLoggedIn public function Only available if current user is logged in.
SessionTestController::noSet public function Turns off session saving and then tries to save a value anyway.
SessionTestController::set public function Stores a value in $_SESSION['session_test_value'].
SessionTestController::setMessage public function Sets a message to me displayed on the following page.
SessionTestController::setMessageButDoNotSave public function Sets a message but call drupal_save_session(FALSE).
SessionTestController::setSession public function Sets a test value on the session.
SessionTestController::setSessionBagFlag public function Sets the test flag in the session test bag.
SessionTestController::traceHandler public function Returns the trace recorded by test proxy session handlers as JSON.
SessionTestController::triggerWriteException public function Trigger an exception when the session is written.
StringTranslationTrait::$stringTranslation protected property The string translation service. 3
StringTranslationTrait::formatPlural protected function Formats a string containing a count of items.
StringTranslationTrait::getNumberOfPlurals protected function Returns the number of plurals supported by a given language.
StringTranslationTrait::getStringTranslation protected function Gets the string translation service.
StringTranslationTrait::setStringTranslation public function Sets the string translation service to use. 2
StringTranslationTrait::t protected function Translates a string to the current language or to a given language.

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