Error Warning: ReflectionMethod::invokeArgs() expects parameter 1 to be object, boolean given

Asked by omar on 2014-10-07

Hola me gustaria si pueden ayudarme con el siguiente error que se genera al momento de guardar los datos en la base de datos

Warning: ReflectionMethod::invokeArgs() expects parameter 1 to be object, boolean given in /var/www/html/europioprueba/core/orm_engine/mysqlilayer.php on line 35

Fatal error: Call to a member function execute() on a non-object in /var/www/html/europioprueba/core/orm_engine/mysqlilayer.php on line 59

Gracias

Question information

Language:
Spanish Edit question
Status:
Solved
For:
Europio Engine Edit question
Assignee:
No assignee Edit question
Last query:
2014-10-08
Last reply:
2014-10-08
Eugenia Bahit (eugeniabahit) said : #1

Ese error en mysqli se produce cuando los modificadores del query no se condicen con la cantidad de variables enlazadas y estaría originado en el ORM. La causa es que el mapeo manual del modelo para crear la (o las) tablas correspondientes está mal hecho.
Pero eso no es algo de Europio, sino de la programación orientada a objetos.
Te recomiendo leer el libro "Teoría sintáctico gramatical de objetos" en especial el capítulo VII que habla sobre cómo mapear objetos de forma manual. El libro está disponible en PDF en http://www.bubok.es/libros/219288/Teoria-sintacticogramatical-de-objetos

omar (omar-virili) said : #3

Hola si ya lo estaba leyendo y bueno se me complica un poco entender todo te paso como mapeo la tabla factura que es la que uso y da el error haber si me podrias corregir.

CREATE TABLE factura(
    -> factura_id INT(11) NOT NULL AUTO_INCREMENT PRIMARY KEY
    -> , fecha DATE NOT NULL
    -> , numeracion INT(8) NOT NULL
    -> ) ENGINE=InnoDB;
Gracias

Eugenia Bahit (eugeniabahit) said : #4

Omar, lo que se mapea no es una tabla, se mapea un objeto (ORM = Object Relational Mapping -Mapeo relacional de objetos-). Por eso, para poder decir si un mapeo está bien o mal se necesita conocer el modelo.

Europio Engine te va a ser útil en la medida que tengas un desenvolvimiento fluido con el paradigma de la orientación a objetos. Manejar la orientación a objetos solo como estilo, tampoco es muy útil. Justamente, el core "fuerte" de Europio Engine es la herencia de clases y el manejo de objetos a nivel modelos.

En Europio Engine un modelo puede heredar de StandardObject (http://europio.org/docs/standardobject) o de ComposerObject (http://europio.org/docs/composerobject) dependiendo del tipo de objeto del que se trate. Por defecto, un objeto debería heredar de StandardObject. Pero si se tratase de un objeto compositor, con una relación única de muchos a uno (http://europio.org/docs/many2one), se necesitará heredar de ComposerObject.

Si se hereda de ComposerObject, el conector lógico no es necesario crearlo (Europio te provee de LogicalConnector [http://europio.org/docs/logicalconnector] que es un conector lógico genérico) y la tabla para la persistencia de las conexiones lógicas la creas con el CLI (http://europio.org/docs/europioengine-cli) pasandole la opción -t (o --table) y eligiendo luego la opción "c". Es importante tener en cuenta que MySQL no podrá crear esta table si previamente no se crearon las tablas del compositor y del compuesto.

Todo lo anterior es lo que te facilita Europio entre otras cosas y como ÚNICO REQUISITO te pide que toda propiedad colectora lleve por nombre el del compositor seguido de _collection. Lo demás, no tiene ningún requisito que no sea exigido por el propio paradigma.

Mi sugerencia es que ANTES de ponerte a crear aplicaciones con Europio Engine, te estudies el libro que te mencioné anteriormente (http://www.bubok.es/libros/219288/Teoria-sintacticogramatical-de-objetos), es decir NO que lo "leas" sino que lo "estudies". En la última edición de The Original Hacker (http://www.originalhacker.org) escribí un artículo llamado «Las 12 reglas del aprendiz de hacker» que entre ellas, hay una que explica paso a paso cómo se debe estudiar un libro técnico. Te recomiendo leer esa partecita que te va a ayudar mucho (es apenas un párrafo y el PDF de la nota te lo podés bajar de http://library.originalhacker.org/search/aprendiz).

Una vez lo tengas estudiado, otro artículo interesante es «ómo desarrollar un ABM con Europio Engine» el cual, la primera parte, ejemplifica los modelos y su mapeo con un caso real, hablando de StandardObject y ComposerObject. Lo podés bajar de http://library.originalhacker.org/biblioteca/articulo/ver/119. El ejemplo que usa es el de la propia Web de la que se descarga el PDF. Está con una versión anterior de Europio pero la primera parte que es la importante, es independiente de la versión.

Algo que también podría resultarte muy útil, es estudiar el código fuente de algún módulo que funcione sobre Europio. Es el caso de Secure Pastebin (https://bazaar.launchpad.net/~eugeniabahit/securepastebin/trunk/files) que utilizo en mi Web para colgar snippets (http://www.cursosdeprogramacionadistancia.com/snippets). Explorate la carpeta models (ni siquiera hace falta que lo descargues) y mirate el archivo SQL para entender cómo fue mapeado.

No es algo que vayas a lograr estudiar de la noche a la mañana ni que puedas terminar manejando en unos días. Lleva su buen tiempo y corregir ahora un modelo en particular o el mapeo de un modelo en particular, no te va a servir de nada sin las bases y fundamentos de la OOP. Pero independientemente de Europio Engine, estudiar el paradigma de la programación orientada a objetos en profundidad, te va a servir para el resto de tu vida como programador. Y aprovechar esta bibliografía te conviene ya que no hay mucho material que hable 100% sobre el paradigma. La mayoría de la bibliografía mezcla el paradigma con el estilo arquitectónico y termina siendo confuso.

Espero que te sirva la información :)

omar (omar-virili) said : #5

Gracias Eugenia claro que es de gran utilidad todo lo que me decis, y si creo que tenes amplia razón, gracias otra vez. Saludos