* @link http://www.pradosoft.com/ * @copyright Copyright © 2005-2014 PradoSoft * @license http://www.pradosoft.com/license/ * @package Prado */ namespace Prado; /** * 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 * @package Prado * @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); } }