联系官方销售客服

1835022288

028-61286886

求助 版主:官方研发技术组
钩子里面引用类该如何去引用我要用方法如何去使用不能直接用要引
类型:迅睿CMS 更新时间:2020-06-12 10:36:20 钩子

钩子里面引用类,该如何去引用,我要用save方法,如何去使用?$this不能直接用要引用类才行

回帖
  • #1楼    迅睿框架创始人
    2020-06-11 08:54:11
    Chrome 1
    钩子是一个独立的程序体,不能有this,需要做如下替换

    $this模型类的话,全局是:\Phpcmf\Service::M()

    $this模板类的话,全局是:\Phpcmf\Service::V()

    $this控制器的话,全局是:\Phpcmf\Service::C()

  • 琉惗
    #2楼    琉惗
    2020-06-11 08:56:05
    Chrome 0
    回复迅睿框架创始人那要用save方法该怎么用呢
    image
  • #3楼    迅睿框架创始人
    2020-06-11 08:57:14
    Chrome 0
    this改为 \Phpcmf\Service::C()
  • 琉惗
    #4楼    琉惗
    2020-06-11 09:12:40
    Chrome 0
    \Phpcmf\Service::C()->model = 'work';
    \Phpcmf\Service::C()->content_model = \Phpcmf\Service::M('Content', \Phpcmf\Service::C()->model);
    if (!empty($old['id'])){
        \Phpcmf\Service::C()->content_model->save($old['id'],$data,$old);
    }else{
        \Phpcmf\Service::C()->content_model->save(0,$data,0);
    }
    这样吗。这样还是报错
  • 琉惗
    #5楼    琉惗
    2020-06-11 09:13:32
    Chrome 0
    <?php defined('SYSTEMPATH') || exit('No direct script access allowed'); ?>
    
    CRITICAL - 2020-06-11 08:50:46 --> Cannot re-assign $this
    # http://work.cc/admin.php?s=work&c=home&m=edit&id=11
    # 
    #0 [internal function]: CodeIgniter\Debug\Exceptions->shutdownHandler()
    #1 {main}
    ERROR - 2020-06-11 08:51:33 --> 类文件:Fcms/Model/Work.php不存在
    这个是错误日志
  • #6楼    迅睿框架创始人
    2020-06-11 09:17:09
    Chrome 0
    \Phpcmf\Service::C()->model = 'work';
    \Phpcmf\Service::C()->content_model = \Phpcmf\Service::M('Content', \Phpcmf\Service::C()->model);
    改成
     \Phpcmf\Service::C()->_module_init("work");
  • 琉惗
    #7楼    琉惗
    2020-06-11 09:33:04
    Chrome 0
    回复迅睿框架创始人
    CRITICAL - 2020-06-11 09:32:17 --> Call to a member function save() on null
    # http://work.cc/admin.php?s=work&c=home&m=edit&id=11
    # UPDATE `xxk_1_work` SET `url` = '/index.php?c=show&id=11'
    WHERE `id` = 11
    #0 [internal function]: Phpcmf\Hooks::{closure}(Array, Array)
    #1 E:\phpstudy_pro\WWW\syywork\dayrui\System\Events\Events.php(188): call_user_func(Object(Closure), Array, Array)
    #2 E:\phpstudy_pro\WWW\syywork\dayrui\Fcms\Model\Content.php(349): CodeIgniter\Events\Events::trigger('module_content_...', Array, Array)
    #3 E:\phpstudy_pro\WWW\syywork\dayrui\Fcms\Core\Table.php(219): Phpcmf\Model\Content->save(11, Array, Array)
    #4 E:\phpstudy_pro\WWW\syywork\dayrui\Fcms\Control\Admin\Module.php(1192): Phpcmf\Table->_Save(11, Array, Array, Object(Closure), Object(Closure))
    #5 E:\phpstudy_pro\WWW\syywork\dayrui\Fcms\Core\Table.php(338): Phpcmf\Admin\Module->_Save(11, Array, Array)
    #6 E:\phpstudy_pro\WWW\syywork\dayrui\Fcms\Control\Admin\Module.php(178): Phpcmf\Table->_Post(11, Array)
    #7 E:\phpstudy_pro\WWW\syywork\dayrui\App\Work\Controllers\Admin\Home.php(19): Phpcmf\Admin\Module->_Admin_Edit()
    #8 E:\phpstudy_pro\WWW\syywork\dayrui\System\CodeIgniter.php(914): Phpcmf\Controllers\Admin\Home->edit()
    #9 E:\phpstudy_pro\WWW\syywork\dayrui\System\CodeIgniter.php(400): CodeIgniter\CodeIgniter->runController(Object(Phpcmf\Controllers\Admin\Home))
    #10 E:\phpstudy_pro\WWW\syywork\dayrui\System\CodeIgniter.php(308): CodeIgniter\CodeIgniter->handleRequest(NULL, Object(Config\Cache), false)
    #11 E:\phpstudy_pro\WWW\syywork\dayrui\Fcms\Init.php(337): CodeIgniter\CodeIgniter->run()
    #12 E:\phpstudy_pro\WWW\syywork\index.php(47): require('E:\\phpstudy_pro...')
    #13 E:\phpstudy_pro\WWW\syywork\admin.php(9): require('E:\\phpstudy_pro...')
    #14 {main}
    报这个错误了
    \Phpcmf\Hooks::on('module_content_after', function($data, $old) {
    
        if ($old[1]['state'] == 1){
            $data[1]['updatetime'] = null;
        }else{
            $data[1]['updatetime'] = strtotime(time());
        }
        $t = \Phpcmf\Service::C()->_module_init("work");
        if (!empty($old['id'])){
            $t->save($old['id'],$data,$old);
        }else{
            $t->save(0,$data,0);
        }
    });
  • #8楼    迅睿框架创始人
    2020-06-11 09:39:51
    Chrome 0
    下面不变,只便我给你你的两行,你自作聪明了
    image
  • 琉惗
    #9楼    琉惗
    2020-06-11 09:40:48
    Chrome 0
    $this->model = $catename[0]['mid'];
    $this->content_model = \Phpcmf\Service::M('Content', $this->model);
    $this->_module_init($this->model, SITE_ID, $this->module['share']);
    $this->content_model->save(0,$add,0)
    这四句话要在钩子里面用的话,应该怎么改一下呢,就是数据保存这个方法save()
    回复迅睿框架创始人
  • 琉惗
    #10楼    琉惗
    2020-06-11 09:43:50
    Chrome 0
    回复迅睿框架创始人
    \Phpcmf\Hooks::on('module_content_after', function($data, $old) {
    
        if ($old[1]['state'] == 1){
            $data[1]['updatetime'] = null;
        }else{
            $data[1]['updatetime'] = strtotime(time());
        }
        \Phpcmf\Service::C()->_module_init("work");
        if (!empty($old['id'])){
            \Phpcmf\Service::C()->content_model->save($old['id'],$data,$old);
        }else{
            \Phpcmf\Service::C()->content_model->save(0,$data,0);
        }
    });

    image
    一直都是这样,发布出去
  • 琉惗
    #11楼    琉惗
    2020-06-11 09:45:12
    Chrome 0

    image
  • 琉惗
    #12楼    琉惗
    2020-06-11 09:45:46
    Chrome 0
    琉惗
    CRITICAL - 2020-06-11 09:32:17 --> Call to a member function save() on null
    # http://work.cc/admin.php?s=work&c=home&m=edit&id=11
    # UPDATE `xxk_1_work` SET `url` = '/index.php?c=show&id=11'
    WHERE `id` = 11
    #0 [internal function]: Phpcmf\Hooks::{closure}(Array, Array)
    #1 E:\phpstudy_pro\WWW\syywork\dayrui\System\Events\Events.php(188): call_user_func(Object(Closure), Array, Array)
    #2 E:\phpstudy_pro\WWW\syywork\dayrui\Fcms\Model\Content.php(349): CodeIgniter\Events\Events::trigger('module_content_...', Array, Array)
    #3 E:\phpstudy_pro\WWW\syywork\dayrui\Fcms\Core\Table.php(219): Phpcmf\Model\Content->save(11, Array, Array)
    #4 E:\phpstudy_pro\WWW\syywork\dayrui\Fcms\Control\Admin\Module.php(1192): Phpcmf\Table->_Save(11, Array, Array, Object(Closure), Object(Closure))
    #5 E:\phpstudy_pro\WWW\syywork\dayrui\Fcms\Core\Table.php(338): Phpcmf\Admin\Module->_Save(11, Array, Array)
    #6 E:\phpstudy_pro\WWW\syywork\dayrui\Fcms\Control\Admin\Module.php(178): Phpcmf\Table->_Post(11, Array)
    #7 E:\phpstudy_pro\WWW\syywork\dayrui\App\Work\Controllers\Admin\Home.php(19): Phpcmf\Admin\Module->_Admin_Edit()
    #8 E:\phpstudy_pro\WWW\syywork\dayrui\System\CodeIgniter.php(914): Phpcmf\Controllers\Admin\Home->edit()
    #9 E:\phpstudy_pro\WWW\syywork\dayrui\System\CodeIgniter.php(400): CodeIgniter\CodeIgniter->runController(Object(Phpcmf\Controllers\Admin\Home))
    #10 E:\phpstudy_pro\WWW\syywork\dayrui\System\CodeIgniter.php(308): CodeIgniter\CodeIgniter->handleRequest(NULL, Object(Config\Cache), false)
    #11 E:\phpstudy_pro\WWW\syywork\dayrui\Fcms\Init.php(337): CodeIgniter\CodeIgniter->run()
    #12 E:\phpstudy_pro\WWW\syywork\index.php(47): require('E:\\phpstudy_pro...')
    #13 E:\phpstudy_pro\WWW\syywork\admin.php(9): require('E:\\phpstudy_pro...')
    #14 {main}
  • #13楼    迅睿框架创始人
    2020-06-11 09:46:45
    Chrome 0
    这样就死循环了,你这么做是干什么的,没看懂你的程序意图
  • 琉惗
    #14楼    琉惗
    2020-06-11 09:49:14
    Chrome 0
    回复迅睿框架创始人我就要在发布内容的时候,根据一个字段去给自动更新时间,如果那个字段状态是1就让更新时间为空,如果字段状态为2那就让时间为当前时间
  • #15楼    迅睿框架创始人
    2020-06-11 09:52:09
    Chrome 0
    那你走的太远了,一句话sql就可以搞定
    \Phpcmf\Hooks::on('module_content_after', function($data, $old) {
    
        \Phpcmf\Service::M()->table_site(MOD_DIR)->update($data[1]['id'], [
            "主表字段" => "新值",
        ])
    });
  • 琉惗
    #16楼    琉惗
    2020-06-11 09:53:32
    Chrome 0
    回复迅睿框架创始人哦,那我要在钩子里面用完整的save方法,应该怎么用呢,还有我要判断当前用户是不是超级管理员,这个怎么判断呢?
  • #17楼    迅睿框架创始人
    2020-06-11 09:58:32
    Chrome 0
    钩子里面不能写save,写了就是你上面的情况,无线死循环if (in_array(1, \Phpcmf\Service::C->admin['roleid'])) { 是草鸡管理员
    }
  • 琉惗
    #18楼    琉惗
    2020-06-11 10:33:20
    Chrome 0
    回复迅睿框架创始人
    \Phpcmf\Hooks::on('module_content_after', function($data, $old) {
        if ($data[1]['state'] == 1){
            $date['time'] = ' ';
        }else{
            $date['time'] = time();
        }
        \Phpcmf\Service::M()->table(SITE_ID.'_work')->update($old['id'], ['updatetime' => $date['time']]);
    });
    老大,这样的话,只能是在更新的时候,把时间改了,如果添加的时候还是默认有时间,我不想他默认有时间,这个怎么做?
  • #19楼    迅睿框架创始人
    2020-06-11 10:36:07
    Chrome 1
    \Phpcmf\Hooks::on('module_content_after', function($data, $old) {
        if ($data[1]['state'] == 1){
            $date['time'] = ' ';
        }else{
            $date['time'] = time();
        }
        \Phpcmf\Service::M()->table(SITE_ID.'_work')->update($data[1]['id'], ['updatetime' => $date['time']]);
    });
    这样就行了,新增、修改都执行
    满意答案
  • 琉惗
    #20楼    琉惗
    2020-06-11 10:38:22
    Chrome 0
    哦,对哦,这个给我整蒙逼了,直接就
  • 琉惗
    #21楼    琉惗
    2020-06-12 10:36:20
    Chrome 0
    迅睿框架创始人:都弄好了,谢谢老大