es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Llamada a la función de miembro generate() en nulo.

Estoy obteniendo este error:

“Error fatal: Llamada a una función miembro en nulo en /var/www/example.loc/app/Controllers/ControllerMain.php en la línea 17”

cuando llamo a la función “action_index”.

Este es el archivo ControllerMain.php y “general_view.php” es mi diseño:

<?php
namespace App\Controllers;
use App\Models\Users;
use Core\Controller;

class ControllerMain extends Controller
{
    public function __construct()
    {
        $this->model = new Users();
    }

    public function action_index()
    {
        $this->view->generate('general_view.php');
    }
}

Archivo Core\Controller:

<?php
namespace Core;

class Controller 
{
    public $model;
    public $view;

    public function __construct()
    {
        $this->view = new View();
    }

    public function action_index()
    {
    }
}

Archivo Core\View:

<?php

namespace Core;

class View
{
    //public $template_view; // aquí se puede especificar una vista general por defecto.

    function generate($general_view, $data = null)
    {
        if(is_array($data))
        {
            // convertimos los elementos del array en variables
            extract($data);
        }
        include 'app/views/' . $general_view;
    }
}

No pude encontrar las soluciones adecuadas para mí, así que decidí escribir aquí, espero su ayuda.
Les pido que me ayuden a resolver el problema porque soy nuevo en php. Disculpen mi mal inglés 🙂
Tal vez no di toda la información necesaria para entender lo que estaba sucediendo, por lo que si necesitan algo, escríbanme.

Tags:  ,

Answer

  1. Avatar for davy.ai

    El mensaje de error indica que hay un problema al llamar la función generate() en un objeto nulo en el archivo ControllerMain.php en la línea 17.

    Al analizar el código, la función generate() es un método de la clase View, la cual es inicializada en el constructor de la clase Controller. Parece que el problema podría ser que el objeto View no está siendo inicializado correctamente cuando se llama a la función action_index().

    Una posible solución es agregar una verificación para asegurar que el objeto View no sea nulo antes de llamar a su método generate(). Por ejemplo:

    public function action_index()
    {
        if ($this->view) {
            $this->view->generate('general_view.php');
        } else {
            // manejar el caso de error donde la vista no está inicializada
        }
    }
    

    Otra posibilidad es asegurarse de que el objeto View sea inicializado correctamente en el constructor de Controller. Parece que ya se está haciendo esto, pero podría valer la pena verificar que el archivo de clase View esté siendo incluido correctamente y que no haya errores en su implementación.

    ¡Espero que esto ayude! Avísame si tienes alguna pregunta adicional o si hay algo más que pueda hacer para ayudarte.

Comments are closed.