Como faço para encontrar uma lista de subclasses para um modelo de propulsor com herança concreta

StackOverflow https://stackoverflow.com/questions/3826136

  •  26-09-2019
  •  | 
  •  

Pergunta

Estou construindo um mini-CMS para minha instituição de caridade local (sim, eu sei que poderia usar um projeto de fio dental, mas eles querem codificação personalizada)

Meu esquema de propulso atualmente parece como tal:-

<?xml version="1.0" encoding="UTF-8"?>
<database name="sja" defaultIdMethod="native">
    <table name="section">
        <column name="id" type="INTEGER" primaryKey="true" required="true" autoIncrement="true" />
        <column name="title" type="VARCHAR" required="true" />
        <column name="slug" type="VARCHAR" required="true" />
    </table>
    <table name="page">
        <column name="id" type="INTEGER" primaryKey="true" required="true" autoIncrement="true" />
        <column name="title" type="VARCHAR" required="true" />
        <column name="section_id" type="INTEGER" required="true" />
        <foreign-key foreignTable="section">
            <reference local="section_id" foreign="id" />
        </foreign-key>
    </table>
    <table name="static_page">
        <behavior name="concrete_inheritance">
            <parameter name="extends" value="page" />
        </behavior>
        <column name="content" type="LONGVARCHAR" required="true" />
    </table>
    <table name="home_page">
        <behavior name="concrete_inheritance">
            <parameter name="extends" value="page" />
        </behavior>
        <column name="standfirst_title" type="VARCHAR" />
        <column name="standfirst_image" type="VARCHAR" />
        <column name="standfirst_content" type="VARCHAR" />
    </table>

</database>

Quero poder obter uma lista que inclua "home_page" e "static_page" - sem precisar criar isso manualmente sempre que adiciono um novo tipo de página.

Existe uma maneira fácil de obter uma lista como essa ou tenho que escrever algumas coisas mágicas com aulas de reflexão, etc?

Foi útil?

Solução

Depois de um puxão na direção certa do #ProPel no Freenode - eu inventei isso para um conceito de base - ainda não o testei

function getSubClasses()
{
    $map = $this->getDatabaseMap();
    $children = array();
    foreach ($map->getRelations() AS $relation)
    {
        $behaviours = $relation->getRightTable()->getBehaviours();

        if (issset($behaviours['concrete_inheritance']['extends']) AND $behaviours['concrete_inheritance']['extends'] == $this->getDatabaseMap()->getClassName())
        {
            $children[] = $relation->getRightTable()->getClassName();
        }
    }
    return $children;
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top