Cakephp:在组件中加载组件

fae0ux8s  于 2023-01-30  发布在  PHP
关注(0)|答案(3)|浏览(152)

在app_controller. php中加载会话、身份验证组件。
在posts_controller. php中,我使用了自定义组件和$components = array('Session','Auth');
那么CustomComponent是否必须重新加载会话、身份验证组件?
如果我使用和创建了很多组件,而这些组件又使用了其他组件。这会使应用程序非常慢吗?
我问在cakephp IRC,一个人回答是不是:
[11:05]它不会慢,我相信它通过引用传递那些周围
[11:05]所以你没有什么可担心的

piok6c0g

piok6c0g1#

假设您要将BComponent导入AComponent。
A组件

class AComponent extends Component {
     public $components = array('BComponent');

     public function xyz(){
           $test = $this->BComponent->abc($name);
           echo $test;
     }
}

B组件

class BComponent extends Component {

     public function abc($name){
           return "My name is: ". $name;
     }
}
xmjla07d

xmjla07d2#

是的,它需要是$components = array('Session','Auth','Custom');或者您可以用途:App::import('Component', 'Custom');$Custom = new CustomComponent();
Then do CustomComponent must reload Session, Auth components?如果您没有在CustomComponent类中使用Session或Auth,则不可以。
It will make app is very slow?不,除非你使用了大量的组件。

4c8rllxm

4c8rllxm3#

我在这里尝试了另一个答案,但这是唯一对我有效的方法
假设我们有两个组件
1 -集成组件
2 -过程组件
我们希望在ProcessComponent中使用IntegrationsComponent,因此在最后一个组件中,我们必须使用以下方式调用该组件

App::uses('ComponentCollection', 'Controller');
App::uses('Controller', 'Controller');
App::uses('IntegrationsComponent', 'Controller/Component'); 

class ProcessComponent extends Component {

// Method of this component where we call another component method inside of it
    
public function methodForCallingAnotherComponent() {
    
    // Initialize component
      
    $collection = new ComponentCollection();
    $this->IntegrationsComponent = new IntegrationsComponent($collection);
    
    // You can pass properties' component if it has
    
    $this->IntegrationsComponent->create = false;
    $this->IntegrationsComponent->type = 'UPDATE_PRODUCT';
                    
    // Call method of the component
    $this->IntegrationsComponent->ecommercePublish();
    
    }
    
}

相关问题