Генератор сущностей (EntityGenerator)

  1. <?php
  2.  
  3. /**
  4.  *  @author 3kZO
  5.  */
  6. class EntityGenerator
  7. {
  8.  
  9.     public function generate($name, array $columns = []) {
  10.  
  11.         $output = [];
  12.  
  13.         $output[] = '<?php'
  14.                 .   "\r\n"
  15.                 .   "\r\n" . '/**'
  16.                 .   "\r\n" . ' * @author 3kZO'
  17.                 .   "\r\n" . ' */'
  18.                 .   "\r\n"
  19.                 .   "\r\n" . 'class ' . $name
  20.                 .   "\r\n" . '{'
  21.                 .   "\r\n";
  22.         foreach ($columns as $column) {
  23.             $output[] = "\r\n\t" . 'private $' . $column . ";\r\n";
  24.         }
  25.  
  26.         $output[] = "\r\n";
  27.  
  28.         foreach ($columns as $column) {
  29.  
  30.             if (false !== $pos = strpos($column, '_')) {
  31.                 $tokens = [];
  32.                 //$tokens[] = substr($column, 0, $pos);
  33.                 $len = strlen($column);
  34.                 $pos = 0;
  35.                 while ($pos < $len) {
  36.                     $c = strcspn($column, '_', $pos);
  37.                     if (0 == $c) {
  38.                     //  $tokens[] = $column[$pos];
  39.                         $pos++;
  40.                     } else {
  41.                         $tokens[] = ucfirst(substr($column, $pos, $c));
  42.                         $pos += $c;
  43.                     }
  44.                 }
  45.  
  46.                 $method = implode($tokens);
  47.  
  48.             } else {
  49.                 $method = ucfirst($column);
  50.             }
  51.  
  52.             $output[] = "\r\n\t" . 'public function set' . $method . '($value) {'   //  setter
  53.                     .   "\r\n\t\t" . '$this->' . $column . ' = $value;'
  54.                     .   "\r\n\t" . '}'
  55.                     .   "\r\n"
  56.                     .   "\r\n\t" . 'public function get' . $method . '() {'         //  getter
  57.                     .   "\r\n\t\t" . 'return $this->' . $column . ';'
  58.                     .   "\r\n\t" . '}'
  59.                     .   "\r\n";
  60.         }
  61.  
  62.         //$output[] = "\r\n";
  63.         $output[] = "\r\n" . '}'
  64.                 .   "\r\n" . '?>';
  65.  
  66.         return implode($output);
  67.  
  68.     }
  69.  
  70. }
Небольшая утилита для генерациисущностей, т.е Entities. В php есть такой пакет, как Doctrine - это, если так можно сказать система управлением данными из БД. Решения (Entity) управляются с помощью репозиториев (Repository).
  1. <?php
  2.  
  3. $repository = ..->getRepository('UserRepository');
  4. /**
  5.  * @var Entity
  6.  */
  7. $entity = $repository->find(1); // find by id, id = 1
  8.  
  9. // Пример:
  10. echo $entity->getId(); // 1
Т.е каждый репозиторий, вернет нам готовое решение, а именно класс с нужными методами, каждый метод из которого является названием колонки в таблице.
  1. <?php
  2.  
  3. // EntityGenerator
  4. $eg = new EntityGenerator();
  5.  
  6. $entityName = 'UserEntity';
  7.  
  8. $entityColumns = ['id', 'login', 'password', 'created_at'];
  9.  
  10. @file_put_contents(__DIR__ . '/src/Entity/' . $entityName . '.php', $eg->generate($entityName, $entityColumns));
  11.  
  12. // На выходе: src/Entity/UserEntity.php
  13.  
  14. /**
  15.  * @author 3kZO
  16.  */
  17.  
  18. class UserEntity
  19. {
  20.  
  21.     private $id;
  22.  
  23.     private $login;
  24.  
  25.     private $password;
  26.  
  27.     private $created_at;
  28.  
  29.  
  30.     public function setId($value) {
  31.         $this->id = $value;
  32.     }
  33.  
  34.     public function getId() {
  35.         return $this->id;
  36.     }
  37.  
  38.     public function setLogin($value) {
  39.         $this->login = $value;
  40.     }
  41.  
  42.     public function getLogin() {
  43.         return $this->login;
  44.     }
  45.  
  46.     public function setPassword($value) {
  47.         $this->password = $value;
  48.     }
  49.  
  50.     public function getPassword() {
  51.         return $this->password;
  52.     }
  53.  
  54.     public function setCreatedAt($value) {
  55.         $this->created_at = $value;
  56.     }
  57.  
  58.     public function getCreatedAt() {
  59.         return $this->created_at;
  60.     }
  61.  
  62. }
  63. ?>

Реклама

Мы в соцсетях

tw tg yt gt