jake大大,有没有办法定个全局常量所有模板都能使用的

#1 晴天再现

我认真看了教程,好像只能放在action里面用啊。。。

怎么定义一个全局常量

2016-11-05 17:49:50

#2 晴天再现

或者在模板中怎么写当前项目路径

2016-11-05 17:54:36

#3 SunPDZH

init()或者直接构造函数就可以全局使用了
当然是当前模块的全局
如果想整个框架都能用上,去Controller父类的构造函数下加,不过这个不推荐

2016-11-07 12:48:34

#4 寒夜逍遥

可能直接 define 一个常量更简单(粗暴)

2016-11-07 16:34:18

#5 jake

楼上正解,在控制器的init函数里面定义常量,就可以在任意地方使用了。

或者在config.php文件里面定义也行。

2016-11-08 08:46:24

#6 晴天再现

jake 发表于 2016-11-8 08:46
楼上正解,在控制器的init函数里面定义常量,就可以在任意地方使用了。

或者在config.php文件里面定义也行 ...
原谅我是新手,我看教程常量使用

$this->constant = get_defined_constants(true)['user'];这个怎么写能在config.php中使用。。。

2016-11-10 11:44:30

#7 晴天再现

SunPDZH 发表于 2016-11-7 12:48
init()或者直接构造函数就可以全局使用了
当然是当前模块的全局
如果想整个框架都能用上,去Controller父类 ...
为什么不推荐。。。有什么弊端吗全局常量。

那你们都是怎么解决这种问题,取项目路径。

2016-11-10 11:46:02

#8 jake

常量是define("CONSTANT", "Hello world.");类似这样的。

你可以在config.php文件里面定义,然后在控制器里面用

$this->constant  = CONSTANT;

就行。

之所以不推荐在控制器构造函数里面用,是因为新版框架控制器有个init()方法,是专门用于全局初始化的,它的作用相当于构造函数,可以直接用于定义常量之类的。

因为控制器的构造函数,还负责一些别的初始化功能,包括view等,如果直接覆盖了构造函数,那么会导致一些不必要的问题,所以单独抽了一个init方法出来给做初始化。

2016-11-10 12:11:46

#9 晴天再现

jake 发表于 2016-11-10 12:11
常量是define("CONSTANT", "Hello world.");类似这样的。

你可以在config.php文件里面定义,然后在控制器 ...
用init也就是说不能全局了吧,必须在每一个模块的base写读常量的函数

2016-11-10 12:20:02

#10 寒夜逍遥

明白你的意思了,你要求定义的常量在任何类任何函数中都能用吧,这样在config文件中定义是最方便的了,

define("CONSTANT", "Hello world.");

在任何地方需要使用,如:echo CONSTANT;这样就行了。

就你这句: $this->constant = get_defined_constants(true)['user'];
完全是绕圈子了,本来就是全局常量到处能用,还要赋给本类的变量 $constant 再用?
本来就能直接用定义的全局名称,如 CONSTANT,何必再用一个函数get_defined_constants 取一下呢?

2016-11-10 13:25:33

#11 jake

晴天再现 发表于 2016-11-10 12:20
用init也就是说不能全局了吧,必须在每一个模块的base写读常量的函数
init不是你意思中的全局。

大概这样说吧:

config.php定义的常量是全部文件都能用,任意module,任意控制器。

而某个module下面的BaseController的init方法里面定义的,就是这个module里面用的。

而单个控制器的init里面定义的,就是单个控制器里面用的。


2016-11-10 13:54:24

#12 晴天再现

寒夜逍遥 发表于 2016-11-10 13:25
明白你的意思了,你要求定义的常量在任何类任何函数中都能用吧,这样在config文件中定义是最方便的了,

de ...
我要在模板里用,有什么好方法吗

2016-11-10 15:00:28

#13 晴天再现

jake 发表于 2016-11-10 13:54
init不是你意思中的全局。

大概这样说吧:
模板里用常量有什么好方法吗,我用smarty的语法不行

2016-11-10 15:53:08

#14 jake

晴天再现 发表于 2016-11-10 15:53
模板里用常量有什么好方法吗,我用smarty的语法不行
$this->constant  = CONSTANT;

看看手册https://github.com/SpeedPHP/manu ... 6%96%B9%E6%B3%95.md

手册那地方之前笔误,现在改回来了,抱歉!

2016-11-10 16:17:12

#15 晴天再现

jake 发表于 2016-11-10 16:17
$this->constant  = CONSTANT;

看看手册https://github.com/SpeedPHP/manual/blob/master/%E8%AE%BF%E9%9 ...
1楼我就是问的这个啊,这个写法怎么全局

2016-11-10 16:21:14

#16 晴天再现

jake 发表于 2016-11-10 16:17
$this->constant  = CONSTANT;

看看手册https://github.com/SpeedPHP/manu ... 6%96%B9%E6%B3%95.md
难道用全局变量把常量放进去

2016-11-10 16:22:23

#17 jake

晴天再现 发表于 2016-11-10 16:22
难道用全局变量把常量放进去
就放BaseController吧,如果你有一万个module,在BaseController传一万次就行。

2016-11-10 16:23:03

#18 晴天再现

jake 发表于 2016-11-10 16:23
就放BaseController吧,如果你有一万个module,在BaseController传一万次就行。
明白了

2016-11-10 16:29:27

#19 寒夜逍遥

越搞越复杂了,view中不是有个assign方法吗?
控制器里 $this->_v->assign('val', MY_CONSTANT);
模板中就能 <{ $val }>
而且这样都不一定要常量了。

2016-11-10 22:43:30