summaryrefslogtreecommitdiff
path: root/lib/prado/framework/TApplicationComponent.php
diff options
context:
space:
mode:
Diffstat (limited to 'lib/prado/framework/TApplicationComponent.php')
-rw-r--r--lib/prado/framework/TApplicationComponent.php116
1 files changed, 116 insertions, 0 deletions
diff --git a/lib/prado/framework/TApplicationComponent.php b/lib/prado/framework/TApplicationComponent.php
new file mode 100644
index 0000000..d58c74c
--- /dev/null
+++ b/lib/prado/framework/TApplicationComponent.php
@@ -0,0 +1,116 @@
+<?php
+/**
+ * TApplicationComponent class
+ *
+ * @author Qiang Xue <qiang.xue@gmail.com>
+ * @link https://github.com/pradosoft/prado
+ * @copyright Copyright &copy; 2005-2015 The PRADO Group
+ * @license https://github.com/pradosoft/prado/blob/master/COPYRIGHT
+ * @package System
+ */
+
+/**
+ * TApplicationComponent class
+ *
+ * TApplicationComponent is the base class for all components that are
+ * application-related, such as controls, modules, services, etc.
+ *
+ * TApplicationComponent mainly defines a few properties that are shortcuts
+ * to some commonly used methods. The {@link getApplication Application}
+ * property gives the application instance that this component belongs to;
+ * {@link getService Service} gives the current running service;
+ * {@link getRequest Request}, {@link getResponse Response} and {@link getSession Session}
+ * return the request and response modules, respectively;
+ * And {@link getUser User} gives the current user instance.
+ *
+ * Besides, TApplicationComponent defines two shortcut methods for
+ * publishing private files: {@link publishAsset} and {@link publishFilePath}.
+ *
+ * @author Qiang Xue <qiang.xue@gmail.com>
+ * @package System
+ * @since 3.0
+ */
+class TApplicationComponent extends TComponent
+{
+ /**
+ * @return TApplication current application instance
+ */
+ public function getApplication()
+ {
+ return Prado::getApplication();
+ }
+
+ /**
+ * @return IService the current service
+ */
+ public function getService()
+ {
+ return Prado::getApplication()->getService();
+ }
+
+ /**
+ * @return THttpRequest the current user request
+ */
+ public function getRequest()
+ {
+ return Prado::getApplication()->getRequest();
+ }
+
+ /**
+ * @return THttpResponse the response
+ */
+ public function getResponse()
+ {
+ return Prado::getApplication()->getResponse();
+ }
+
+ /**
+ * @return THttpSession user session
+ */
+ public function getSession()
+ {
+ return Prado::getApplication()->getSession();
+ }
+
+ /**
+ * @return IUser information about the current user
+ */
+ public function getUser()
+ {
+ return Prado::getApplication()->getUser();
+ }
+
+ /**
+ * Publishes a private asset and gets its URL.
+ * This method will publish a private asset (file or directory)
+ * and gets the URL to the asset. Note, if the asset refers to
+ * a directory, all contents under that directory will be published.
+ * Also note, it is recommended that you supply a class name as the second
+ * parameter to the method (e.g. publishAsset($assetPath,__CLASS__) ).
+ * By doing so, you avoid the issue that child classes may not work properly
+ * because the asset path will be relative to the directory containing the child class file.
+ *
+ * @param string path of the asset that is relative to the directory containing the specified class file.
+ * @param string name of the class whose containing directory will be prepend to the asset path. If null, it means get_class($this).
+ * @return string URL to the asset path.
+ */
+ public function publishAsset($assetPath,$className=null)
+ {
+ if($className===null)
+ $className=get_class($this);
+ $class=new ReflectionClass($className);
+ $fullPath=dirname($class->getFileName()).DIRECTORY_SEPARATOR.$assetPath;
+ return $this->publishFilePath($fullPath);
+ }
+
+ /**
+ * Publishes a file or directory and returns its URL.
+ * @param string absolute path of the file or directory to be published
+ * @return string URL to the published file or directory
+ */
+ public function publishFilePath($fullPath, $checkTimestamp=false)
+ {
+ return Prado::getApplication()->getAssetManager()->publishFilePath($fullPath, $checkTimestamp);
+ }
+}
+