Zend Framework教程之Application用法实例详解

2025-05-29 0 44

本文实例讲述了Zend Framework教程之Application用法。分享给大家供大家参考,具体如下:

Zend_ApplicationZend Framework的核心组件。Zend_ApplicationZend Framework应用程序提供基本功能,是程序的入口点。它的主要功能有两个:装载配置PHP环境(包括自动加载),并引导应用程序。

通常情况下,通过配置选项配置Zend_Application构造器,但也可以完全使用自定义方法配置。以下是两个使用用例。

Zend_Application配置选项

构造函数:

?

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
/**

* Constructor

*

* Initialize application. Potentially initializes include_paths, PHP

* settings, and bootstrap class.

*

* @param string $environment

* @param string|array|Zend_Config $options String path to configuration file, or array/Zend_Config of configuration options

* @throws Zend_Application_Exception When invalid options are provided

* @return void

*/

public function __construct($environment, $options = null)

{

$this->_environment = (string) $environment;

require_once 'Zend/Loader/Autoloader.php';

$this->_autoloader = Zend_Loader_Autoloader::getInstance();

if (null !== $options) {

if (is_string($options)) {

$options = $this->_loadConfig($options);

} elseif ($options instanceof Zend_Config) {

$options = $options->toArray();

} elseif (!is_array($options)) {

throw new Zend_Application_Exception('Invalid options provided; must be location of config file, a config object, or an array');

}

$this->setOptions($options);

}

}

Zend_Application配置方法

1.使用配置文件
2.使用配置数组

常见配置选项

Option Description
phpSettings

用于配置php.ini选项,要求是数组,数组的键应该是选项的的key.

includePaths

把附加的路径加入到include_path,要求是数组

autoloaderNamespaces

Zend_Loader_Autoloader注册附加命名空间,为数组

bootstrap

可以是设置bootstrap引导类的路径的字符串,也可以是数组,数组元素要求为 'path' 和 'class'


注意:

选项名称不区分大小写。

Zend_Application的方法

Method Return Value Parameters Description
__construct(
$environment,
$options = null)
Void
  • $environment:必填。 表示当前应用环境的String。

    典型的字符串可能包括 "development", "testing", "qa", or "production",他们必须已经被定义

    对应于配置文件文件中相关章节。

  • $options:可选的,参数类型可能是:

    • String: 指定Zend_Config文件的配置路径.$environment用于指定配置文件的哪一个章节

      从1.10开始,可以设置多个配置文件路径,然后会被合并成一个单一的配置文件。

      这样更灵活,便于重用。

      在这种情况下的key是"config",其值是文件路径数组。

      注:可以是路径字符串,或 array("config"=>array("/path1","/path2"[,…]));.

    • Array: 配置应用的关联数组

    • Zend_Config:配置对象的实例

构造函数。 用于初始化配置对象。 实例化Zend_Loader_Autoloader。

通过传递给构造函数选项然后传递给setOptions()方法。

getEnvironment() String N/A

获取环境配置

getAutoloader() Zend_Loader_Autoloader N/A

获取Zend_Loader_Autoloader实例

setOptions(array $options) Zend_Application
  • $options:必填,要求是数组

所有选项都存储在引用内部,并多次调用该方法来合并选项。

会根据选项生产对于的setter方法。

例如,选项“phpSettings”对应setPhpSettings()。

(选项名称不区分大小写。)

getOptions() Array N/A
hasOption($key) Boolean
  • $key: 判断是发有指定的配置

key不区分大小写。

getOption($key) Mixed
  • $key: 获取指定的配置选项的值

key不区分大小写。如果不存在返回NULL

setPhpSettings(array $settings, $prefix = '') Zend_Application
  • $settings:比填.PHPINI 的配置关联数组.

  • $prefix:可选. 为选项添加前缀

setAutoloaderNamespaces(array $namespaces) Zend_Application
  • $namespaces:必填.

    传递命名空间字符串数组,通过Zend_Loader_Autoloader实例注册

setBootstrap($path, $class = null) Zend_Application
  • $path:必填.

    可能是Zend_Application_Bootstrap_Bootstrapper实例,

    自举类路径字符串,

    格式为classname => filename的关联数组,

    或key为“class”和value为“path”的关联数组。

  • $class:可选. 如果$path是字符串,$class 类名称

getBootstrap() NULL|Zend_Application_Bootstrap_Bootstrapper N/A

获取注册的bootstrap实例.

bootstrap() Void N/A

调用 bootstrap的bootstrap()引导应用.

run() Void N/A

调用bootstrap的run()运行应用

配置举例:

默认:

?

