2017-04-05 59 views
2

我喜欢在前端用户所属的BackendUser(一对多关系)中构建一个插件。对于后端用户,我想通过Relation Manager显示部分内容,以将许多前端用户添加到BackendUser。如果我尝试动态定义像Plugin.php属性:

use Backend\Models\User as BackendUser; 
use Backend\Controllers\Users as BackendUsersController; 


public function boot(){  
    BackendUsersController::extend(function($controller) { 
     $controller->implement[] = 'Backend.Behaviors.RelationController'; 
     $controller->relationConfig = '$/plg-user/plg/controllers/plg-ctr/config_relation.yaml' 
    }); 
}); 

我得到一个错误:类后端\控制器\用户必须定义​​;后端\行为\ RelationController行为使用属性$ relationConfig

如果我尝试手动放置:

public $relationConfig = '$/plg-user/plg/controllers/plg-ctr/config_relation.yaml' 

到后端\控制器\用户控制器一切炒作。

任何想法?

回答

3

问题出现是因为任何实现October\Rain\Extension\ExtendableTrait特质的对象(如Users控制器所做的,您可以如何调用::extend())可以防止未声明的属性在第一次赋值时被自动声明。

相反,您必须使用addDynamicProperty($property, $value)方法向对象添加未声明的属性。这是以前没有记录,并记录在octobercms/[email protected]

为您的案子代码示例现在是

/** 
* Extend the BackendUsers controller to include the RelationController behavior 
*/ 
BackendUsersController::extend(function($controller) { 

    // Implement the list controller behavior dynamically 
    $controller->implement[] = 'Backend.Behaviors.RelationController'; 

    // Declare the relationConfig property dynamically for the RelationController behavior to use 
    $controller->addDynamicProperty('relationConfig', '$/plg-user/plg/controllers/plg-ctr/config_relation.yaml'); 
}); 
+0

谢谢sooooo多卢克你的解决方案工作的完美;) – JBee

+0

感谢您更新文档 – Meysam

0

我已经延长完全相同的方式,前端用户控制器和它的工作原理:

UsersController::extend(function($controller){ 
    if(!isset($controller->implement['Backend.Behaviors.RelationController'])) { 
     $controller->implement[] = 'Backend.Behaviors.RelationController'; 
    } 
    $controller->relationConfig = '$/meysam/profile/controllers/profile/config_relations.yaml'; 
}); 

我觉得不同的是,relationConfig已经在前端用户控制器类中定义:

class Users extends Controller 
{ 
    public $implement = [ 
     'Backend.Behaviors.FormController', 
     'Backend.Behaviors.ListController' 
    ]; 

    public $formConfig = 'config_form.yaml'; 
    public $listConfig = 'config_list.yaml'; 
    public $relationConfig; 

public $relationConfig;在后端用户控制器中不存在。解决方法可能是创建自己的后端用户控制器类,该类继承自Backend\Controllers\Users并向其添加public $relationConfig;属性。这可能不是最好的解决方案。

+0

嗨Meysam ....谢谢......我也认为创造我自己的后台用户Controller类是不是最好的解决办法;) ...不可能添加public $ relationConfig;属性动态地添加到Backend \ Controllers \ Users类中? – JBee

+0

@JBee这可能是可能的,我不知道该怎么做,有兴趣知道。 – Meysam

+1

Meysam看到我的回答上面 – LukeTowers

相关问题