class not found en API REST Guarani v3.21

Buenas tardes, estoy teniendo un inconveniente a la hora de agregar nuevos rest y recursos personalizados a la carpeta v2, me tira el siguiente error en el log :

[CRITICAL][toba] Class 'recurso_actividades_unrn' not found

Adjunto la clase correspondiente porque no encuentro cual es el inconveniente, ya intente con el comando “./guarani pers_autoload” y sigue tirando el mismo error.

Cabe destacar que se siguio el siguiente https://documentacion.siu.edu.ar/wiki/SIU-Guarani/Version3.17.0/personalizaciones/rest

Aguardo sus comentarios.
Saludos cordiales.


recurso_actividades_unrn.txt (2.95 KB)

Hola Rodrigo,

Por el titulo del foro estas en la versión 3.21.0 o 3.21.1, por lo tanto deberías usar esta otra documentación: https://documentacion.siu.edu.ar/wiki/SIU-Guarani/Version3.21.0/personalizaciones/rest

Voy a probar lo que me adjuntaste y te aviso.

saludos.
2

Hice la siguiente prueba y funciona bien al parecer:

  1. Cree el archivo personalizacion/php/rest/v2/actividades_unrn/recurso_actividades_unrn.php.

  2. Cambie:


        // Datos de la actividad (para modificación)
        $actividades_post = array(
            'materias' => array(
                'type' => 'array',
                $actividad_taxonomia,
                '_validar' => array(
                    rest_validador::OBLIGATORIO,
                    rest_validador::TIPO_ARREGLO
                ),
            )
        );

Por lo siguiente:


        // Datos de la actividad (para modificación)
        $actividades_post = [
            'materias' => [
                'type' => 'array',
                'items' => ['$ref' => 'ActividadTaxonomia'],
                '_validar' => [rest_validador::OBLIGATORIO, rest_validador::TIPO_ARREGLO]
            ],
        ];

Obviamente no tengo la clase rest_actividades_unrn con lo cual tuve que comentar dos lineas, te paso como me quedo:


namespace PERS\Guarani\php\rest\v2\actividades_unrn;

use SIUToba\rest\rest;
use SIUToba\rest\lib\rest_validador;
use SIUToba\rest\lib\modelable;

//use PERS\Guarani\php\rest\v2\modelos\rest_actividades_unrn;

class recurso_actividades_unrn implements modelable
{
    /**
     * @var rest_actividades_unrn
     */
    protected $modelo;

    function __construct()
    {
        // $this->modelo = guarani::rest('rest_actividades_unrn');
        //$this->modelo = \guarani::rest(rest_actividades_unrn::class);
    }

    public static function _get_modelos()
    {
        $info_actividad = array(
            'codigo' => array('type' => 'string'),
            'nombre' => array('type' => 'string'),
            'contenido' => array('type' => 'string'),
        );

        $actividad_taxonomia = array(
            'materia' => array(
                'type' => 'string',
                '_validar' => array(rest_validador::OBLIGATORIO, rest_validador::TIPO_TEXTO)),
            'taxonomia' => array(
                'type' => 'string',
                '_validar' => array(rest_validador::OBLIGATORIO, rest_validador::TIPO_ENUM => array(
                        'A', 'B', 'C', 'D'))),
        );

        // Datos de la actividad (para modificación)
        $actividades_post = [
            'materias' => [
                'type' => 'array',
                'items' => ['$ref' => 'ActividadTaxonomia'],
                '_validar' => [rest_validador::OBLIGATORIO, rest_validador::TIPO_ARREGLO]
            ],
        ];

        return array(
            'Actividad' => $info_actividad,
            'ActividadTaxonomia' => $actividad_taxonomia,
            'ActividadesPost' => $actividades_post,
        );
    }

    /**
     * GET /actividades-unrn/cod_actividad
     *
     * @notes
     * Devuelve el contenido minimo de la actividad con id {cod_actividad}.

     *
     * @summary Id de la actividad {cod_actividad}
     * @responses 200 {"$ref":"Actividad"}
     * @responses 404 La actividad {cod_actividad} no existe
     */
    function get($cod_actividad)
    {
        $datos = $this->modelo->get($cod_actividad);
        rest::response()->get($datos);
    }

