十月CMS-扩展插件的功能?

问题描述

我创建了一个插件来扩展User插件,现在我想扩展其控制器的更新功能
其实我想做的是在管理员时检查一些数据 单击“更新”按钮,然后根据数据,让管理员照常编辑用户表单或将其重定向用户列表。
我正在尝试通过插件中的路由来做到这一点:

Route::get('backend/rainlab/user/users/update/{id}','\RainLab\User\Controllers\Users@check_update');

在我的Plugin.PHP文件

 public function boot()
 {

     \RainLab\User\Controllers\Users::extend( function($controller) {
         $controller->addDynamicmethod('check_update',function($recordId = null,$context = null) use ($controller) {

              return $controller->asExtension('FormController')->update($recordId,$context);
         });

     });
  }

但是我得到了空白页。用户表单未显示
有人可以帮我吗?

解决方法

这将无法工作,因为它将break life-cycle of back-end并直接指向call method of controller

作为其他解决方案,我们可以使用事件:)-backend.page.beforeDisplay

在插件的plugin.php文件的引导方法中

public function boot() {
    \Event::listen('backend.page.beforeDisplay',function($controller,$action,$params) {
        if($controller instanceof \RainLab\User\Controllers\Users) {
            // for update action
            if($action === 'update') {
                // check data ($params) and make decision based on that
                // allow user to edit or NOT
                if(true) {
                    // just redirect him to somewhere else
                    \Flash::error('Please No.');
                    return \Redirect::to('/backend/rainlab/user/users');
                }

                // if all good don't return anything and it will work as normal
            }
       }
    });
}

它将根据您可以允许用户进行编辑或不进行编辑的条件(将消息重定向到其他操作)进行操作。

如有任何疑问,请发表评论。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...