1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
|
<?php
/**
* TApplicationComponent class
*
* @author Qiang Xue <qiang.xue@gmail.com>
* @link http://www.pradosoft.com/
* @copyright Copyright © 2005-2013 PradoSoft
* @license http://www.pradosoft.com/license/
* @version $Id: TApplicationComponent.php 3245 2013-01-07 20:23:32Z ctrlaltca $
* @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>
* @version $Id: TApplicationComponent.php 3245 2013-01-07 20:23:32Z ctrlaltca $
* @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)
{
return Prado::getApplication()->getAssetManager()->publishFilePath($fullPath);
}
}
|