    /**
     * POST /actividades-unrn
     *
     * @notes Recibe una lista de actividades con sus respectivas taxonomias las cuales se actualizan en Guaraní.
     *
     * @param_body $actividad_post ActividadesPost [required] Campos de una actividad.
     *
     * @summary Recibe una lista de actividades con sus respectivas taxonomias las cuales se actualizan en Guaraní.
     * @responses  201 Exito - Se actualizaron exitosamente todas las taxonomias
     * @responses  400 Errores de validación
     * @responses  500 Falló la actualización de taxonomias
     */
    function post_list()
    {
        $this->modelo->post(rest::request()->get_body_json());
        rest::response()->post(array('resultado' => 'ok'));
    }
}

saludos.
2


Screenshot from 2023-06-13 15-53-58.png

Screenshot from 2023-06-13 15-53-58.png

Screenshot from 2023-06-13 15-54-23.png

Screenshot from 2023-06-13 15-54-23.png

Buenos días, si, me confundí de link a enviarle, estaba viendo el de v3.21.
Observe que en la documentación de la v3.17 indica que se haga un “./guarani pers_autoload” una vez que finalizas de personalizar el recurso.
¿en la v3.21 no se hace mas este paso?

Otra consulta, ahí lo pude resolver, el inconveniente que tenia era que me tira error al agregar la primera linea:

namespace PERS\Guarani\php\rest\v2\actividades_unrn;

una vez que comento esa linea me aparece como a vos el recurso en el swagger. ¿Porque puede ser?

Saludos.

Hola Rodrigo,

¿en la v3.21 no se hace mas este paso?

No hace falta ejecutar bin/guarani pers_autoload ya que carga las clases utilizando un autoload psr-4:

composer.json


    "autoload": {
        "psr-4": {
            "": "src/",
            "SIU\\Guarani\\php\\":"php/",
            "PERS\\Guarani\\php\\":"personalizacion/php/"
        }
    },

Agregue la clase personalizacion/php/rest/v2/modelos/rest_actividades_unrn.php:


namespace PERS\Guarani\php\rest\v2\modelos;

class rest_actividades_unrn {

}

Luego en personalizacion/php/rest/v2/actividades_unrn/recurso_actividades_unrn.php hice uso de la misma y funciona bien:


namespace PERS\Guarani\php\rest\v2\actividades_unrn;

use SIUToba\rest\rest;
use SIUToba\rest\lib\rest_validador;
use SIUToba\rest\lib\modelable;

use PERS\Guarani\php\rest\v2\modelos\rest_actividades_unrn;

class recurso_actividades_unrn implements modelable
{
    /**
     * @var rest_actividades_unrn
     */
    protected $modelo;

    function __construct()
    {
        $this->modelo = \guarani::rest(rest_actividades_unrn::class);
    }

Si personalizas clases de consulta (ej: php/nucleo/matriculas/personas/co_personas.php) entonces si debes ejecutar bin/guarani pers_autoload, revisa esta documentación.

una vez que comento esa linea me aparece como a vos el recurso en el swagger. ¿Porque puede ser?

¿que error te da?
Tenes dos formas de ver el error:

  1. Ingresando a la URL http://guarani-gestion/rest/v2/api-docs te lo muestra en pantalla.

  2. En el archivo instalacion/i__desarrollo/p__guarani/logs/web_services.log.

saludos.
2

Buenos dias,

adjunto captura de pantalla del api-docs.
En el web_services-log no encontré mucha información de error, lo adjunto.
Pero si en el sistema.log larga el mismo error que te mencionaba al principio de “[CRITICAL][toba] Class ‘recurso_actividades_unrn’ not found” (lo adjunto).

Aguardo tus comentarios.
Saludos.


api-docs.PNG

api-docs.PNG_thumb.png

web_services.txt (679 KB)

sistema.txt (2.22 KB)

Rodrigo, a mi me funciona bien con las modificaciones que te pase anteriormente:

personalizacion/php/rest/v2/actividades_unrn/recurso_actividades_unrn.php


namespace PERS\Guarani\php\rest\v2\actividades_unrn;

use SIUToba\rest\rest;
use SIUToba\rest\lib\rest_validador;
use SIUToba\rest\lib\modelable;

use PERS\Guarani\php\rest\v2\modelos\rest_actividades_unrn;

class recurso_actividades_unrn implements modelable
{
    /**
     * @var rest_actividades_unrn
     */
    protected $modelo;

    function __construct()
    {
        $this->modelo = \guarani::rest(rest_actividades_unrn::class);
    }

