diff --git a/framework/yii/base/Application.php b/framework/yii/base/Application.php index 495c1f8..09951bd 100644 --- a/framework/yii/base/Application.php +++ b/framework/yii/base/Application.php @@ -67,10 +67,20 @@ class Application extends Module * Constructor. * @param array $config name-value pairs that will be used to initialize the object properties. * Note that the configuration must contain both [[id]] and [[basePath]]. + * @throws InvalidConfigException if either [[id]] or [[basePath]] configuration is missing. */ public function __construct($config = array()) { Yii::$app = $this; + if (!isset($config['id'])) { + throw new InvalidConfigException('The "id" configuration is required.'); + } + if (isset($config['basePath'])) { + $this->setBasePath($config['basePath']); + unset($config['basePath']); + } else { + throw new InvalidConfigException('The "basePath" configuration is required.'); + } $this->preInit($config); @@ -83,37 +93,24 @@ class Application extends Module /** * Pre-initializes the application. * This method is called at the beginning of the application constructor. - * When this method is called, none of the application properties are initialized yet. - * The default implementation will initialize a few important properties - * that may be referenced during the initialization of the rest of the properties. * @param array $config the application configuration - * @throws InvalidConfigException if either [[id]] or [[basePath]] configuration is missing. */ - public function preInit($config) + public function preInit(&$config) { - if (!isset($config['id'])) { - throw new InvalidConfigException('The "id" configuration is required.'); - } - if (!isset($config['basePath'])) { - throw new InvalidConfigException('The "basePath" configuration is required.'); - } - - $this->setBasePath($config['basePath']); - Yii::setAlias('@app', $this->getBasePath()); - unset($config['basePath']); - - if (isset($config['vendor'])) { - $this->setVendorPath($config['vendor']); + if (isset($config['vendorPath'])) { + $this->setVendorPath($config['vendorPath']); unset($config['vendorPath']); + } else { + // set "@vendor" + $this->getVendorPath(); } - Yii::setAlias('@vendor', $this->getVendorPath()); - - if (isset($config['runtime'])) { - $this->setRuntimePath($config['runtime']); - unset($config['runtime']); + if (isset($config['runtimePath'])) { + $this->setRuntimePath($config['runtimePath']); + unset($config['runtimePath']); + } else { + // set "@runtime" + $this->getRuntimePath(); } - Yii::setAlias('@runtime', $this->getRuntimePath()); - if (isset($config['timeZone'])) { $this->setTimeZone($config['timeZone']); unset($config['timeZone']); @@ -202,7 +199,8 @@ class Application extends Module /** * Returns the directory that stores runtime files. - * @return string the directory that stores runtime files. Defaults to 'protected/runtime'. + * @return string the directory that stores runtime files. + * Defaults to the "runtime" subdirectory under [[basePath]]. */ public function getRuntimePath() { @@ -215,16 +213,11 @@ class Application extends Module /** * Sets the directory that stores runtime files. * @param string $path the directory that stores runtime files. - * @throws InvalidConfigException if the directory does not exist or is not writable */ public function setRuntimePath($path) { - $path = Yii::getAlias($path); - if (is_dir($path) && is_writable($path)) { - $this->_runtimePath = $path; - } else { - throw new InvalidConfigException("Runtime path must be a directory writable by the Web server process: $path"); - } + $this->_runtimePath = Yii::getAlias($path); + Yii::setAlias('@runtime', $this->_runtimePath); } private $_vendorPath; @@ -232,7 +225,7 @@ class Application extends Module /** * Returns the directory that stores vendor files. * @return string the directory that stores vendor files. - * Defaults to 'vendor' directory under applications [[basePath]]. + * Defaults to "vendor" directory under [[basePath]]. */ public function getVendorPath() { @@ -249,6 +242,7 @@ class Application extends Module public function setVendorPath($path) { $this->_vendorPath = Yii::getAlias($path); + Yii::setAlias('@vendor', $this->_vendorPath); } /** diff --git a/framework/yii/base/Module.php b/framework/yii/base/Module.php index fac4164..5f5c376 100644 --- a/framework/yii/base/Module.php +++ b/framework/yii/base/Module.php @@ -236,6 +236,9 @@ abstract class Module extends Component $p = realpath($path); if ($p !== false && is_dir($p)) { $this->_basePath = $p; + if ($this instanceof Application) { + Yii::setAlias('@app', $p); + } } else { throw new InvalidParamException("The directory does not exist: $path"); } diff --git a/framework/yii/logging/Target.php b/framework/yii/logging/Target.php index fac8b53..7be7001 100644 --- a/framework/yii/logging/Target.php +++ b/framework/yii/logging/Target.php @@ -204,11 +204,9 @@ abstract class Target extends Component if ($matched) { foreach ($this->except as $category) { $prefix = rtrim($category, '*'); - foreach ($messages as $i => $message) { - if (strpos($message[2], $prefix) === 0 && ($message[2] === $category || $prefix !== $category)) { - $matched = false; - break; - } + if (strpos($message[2], $prefix) === 0 && ($message[2] === $category || $prefix !== $category)) { + $matched = false; + break; } } } diff --git a/framework/yii/web/AccessRule.php b/framework/yii/web/AccessRule.php index 3897769..9bd52ce 100644 --- a/framework/yii/web/AccessRule.php +++ b/framework/yii/web/AccessRule.php @@ -99,7 +99,7 @@ class AccessRule extends Component if ($this->matchAction($action) && $this->matchRole($user) && $this->matchIP($request->getUserIP()) - && $this->matchVerb($request->getRequestMethod()) + && $this->matchVerb($request->getMethod()) && $this->matchController($action->controller) && $this->matchCustom($action) ) { diff --git a/framework/yii/web/HttpCache.php b/framework/yii/web/HttpCache.php index 0a3bb86..5b7682d 100644 --- a/framework/yii/web/HttpCache.php +++ b/framework/yii/web/HttpCache.php @@ -60,7 +60,7 @@ class HttpCache extends ActionFilter */ public function beforeAction($action) { - $verb = Yii::$app->request->getRequestMethod(); + $verb = Yii::$app->request->getMethod(); if ($verb !== 'GET' && $verb !== 'HEAD' || $this->lastModified === null && $this->etagSeed === null) { return true; } diff --git a/framework/yii/web/Request.php b/framework/yii/web/Request.php index a857926..9b1e91c 100644 --- a/framework/yii/web/Request.php +++ b/framework/yii/web/Request.php @@ -49,7 +49,7 @@ class Request extends \yii\base\Request /** * @var string|boolean the name of the POST parameter that is used to indicate if a request is a PUT or DELETE * request tunneled through POST. Default to '_method'. - * @see getRequestMethod + * @see getMethod * @see getRestParams */ public $restVar = '_method'; @@ -81,7 +81,7 @@ class Request extends \yii\base\Request * @return string request method, such as GET, POST, HEAD, PUT, DELETE. * The value returned is turned into upper case. */ - public function getRequestMethod() + public function getMethod() { if (isset($_POST[$this->restVar])) { return strtoupper($_POST[$this->restVar]); @@ -96,7 +96,7 @@ class Request extends \yii\base\Request */ public function getIsPostRequest() { - return $this->getRequestMethod() === 'POST'; + return $this->getMethod() === 'POST'; } /** @@ -105,7 +105,7 @@ class Request extends \yii\base\Request */ public function getIsDeleteRequest() { - return $this->getRequestMethod() === 'DELETE'; + return $this->getMethod() === 'DELETE'; } /** @@ -114,7 +114,7 @@ class Request extends \yii\base\Request */ public function getIsPutRequest() { - return $this->getRequestMethod() === 'PUT'; + return $this->getMethod() === 'PUT'; } /** @@ -141,7 +141,7 @@ class Request extends \yii\base\Request /** * Returns the request parameters for the RESTful request. * @return array the RESTful request parameters - * @see getRequestMethod + * @see getMethod */ public function getRestParams() { @@ -772,7 +772,7 @@ class Request extends \yii\base\Request if (!$this->enableCsrfValidation) { return; } - $method = $this->getRequestMethod(); + $method = $this->getMethod(); if ($method === 'POST' || $method === 'PUT' || $method === 'DELETE') { $cookies = $this->getCookies(); switch ($method) { diff --git a/framework/yii/web/UrlRule.php b/framework/yii/web/UrlRule.php index b1e74da..fc19ea3 100644 --- a/framework/yii/web/UrlRule.php +++ b/framework/yii/web/UrlRule.php @@ -171,7 +171,7 @@ class UrlRule extends Object return false; } - if ($this->verb !== null && !in_array($request->getRequestMethod(), $this->verb, true)) { + if ($this->verb !== null && !in_array($request->getMethod(), $this->verb, true)) { return false; } diff --git a/framework/yii/web/VerbFilter.php b/framework/yii/web/VerbFilter.php index 9b475e3..ca6d47d 100644 --- a/framework/yii/web/VerbFilter.php +++ b/framework/yii/web/VerbFilter.php @@ -76,7 +76,7 @@ class VerbFilter extends Behavior { $action = $event->action->id; if (isset($this->actions[$action])) { - $verb = Yii::$app->getRequest()->getRequestMethod(); + $verb = Yii::$app->getRequest()->getMethod(); $allowed = array_map('strtoupper', $this->actions[$action]); if (!in_array($verb, $allowed)) { $event->isValid = false;