Saludos!!!
La pregunta es si alguien sabe si se puede invocar un metodo private por
reflexion.
el punto es que tengo un controlador encargado de eliminar todas la
entidades.. la gran mayoria con un delete a un campo de db basta pero
algunas veces hay que hacer otras cosas antes de eliminar la entidad, para
ello en primera instancia se me ocurrio algo asi:
<?php
namespace controles;
-------------------------------------
class Del {
public $em;
public function index() {
$entitie = $_GET["e"];
$ob = $this->em->find($entitie, $_GET["id"]);
switch ($_GET["e"]) {
case 'Entidad1':
//logica previa a eliminar la entidad Entidad1.
break;
.
.
.
case 'EntidadN:
default:
}
$this->em->remove($ob);
$this->em->flush();
if (isset($_POST["ajax"])) {
header("Content-type:application/json");
die(json_encode(array("error" => false)));
}
header("Location:" . $_SERVER["HTTP_REFERER"]);
}
}
---------------------------------------------------
luego se me ocurio que seria mas limpio tener por separado la logica de
cada entidad que requiriera una logica extra. eso lo logro colocando la
logica en otros metodos dentro del controlador pero como el controlador es
visible desde url haciendo los metodos privados vasta para que no puedan
ser invocados desde URL, el provema es que al parecer ReflectMethod no
puede invocar metodos privados :S
esto es lo que intento hacer:
-----------------------------------------------------
<?php
namespace controles;
class Del {
public $em;
private function Entidad1{
//logica previa para eliminar Entidad1
}
*private *function Entitdad....
.
.
.
*private *function EntidadN{
//logica previa para eliminar EntidadN
}
public function index() {
$entitie = $_GET["e"];
$ob = $this->em->find($entitie, $_GET["id"]);
if(method_exists($this, $entitie)){
$refecMeth = new \ReflectionMethod($this, $entitie);
$refecMeth->invoke($this, $ob);
}
$this->em->remove($ob);
$this->em->flush();
if (isset($_POST["ajax"])) {
header("Content-type:application/json");
die(json_encode(array("error" => false)));
}
header("Location:" . $_SERVER["HTTP_REFERER"]);
}
}
-----------------------------------------------------
y lo que obtengo es un Exception :
Fatal error: Uncaught exception 'ReflectionException' with message 'Trying
to invoke private method controles\Del::Entidad1() from scope
ReflectionMethod'
por lo pronto lo solucion haciendo public el metodo con la logica previa..
pero me gustaria mas que esto quedarán privado... -_- ... ¿alguien sabe
como invocar esos metodos privados :S.... ?, entido por que no se podria
invocar un metodo privado desde otra clase.. pero en este caso se supone
que lo estoy tratando de invocar desde la misma clase, lo unico que tendria
que decirle a ReflectionMethod que usara el scope de la clase donde esta
siendo invocada.. pero no se si se pueda.. por lo pronto lo que se me ha
ocurrido no ha funcionado...