diff --git a/framework/base/Module.php b/framework/base/Module.php index 4c0fe08..2d90785 100644 --- a/framework/base/Module.php +++ b/framework/base/Module.php @@ -9,6 +9,8 @@ namespace yii\base; +use yii\util\FileHelper; + /** * Module is the base class for module and application classes. * @@ -192,12 +194,7 @@ abstract class Module extends Component implements Initable */ public function setBasePath($path) { - $p = \Yii::getAlias($path); - if ($p === false || !is_dir($p)) { - throw new Exception('Invalid base path: ' . $path); - } else { - $this->_basePath = realpath($p); - } + $this->_basePath = FileHelper::ensureDirectory($path); } /** @@ -222,12 +219,7 @@ abstract class Module extends Component implements Initable */ public function setControllerPath($path) { - $p = \Yii::getAlias($path); - if ($p === false || !is_dir($p)) { - throw new Exception('Invalid controller path: ' . $path); - } else { - $this->_controllerPath = realpath($p); - } + $this->_controllerPath = FileHelper::ensureDirectory($path); } /** @@ -244,15 +236,13 @@ abstract class Module extends Component implements Initable } /** + * Sets the directory that contains the view files. * @param string $path the root directory of view files. - * @throws CException if the directory does not exist. + * @throws Exception if the directory is invalid */ public function setViewPath($path) { - if (($this->_viewPath = realpath($path)) === false || !is_dir($this->_viewPath)) { - throw new CException(Yii::t('yii', 'The view path "{path}" is not a valid directory.', - array('{path}' => $path))); - } + $this->_viewPath = FileHelper::ensureDirectory($path); } /** @@ -269,15 +259,13 @@ abstract class Module extends Component implements Initable } /** + * Sets the directory that contains the layout files. * @param string $path the root directory of layout files. - * @throws CException if the directory does not exist. + * @throws Exception if the directory is invalid */ public function setLayoutPath($path) { - if (($this->_layoutPath = realpath($path)) === false || !is_dir($this->_layoutPath)) { - throw new CException(Yii::t('yii', 'The layout path "{path}" is not a valid directory.', - array('{path}' => $path))); - } + $this->_layoutPath = FileHelper::ensureDirectory($path); } /** diff --git a/framework/util/FileHelper.php b/framework/util/FileHelper.php index c7b7bb3..7b15089 100644 --- a/framework/util/FileHelper.php +++ b/framework/util/FileHelper.php @@ -9,6 +9,8 @@ namespace yii\util; +use yii\base\Exception; + /** * Filesystem helper * @@ -30,6 +32,24 @@ class FileHelper } /** + * Checks the given path and ensures it is a directory. + * This method will call `realpath()` to "normalize" the given path. + * If the given path does not refer to an existing directory, an exception will be thrown. + * @param string $path the given path. This can also be a path alias. + * @return string the normalized path + * @throws Exception if the path does not refer to an existing directory. + */ + public static function ensureDirectory($path) + { + $p = \Yii::getAlias($path); + if ($p !== false && ($p = realpath($p)) !== false && is_dir($p)) { + return $p; + } else { + throw new Exception('Directory does not exist: ' . $path); + } + } + + /** * Returns the localized version of a specified file. * * The searching is based on the specified language code. In particular,