Foros del Web » Programando para Internet » PHP » Symfony »

[SOLUCIONADO] Acceder a métodos privados de una entidad desde su repositorio

Estas en el tema de Acceder a métodos privados de una entidad desde su repositorio en el foro de Symfony en Foros del Web. Buenas, me ha surgido un problema a la hora de relacionar entidades de mi aplicación. Resulta que en una de las vistas que tengo, muestro ...
  #1 (permalink)  
Antiguo 18/10/2014, 16:33
Avatar de bNd170  
Fecha de Ingreso: agosto-2009
Ubicación: $this->setLocation('Valencia', 'Spain');
Mensajes: 365
Antigüedad: 14 años, 7 meses
Puntos: 13
Información Acceder a métodos privados de una entidad desde su repositorio

Buenas, me ha surgido un problema a la hora de relacionar entidades de mi aplicación.

Resulta que en una de las vistas que tengo, muestro una entrada de blog y quiero que bajo la entrada, se muestren una serie de entradas relacionadas por sus categorias.

Hasta aqui todo perfecto.

El problema me surge cuando, creo un controlador para mostrar en la vista de la entrada al cual, le paso como parámetro, el objeto con la entidad de la entrada que esta mostrándose en esa vista.

Ese objeto, desde el controlador, se lo paso una funcion personalizada del repositorio que he creado para dicha funcionalidad.

Para crear la DQL cambié los métodos de private a public, para conseguir la DQL que hiciese lo que deseaba, pero ahora que la tengo, necesito que esos métodos continuen siendo private (Para no cargarme la dependencia de injecciones de Symfony2).

He leido por internet algo que tiene que ver con crear el repositorio como un servicio de Symfony2, pero la verdad es que estoy bastante verde en cuestión de servicios.

¿Alguien podría explicarme cómo se hace?
  #2 (permalink)  
Antiguo 18/10/2014, 19:59
Avatar de hhs
hhs
Colaborador
 
Fecha de Ingreso: junio-2013
Ubicación: México
Mensajes: 2.995
Antigüedad: 10 años, 10 meses
Puntos: 379
Respuesta: Acceder a métodos privados de una entidad desde su repositorio

Aqui tienes un articulo de como hacerlo: http://blog.code4hire.com/2011/08/cu...c-in-symfony2/
__________________
Saludos
About me
Laraveles
A class should have only one reason to change.
  #3 (permalink)  
Antiguo 19/10/2014, 05:00
Avatar de bNd170  
Fecha de Ingreso: agosto-2009
Ubicación: $this->setLocation('Valencia', 'Spain');
Mensajes: 365
Antigüedad: 14 años, 7 meses
Puntos: 13
Respuesta: Acceder a métodos privados de una entidad desde su repositorio

He probado siguiendo el articulo pero continúa saltándome el mismo error.

En services.yml
Código YAML:
Ver original
  1. acme.repository.content:
  2.         class: Acme\MainBundle\Entity\ContentRepository
  3.         factory_service: doctrine.orm.default_entity_manager
  4.         factory_method: getRepository
  5.         arguments:
  6.            - Acme\MainBundle\Entity\Content

Y después en el controlador:
Código PHP:
Ver original
  1. $repository = $this->get('acme.repository.content');
  2.         $relatedContents = $repository->relatedContents($content); // $content es una instancia de la entidad de Content

Resultado: Error: Cannot access private property...
  #4 (permalink)  
Antiguo 19/10/2014, 15:34
Avatar de hhs
hhs
Colaborador
 
Fecha de Ingreso: junio-2013
Ubicación: México
Mensajes: 2.995
Antigüedad: 10 años, 10 meses
Puntos: 379
Respuesta: Acceder a métodos privados de una entidad desde su repositorio

Solo puedes acceder a las propiedades privadas de content si declaras métodos publicos para esas propiedades o que las hagas publicas.
__________________
Saludos
About me
Laraveles
A class should have only one reason to change.
  #5 (permalink)  
Antiguo 20/10/2014, 01:30
Avatar de bNd170  
Fecha de Ingreso: agosto-2009
Ubicación: $this->setLocation('Valencia', 'Spain');
Mensajes: 365
Antigüedad: 14 años, 7 meses
Puntos: 13
Respuesta: Acceder a métodos privados de una entidad desde su repositorio

Cita:
Iniciado por hhs Ver Mensaje
Solo puedes acceder a las propiedades privadas de content si declaras métodos publicos para esas propiedades o que las hagas publicas.
Nada, ya está, he estado un tiempo sin apenas tocar las clases de Php y olvidaba que las entidades tienen sus getters y setters para acceder a las propiedades.

Con un simple $content->getId(); ha funcionado a la perfección.

Siento la pérdida de tiempo, a veces nos damos de cabezazos contra el código intentando complicar hasta las cosas más sencillas.

Etiquetas: entidad, private, repositorio, servicio
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 20:50.