    public static function _get_modelos()
    {
        $info_actividad = array(
            'codigo' => array('type' => 'string'),
            'nombre' => array('type' => 'string'),
            'contenido' => array('type' => 'string'),
        );

        $actividad_taxonomia = array(
            'materia' => array(
                'type' => 'string',
                '_validar' => array(rest_validador::OBLIGATORIO, rest_validador::TIPO_TEXTO)),
            'taxonomia' => array(
                'type' => 'string',
                '_validar' => array(rest_validador::OBLIGATORIO, rest_validador::TIPO_ENUM => array(
                        'A', 'B', 'C', 'D'))),
        );

        // Datos de la actividad (para modificación)
        $actividades_post = [
            'materias' => [
                'type' => 'array',
                'items' => ['$ref' => 'ActividadTaxonomia'],
                '_validar' => [rest_validador::OBLIGATORIO, rest_validador::TIPO_ARREGLO]
            ],
        ];

        return array(
            'Actividad' => $info_actividad,
            'ActividadTaxonomia' => $actividad_taxonomia,
            'ActividadesPost' => $actividades_post,
        );
    }

    /**
     * GET /actividades-unrn/cod_actividad
     *
     * @notes
     * Devuelve el contenido minimo de la actividad con id {cod_actividad}.

     *
     * @summary Id de la actividad {cod_actividad}
     * @responses 200 {"$ref":"Actividad"}
     * @responses 404 La actividad {cod_actividad} no existe
     */
    function get($cod_actividad)
    {
        $datos = $this->modelo->get($cod_actividad);
        rest::response()->get($datos);
    }

    /**
     * POST /actividades-unrn
     *
     * @notes Recibe una lista de actividades con sus respectivas taxonomias las cuales se actualizan en Guaraní.
     *
     * @param_body $actividad_post ActividadesPost [required] Campos de una actividad.
     *
     * @summary Recibe una lista de actividades con sus respectivas taxonomias las cuales se actualizan en Guaraní.
     * @responses  201 Exito - Se actualizaron exitosamente todas las taxonomias
     * @responses  400 Errores de validación
     * @responses  500 Falló la actualización de taxonomias
     */
    function post_list()
    {
        $this->modelo->post(rest::request()->get_body_json());
        rest::response()->post(array('resultado' => 'ok'));
    }
}

personalizacion/php/rest/v2/modelos/rest_actividades_unrn.php


namespace PERS\Guarani\php\rest\v2\modelos;

use SIUToba\rest\rest;
use SIUToba\rest\lib\rest_hidratador;
use PERS\Guarani\php\rest\v2\actividades_unrn\recurso_actividades_unrn;

class rest_actividades_unrn
{

    protected function get_modelo($nombre)
    {
        $modelos = recurso_actividades_unrn::_get_modelos();
        return $modelos[$nombre];
    }

    function get($id)
    {

        $actividades         = [
            [
                'codigo' => 'MAT1',
                'nombre' => 'Matemática 1',
                'contenido' => 'Ciencia que estudia las propiedades de los números y las relaciones que se establecen entre ellos.'
            ],
            [
                'codigo' => 'ING1',
                'nombre' => 'Inglés 1',
                'contenido' => 'Relativo a Inglaterra, parte integrante del Reino Unido, o a sus habitantes.'
            ]
        ];
        $actividad_hidratada = rest_hidratador::hidratar($this->get_modelo('Actividad'), $actividades);
        return $actividad_hidratada;
    }

    function post($data)
    {
        rest::response()->post(['resultado' => 'ok']);
    }
}

Recorda agregar los servicios en instalacion/i__desarrollo/p__guarani/rest/recursos_usuarios.php:


//actividades-unrn
    'actividades-unrn' => [
        'POST' => ['usuarios' => array_merge($usuarios_admin, $todos)]
    ],
    'actividades-unrn/id' => [
        'GET' => ['usuarios' => array_merge($usuarios_admin, $todos)]
    ],

saludos.
4

Por las dudas ejecuta composer install o composer dump-autoload, quizás el autoload psr-4 de composer.json no registro la clase:


    "autoload": {
        "psr-4": {
            "": "src/",
            "SIU\\Guarani\\php\\":"php/",
            "PERS\\Guarani\\php\\":"personalizacion/php/"
        }
    },

saludos.
2

Buenos días, se pudo resolver el inconveniente, la solución fue que tuve que comentar la linea de “namespace PERS\Guarani\php\rest\v2\actividades_unrn;” en recurso_actividades_unrn.

Saludos