|
- <?php
- /**
- * @link http://www.yiiframework.com/
- * @copyright Copyright (c) 2008 Yii Software LLC
- * @license http://www.yiiframework.com/license/
- */
-
- namespace yii\web;
-
- use Yii;
- use yii\helpers\Url;
- use yii\base\InvalidRouteException;
-
- /**
- * Application is the base class for all web application classes.
- *
- * @property ErrorHandler $errorHandler The error handler application component. This property is read-only.
- * @property string $homeUrl The homepage URL.
- * @property Request $request The request component. This property is read-only.
- * @property Response $response The response component. This property is read-only.
- * @property Session $session The session component. This property is read-only.
- * @property User $user The user component. This property is read-only.
- *
- * @author Qiang Xue <qiang.xue@gmail.com>
- * @since 2.0
- */
- class Application extends \yii\base\Application
- {
- /**
- * @var string the default route of this application. Defaults to 'site'.
- */
- public $defaultRoute = 'site';
- /**
- * @var array the configuration specifying a controller action which should handle
- * all user requests. This is mainly used when the application is in maintenance mode
- * and needs to handle all incoming requests via a single action.
- * The configuration is an array whose first element specifies the route of the action.
- * The rest of the array elements (key-value pairs) specify the parameters to be bound
- * to the action. For example,
- *
- * ```php
- * [
- * 'offline/notice',
- * 'param1' => 'value1',
- * 'param2' => 'value2',
- * ]
- * ```
- *
- * Defaults to null, meaning catch-all is not used.
- */
- public $catchAll;
- /**
- * @var Controller the currently active controller instance
- */
- public $controller;
-
-
- /**
- * @inheritdoc
- */
- protected function bootstrap()
- {
- $request = $this->getRequest();
- Yii::setAlias('@webroot', dirname($request->getScriptFile()));
- Yii::setAlias('@web', $request->getBaseUrl());
-
- parent::bootstrap();
- }
-
- /**
- * Handles the specified request.
- * @param Request $request the request to be handled
- * @return Response the resulting response
- * @throws NotFoundHttpException if the requested route is invalid
- */
- public function handleRequest($request)
- {
- if (empty($this->catchAll)) {
- try {
- list ($route, $params) = $request->resolve();
- } catch (UrlNormalizerRedirectException $e) {
- $url = $e->url;
- if (is_array($url)) {
- if (isset($url[0])) {
- // ensure the route is absolute
- $url[0] = '/' . ltrim($url[0], '/');
- }
- $url += $request->getQueryParams();
- }
- return $this->getResponse()->redirect(Url::to($url, $e->scheme), $e->statusCode);
- }
- } else {
- $route = $this->catchAll[0];
- $params = $this->catchAll;
- unset($params[0]);
- }
- try {
- Yii::trace("Route requested: '$route'", __METHOD__);
- $this->requestedRoute = $route;
- $result = $this->runAction($route, $params);
- if ($result instanceof Response) {
- return $result;
- } else {
- $response = $this->getResponse();
- if ($result !== null) {
- $response->data = $result;
- }
-
- return $response;
- }
- } catch (InvalidRouteException $e) {
- throw new NotFoundHttpException(Yii::t('yii', 'Page not found.'), $e->getCode(), $e);
- }
- }
-
- private $_homeUrl;
-
- /**
- * @return string the homepage URL
- */
- public function getHomeUrl()
- {
- if ($this->_homeUrl === null) {
- if ($this->getUrlManager()->showScriptName) {
- return $this->getRequest()->getScriptUrl();
- } else {
- return $this->getRequest()->getBaseUrl() . '/';
- }
- } else {
- return $this->_homeUrl;
- }
- }
-
- /**
- * @param string $value the homepage URL
- */
- public function setHomeUrl($value)
- {
- $this->_homeUrl = $value;
- }
-
- /**
- * Returns the error handler component.
- * @return ErrorHandler the error handler application component.
- */
- public function getErrorHandler()
- {
- return $this->get('errorHandler');
- }
-
- /**
- * Returns the request component.
- * @return Request the request component.
- */
- public function getRequest()
- {
- return $this->get('request');
- }
-
- /**
- * Returns the response component.
- * @return Response the response component.
- */
- public function getResponse()
- {
- return $this->get('response');
- }
-
- /**
- * Returns the session component.
- * @return Session the session component.
- */
- public function getSession()
- {
- return $this->get('session');
- }
-
- /**
- * Returns the user component.
- * @return User the user component.
- */
- public function getUser()
- {
- return $this->get('user');
- }
-
- /**
- * @inheritdoc
- */
- public function coreComponents()
- {
- return array_merge(parent::coreComponents(), [
- 'request' => ['class' => 'yii\web\Request'],
- 'response' => ['class' => 'yii\web\Response'],
- 'session' => ['class' => 'yii\web\Session'],
- 'user' => ['class' => 'yii\web\User'],
- 'errorHandler' => ['class' => 'yii\web\ErrorHandler'],
- ]);
- }
- }
|