Объекты и классы в своём модуле Drupal 7

Главные вкладки

Аватар пользователя long.skinny.boy long.skinny.boy 30 декабря 2021 в 10:13

Добрый день, пытаюсь создать свой модуль на Drupal 7, и столкнулся со сложностями понимания, как использовать свои классы и их объекты

На текущий момент модуль представляет следующее

mymodule.info

<?php
name 
mymodule name
description 
mymodule description
version 
7.x-1.0
core 
7.x
files
[] = mymodule.info
files
[] = mymodule.module
files
[] = mymodule.ldap.inc
?>

mymodule.module


<?php

function mymodule_menu() {
  
$items = array();

  

$items['some-path'] = array(
    
'title' => 'Some title',
    
'page callback' => 'some_page_callback',
    
'type' => MENU_NORMAL_ITEM,
    
'access callback' => TRUE,
  );
  return 
$items;
}

function 

some_page_callback() {
  
$form drupal_get_form('some_form');
  
$form drupal_render($form);
  return 
$form;
}

function 

some_form($form, &$form_state) {

//$new_ldap = new ldap();
//$new_connect = $new_ldap->connect($ldap->ldapserver, $ldap->ldapport);

  

$form = array();
  
$form['submit'] = array(
    
'#type' => 'submit',
    
'#value' => t('Submit'),
  );  

  return 

$form;
}
?>

mymodule.ldap.inc


<?php 

class ldap {

  public  

$ldapserver "0.0.0.0";
  public  
$ldapport "389";
  public  
$basedn "CN=service_user,DC=ad,DC=ad";
  public  
$basepass "password";

  public static function 

connect($server,$port) {
    
$connection ldap_connect($server,$port);
    
ldap_set_option($connectionLDAP_OPT_PROTOCOL_VERSION3);
    return 
$connection;
  }

  public static function 

bind($connection,$basedn,$basepass) {
    
$ldaprdn  $basedn;
    
$ldappass $basepass;
    
$bind ldap_bind($connection$ldaprdn$ldappass);
  }

  public static function 

search($connection$searchdn$filter$attributes = array()) {
    
$sr ldap_search($connection$searchdn$filter$attributes);
    if (
$sr) {
      
$info ldap_get_entries($connection$sr);
    }

    function 

addRecord($connection$adddn$record) {
      
$addProcess ldap_add($connection$adddn$record);
    }

  }

  public static function 

close($connection) {
    
ldap_close($connection);
  }

}

?>

Проблема заключается в том, не понимаю как мне создать новый объект своего класса в mymodule.module чтобы работать с ним

В обычном PHP я бы написал бы это так

<?php
$new_ldap 
= new ldap();
$new_connect $new_ldap->connect($ldap->ldapserver$ldap->ldapport);
...
?>

А как это же реализуется в модулях друпала?

Комментарии

Аватар пользователя dashiwa dashiwa 4 января 2022 в 10:30

Создавайте объект внутри функции , хотя это весьма коряво.
Либо передавайте объект аргументом.

Области видимости переменных не позволят вам работать так как вы хотите

По поводу аргумента вопрос открыт, друпал использует функции функций , так называемые callbacks ,с функцией call_user_func_calback ,как там происходит наследование аргументов , мне точно неизвестно, нужно будет почитать про это