改进Think\Tag类的add方法支持批量注册 删除register方法

This commit is contained in:
thinkphp
2013-04-08 20:03:43 +08:00
parent 4669001f2f
commit ae85b1dce1

View File

@@ -14,29 +14,18 @@ class Tag {
static private $tags = [];
/**
* 给某个tag注册行为
* @param string $tag 标签名称
* @param array $behaviors 行为集
* @return void
*/
static public function register($tag,$behaviors) {
if(isset(self::$tags[$tag])) {
self::$tags[$tag] = array_merge(self::$tags[$tag],$behaviors);
}else{
self::$tags[$tag] = $behaviors;
}
}
/**
* 动态添加行为扩展到某个标签
* @param string $tag 标签名称
* @param mixed $behavior 行为名称
* @return void
*/
static public function add($tag,$behavior,$range='') {
$range = $range?$range:ucwords(MODULE_NAME);
self::$tags[$tag][] = [$behavior,$range];
static public function add($tag,$behavior) {
if(is_array($hehavior)) {
self::$tags[$tag] = array_merge(self::$tags[$tag],$hehavior);
}else{
self::$tags[$tag][] = $behavior;
}
}
/**
@@ -55,13 +44,12 @@ class Tag {
* @return void
*/
static public function listen($tag, &$params=NULL) {
Log::record($tag,'INFO');
Debug::remark($tag,'time');
if(isset(self::$tags[$tag])) {
foreach (self::$tags[$tag] as $val) {
Debug::remark($val[0].'start','time');
$result = self::exec($val[0], $params,$val[1]);
Log::record('Run '.$val[0].' Behavior [ RunTime:'.Debug::getUseTime($val[0].'start',$val[0].'end').'s ]','INFO');
Debug::remark('behavior_start','time');
$result = self::exec($val, $params);
Debug::remark('behavior_end','time');
Log::record('Run '.$val.' Behavior [ RunTime:'.Debug::getUseTime('behavior_start','behavior_end').'s ]','INFO');
if(false === $result) {
// 如果返回false 则中断行为执行
return ;
@@ -78,8 +66,12 @@ class Tag {
* @param Mixed $params 传人的参数
* @return void
*/
static public function exec($name, &$params=NULL,$range='') {
$class = '\\'.$range.'\Behavior\\'.$name;
static public function exec($name, &$params=NULL) {
if(false === strpos($name,'\\')) {
$class = '\\'.ucwords(MODULE_NAME).'\\Behavior\\'.$name;
}else{
$class = $name;
}
if(class_exists($class)) {
$behavior = new $class();
return $behavior->run($params);