1

2

3

4

5

6

7
// Create application, bootstrap, and run

$application = new Zend_Application(

APPLICATION_ENV,

APPLICATION_PATH . '/configs/application.ini'

);

$application->bootstrap()

->run();

源代码

?

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

119

120

121

122

123

124

125

126

127

128

129

130

131

132

133

134

135

136

137

138

139

140

141

142

143

144

145

146

147

148

149

150

151

152

153

154

155

156

157

158

159

160

161

162

163

164

165

166

167

168

169

170

171

172

173

174

175

176

177

178

179

180

181

182

183

184

185

186

187

188

189

190

191

192

193

194

195

196

197

198

199

200

201

202

203

204

205

206

207

208

209

210

211

212

213

214

215

216

217

218

219

220

221

222

223

224

225

226

227

228

229

230

231

232

233

234

235

236

237

238

239

240

241

242

243

244

245

246

247

248

249

250

251

252

253

254

255

256

257

258

259

260

261

262

263

264

265

266

267

268

269

270

271

272

273

274

275

276

277

278

279

280

281

282

283

284

285

286

287

288

289

290

291

292

293

294

295

296

297

298

299

300

301

302

303

304

305
<?php

class Zend_Application

{ /**

* Constructor

*

* Initialize application. Potentially initializes include_paths, PHP

* settings, and bootstrap class.

*

* @param string $environment

* @param string|array|Zend_Config $options String path to configuration file, or array/Zend_Config of configuration options

* @throws Zend_Application_Exception When invalid options are provided

* @return void

*/

public function __construct($environment, $options = null)

{

$this->_environment = (string) $environment;

require_once 'Zend/Loader/Autoloader.php';

$this->_autoloader = Zend_Loader_Autoloader::getInstance();

if (null !== $options) {

if (is_string($options)) {

$options = $this->_loadConfig($options);

} elseif ($options instanceof Zend_Config) {

$options = $options->toArray();

} elseif (!is_array($options)) {

throw new Zend_Application_Exception('Invalid options provided; must be location of config file, a config object, or an array');

}

$this->setOptions($options);

}

}

/**

* Retrieve current environment

*

* @return string

*/

public function getEnvironment()

{

return $this->_environment;

}

/**

* Retrieve autoloader instance

*

* @return Zend_Loader_Autoloader

*/

public function getAutoloader()

{

return $this->_autoloader;

}

/**

* Set application options

*

* @param array $options

* @throws Zend_Application_Exception When no bootstrap path is provided

* @throws Zend_Application_Exception When invalid bootstrap information are provided

* @return Zend_Application

*/

public function setOptions(array $options)

{

if (!empty($options['config'])) {

if (is_array($options['config'])) {

$_options = array();

foreach ($options['config'] as $tmp) {

$_options = $this->mergeOptions($_options, $this->_loadConfig($tmp));

}

$options = $this->mergeOptions($_options, $options);

} else {

$options = $this->mergeOptions($this->_loadConfig($options['config']), $options);

}

}

$this->_options = $options;

$options = array_change_key_case($options, CASE_LOWER);

$this->_optionKeys = array_keys($options);

if (!empty($options['phpsettings'])) {

$this->setPhpSettings($options['phpsettings']);

}

if (!empty($options['includepaths'])) {

$this->setIncludePaths($options['includepaths']);

}

if (!empty($options['autoloadernamespaces'])) {

$this->setAutoloaderNamespaces($options['autoloadernamespaces']);

}

if (!empty($options['autoloaderzfpath'])) {

$autoloader = $this->getAutoloader();

if (method_exists($autoloader, 'setZfPath')) {

$zfPath = $options['autoloaderzfpath'];

$zfVersion = !empty($options['autoloaderzfversion'])

? $options['autoloaderzfversion']

: 'latest';

$autoloader->setZfPath($zfPath, $zfVersion);

}

}

if (!empty($options['bootstrap'])) {

$bootstrap = $options['bootstrap'];

if (is_string($bootstrap)) {

$this->setBootstrap($bootstrap);

} elseif (is_array($bootstrap)) {

if (empty($bootstrap['path'])) {

throw new Zend_Application_Exception('No bootstrap path provided');

}

$path = $bootstrap['path'];

$class = null;

if (!empty($bootstrap['class'])) {

$class = $bootstrap['class'];

}

$this->setBootstrap($path, $class);

} else {

throw new Zend_Application_Exception('Invalid bootstrap information provided');

}

}

return $this;

}

/**

* Retrieve application options (for caching)

*

* @return array

*/

public function getOptions()

{

return $this->_options;

}

/**

* Is an option present?

*

* @param string $key

* @return bool

*/

public function hasOption($key)

{

return in_array(strtolower($key), $this->_optionKeys);

}

/**

* Retrieve a single option

*

* @param string $key

* @return mixed

*/

public function getOption($key)

{

}

/**

* Merge options recursively

*

* @param array $array1

* @param mixed $array2

* @return array

*/

public function mergeOptions(array $array1, $array2 = null)

{

if (is_array($array2)) {

foreach ($array2 as $key => $val) {

if (is_array($array2[$key])) {

$array1[$key] = (array_key_exists($key, $array1) && is_array($array1[$key]))

? $this->mergeOptions($array1[$key], $array2[$key])

: $array2[$key];

} else {

$array1[$key] = $val;

}

}

}

return $array1;

}

/**

* Set PHP configuration settings

*

* @param array $settings

* @param string $prefix Key prefix to prepend to array values (used to map . separated INI values)

* @return Zend_Application

*/

public function setPhpSettings(array $settings, $prefix = '')

{

foreach ($settings as $key => $value) {

$key = empty($prefix) ? $key : $prefix . $key;

if (is_scalar($value)) {

ini_set($key, $value);

} elseif (is_array($value)) {

$this->setPhpSettings($value, $key . '.');

}

}

return $this;

}

/**

* Set include path

*

* @param array $paths

* @return Zend_Application

*/

public function setIncludePaths(array $paths)

{

$path = implode(PATH_SEPARATOR, $paths);

set_include_path($path . PATH_SEPARATOR . get_include_path());

return $this;

}

/**

* Set autoloader namespaces

*

* @param array $namespaces

* @return Zend_Application

*/

public function setAutoloaderNamespaces(array $namespaces)

{

$autoloader = $this->getAutoloader();

foreach ($namespaces as $namespace) {

$autoloader->registerNamespace($namespace);

}

return $this;

}

/**

* Set bootstrap path/class

*

* @param string $path

* @param string $class

* @return Zend_Application

*/

public function setBootstrap($path, $class = null)

{

// setOptions() can potentially send a null value; specify default

// here

if (null === $class) {

$class = 'Bootstrap';

}

if (!class_exists($class, false)) {

require_once $path;

if (!class_exists($class, false)) {

throw new Zend_Application_Exception('Bootstrap class not found');

}

}

$this->_bootstrap = new $class($this);

if (!$this->_bootstrap instanceof Zend_Application_Bootstrap_Bootstrapper) {

throw new Zend_Application_Exception('Bootstrap class does not implement Zend_Application_Bootstrap_Bootstrapper');

}

return $this;

}

/**

* Get bootstrap object

*

* @return Zend_Application_Bootstrap_BootstrapAbstract

*/

public function getBootstrap()

{

if (null === $this->_bootstrap) {

$this->_bootstrap = new Zend_Application_Bootstrap_Bootstrap($this);

}

return $this->_bootstrap;

}

/**

* Bootstrap application

*

* @param null|string|array $resource

* @return Zend_Application

*/

public function bootstrap($resource = null)

{

$this->getBootstrap()->bootstrap($resource);

return $this;

}

/**

* Run the application

*

* @return void

*/

public function run()

{

$this->getBootstrap()->run();

}

/**

* Load configuration file of options

*

* @param string $file

* @throws Zend_Application_Exception When invalid configuration file is provided

* @return array

*/

protected function _loadConfig($file)

{

$environment = $this->getEnvironment();

$suffix = pathinfo($file, PATHINFO_EXTENSION);

$suffix = ($suffix === 'dist')

? pathinfo(basename($file, ".$suffix"), PATHINFO_EXTENSION)

: $suffix;

switch (strtolower($suffix)) {

case 'ini':

$config = new Zend_Config_Ini($file, $environment);

break;

case 'xml':

$config = new Zend_Config_Xml($file, $environment);

break;

case 'json':

$config = new Zend_Config_Json($file, $environment);

break;

case 'yaml':

case 'yml':

$config = new Zend_Config_Yaml($file, $environment);

break;

case 'php':

case 'inc':

$config = include $file;

if (!is_array($config)) {

throw new Zend_Application_Exception('Invalid configuration file provided; PHP file does not return array value');

}

return $config;

break;

default:

throw new Zend_Application_Exception('Invalid configuration file provided; unknown config type');

}

return $config->toArray();

}

}

希望本文所述对大家PHP程序设计有所帮助。

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

快网idc优惠网 建站教程 Zend Framework教程之Application用法实例详解 https://www.kuaiidc.com/98392.html

相关文章

发表评论
暂无评论