-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathDefinicion_AMBs.tex
102 lines (77 loc) · 6.13 KB
/
Definicion_AMBs.tex
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
\subsection{Definición de ABMs - Clases Admin}%
\label{sub:definición_de_abms_clases_admin}
Para definir un ABM, es decir, una interfaz capaz de manejar el alta, baja y modificación de registros es necesario una entidad. Por este motivo, para obtener
una idea general del funcionamiento de Sonata-Admin, se decidió definir algunas entidades y generar una clase admin\@.
En sonata admin, una clase admin es aquella que, dada una entidad, permite añadir un servicio en la plataforma web sonata que se hace cargo de cada una de estas funciones.
Para crear un admin es necesario extender de la clase \textbf{AbstractAdmin} que provee sonata y, mediante métodos heredados de la misma, configurar la manera en
que se muestra la información\@.
Algunos de estos métodos son:
\begin{itemize}
\item \textit{configureFormFields:} este método define los campos a mostrarse durante la acción de crear y editar.
\item \textit{configureListFields:} define los campos a mostrar durante la acción de listar datos.
\item \textit{configureShowFields:} establece la información a mostrar durante la acción de ver una entrada.
\end{itemize}
\noindent
Además de esto, una clase admin en \textbf{Sonata} permite:
\begin{itemize}
\item Validar información
\item Agregar acciones de acuerdo a eventos de cada entidad
\item Establecer jerarquías entre clases admin
\item Crear un menú de forma fácil en las vistas del admin
\item Establecer filtros de búsqueda.
\end{itemize}
Éstas son las funcionalidades que se utilizaron en este proyecto, sonata cuenta aún con más opciones de configuración.
Una clase admin contiene una referencia a la entidad base del mismo a través de un objeto denominado Subject. Sonata utiliza este objeto para realizar
la mayoría de sus operaciones.
Para configurar las diferentes secciones del admin, es necesario especificar la información que se desea incluir, esto es posible utilizando el nombre del campo.
\begin{figure}[h]
\includegraphics[width=1\linewidth]{image/show.png}
\caption{Ejemplo de definición de campos a mostrar durante la creación/edición.\newline \textbf{Fuente:} Elaboración propia.}
\label{fig:image/show}
\end{figure}
Si se desea acceder a asociaciones, (datos que representan la relación de una entidad) se puede hacerlo mediante una notación de puntos, por ejemplo:
si se tiene una instancia de \textbf{Actividad}, la misma tendrá una asociación con una entidad persona\@. Por lo tanto, se puede acceder al nombre de una
persona referenciándola como ``persona.nombre''.
\subsubsection{Proyecto}%
\label{ssub:admin_proyectadmin_proyecto}
En el admin de Proyecto se agregaron los siguientes campos en cada acción:
\begin{itemize}
\item Lista: nombre del proyecto.
\item Ver: nombre del proyecto
\item Inserción: nombre y roles de proyecto.
\end{itemize}
Además de esta información se agregó un menú en la barra superior de navegación de la pantalla de proyecto. El mismo permite acceder a acciones del \textit{hijo},
que en este caso sería el admin de Miembro de proyecto.
Cuando se asigna un admin como \textit{hijo}, se obtiene rutas anidadas, de forma que se puede acceder a acciones del \textit{hijo} desde la vista del padre. Ej: Una ruta
para acceder a un miembro en particular sería de la forma:\newline \textbf{/miembroproyecto/{id}/(show | edit)}\@.\newline\newline Cuando se accede a los
miembros de cada proyecto se obtienen rutas de la forma:\newline \textbf{/proyecto/{id}/miembroproyecto/{id}/(show | edit)},
\newline \textbf{/proyecto/{id}/miembroproyecto/list}\newline
Para crear un proyecto, se deben proporcionar los datos de nombre y roles. Los roles de proyecto están representados en la entidad en forma de Colección,
por lo tanto, se utilizó un tipo de formulario que permite la elección de opciones múltiples y, además, permite agregar nuevas instancias de
rol (figura~\ref{fig:image/proyecto-editar}).
\begin{figure}[h]
\includegraphics[width=1\linewidth]{image/edit-proyecto.png}
\caption{Admin: Acción de editar Proyectos.\newline \textbf{Fuente:} Elaboración propia, captura de pantalla de la aplicación web.}
\label{fig:image/proyecto-editar}
\end{figure}
\subsubsection{Miembro de Proyecto}%
\label{ssub:miembro_de_proyecto_admin}
Para la definición del admin de miembros de proyecto se lo estableció como un \textit{hijo} del admin Proyecto, esto es porque tiene sentido desde el punto
de vista de la relación que forman. Un proyecto estará integrado por muchos miembros, por lo tanto, al asignar a miembros de proyecto como admin \textit{hijo}
de Proyecto permite administrar los miembros desde la interfaz de proyectos. Al fin y al cabo, la clase admin de miembros no tiene sentido por sí sola.
Para asignar un admin como \textit{hijo} se debe configurar el servicio padre un método denominado \textbf{addChild}. Como parámetros requiere el servicio
del admin a actuar de \textit{hijo} y el campo mediante el cual está relacionado.
Al agregar un admin como \textit{hijo} se generan las rutas anidadas (sección:~\ref{ssub:admin_proyectadmin_proyecto}), pero no se tiene una forma de acceder a
ellas desde la aplicación web\@. Una buena forma de solucionar este problema es, según la documentación de \textbf{Sonata}, agregar un menú en la barra superior
de la página que contenga botones mediante los cuales acceder a estas rutas.\parencite{sonata-childAdmin}
\begin{figure}[h]
\includegraphics[width=1\linewidth]{image/addChild.png}
\caption{Servicio admin de Proyecto de Extensión\newline \textbf{Fuente:} Elaboración propia, captura de pantalla de código fuente.}
\label{fig:image/addChild}
\end{figure}
\subsubsection{Rol de proyecto}%
\label{ssub:rol_de_proyecto_admin}
El admin de roles es muy básico, solo contiene el campo de nombre. Por lo tanto, en cada una de sus acciones se agregó este único campo.
Lo interesante en este admin es que se agregó al admin de miembros como \textit{hijo}. De esta forma se puede listar los miembros que cumplen cada rol en
particular.
Esto se logra mediante el método \textbf{addChild} (figura~\ref{fig:image/addChild}) y creando un menú del mismo tipo que el definido en el admin de miembros.