> Faqs > Error model not found en Codeigniter 4

Error model not found en Codeigniter 4

Hola estoy siguiendo algunos tutoriales por Youtube con Codeigniter4 y al momento de hacer la vista me marca un error que no voy entendiendo me pueden ayudar a solucionar este problema

Error

Class 'App\Controllers\UnidadesModel' not found

APPPATH\Controllers\Unidades.php at line 13

 6    class Unidades extends BaseController
 7    {
 8        //Modelo/controlador
 9        protected $unidades;
10        
11        public function __construct()
12        {
13            **$this->unidades = new UnidadesModel();** // *Este es el error*
14        }
15        
16        //--------------------------------------------------------------------
17     
18        //Controlador/vista
19        public function index($activo = 1)
20        {

Controllers / Unidades.php

<?php
   namespace App\Controllers;

   use App\Controllers\BaseController;

   class Unidades extends BaseController
   {
       //Modelo/controlador
       protected $unidades;
       
       public function __construct()
       {
           $this->unidades = new UnidadesModel();
       }
       
       //--------------------------------------------------------------------
    
       //Controlador/vista
       public function index($activo = 1)
       {
        
        //select * from table where activo;   
        $unidades = $this->unidades->where('activo',$activo)->findAll();
        
        //Vista
        $data =['titulo' => 'Unidades', 'datos'=> $unidades];
    
            echo view('header');
            echo view('unidades/unidades',$data);
            echo view('footer');
       }
   }

?>

Models / UnidadesModel.php

<?php 

namespace App\Models;  //Ruta o Archivo

use CodeIgniter\Model;

class UnidadesModel extends Model
{
    protected $table      = 'unidades';
    protected $primaryKey = 'id';

    protected $returnType     = 'array';
    protected $useSoftDeletes = false;

    protected $allowedFields = ['nombre', 'nombre_corto', 'activo'];

    protected $useTimestamps = true;
    protected $createdField  = 'fecha_alta';
    protected $updatedField  = 'fecha_edit';
    protected $deletedField  = 'deleted_at';

    protected $validationRules    = [];
    protected $validationMessages = [];
    protected $skipValidation     = false;
}

?>

Respuestas

A todas luces te falta importar la clase que se está intentando usar, mediante la sentencia USE, que no la tienes.

Es un error muy sencillo de solucionar y muy habitual cuando se está desarrollando, que se intenta acceder a clases cuyo espacio de nombres (namespace) no corresponde con la clase con la que se está trabajando.

En tu caso la clase unidades.php usa este namespace:

namespace App\Controllers;

Así que si usas cualquier clase de ese mismo espacio de nombres, PHP la podrá cargar sin problemas. Sin embargo, a lo largo del código de tu clase estás usando otra clase llamada "UnidadesModel", que no tiene el mismo namespace.

En el caso de UnidadesModel, si namespace es este:

namespace App\Models;

Por tanto, como no es el mismo espacio de nombres, tienes que hacer el USE, en la clase Unidades.php, que tendría que comenzar con este código.

<?php
   namespace App\Controllers;

   use App\Controllers\BaseController;
   use App\Models\UnidadesModel

   class Unidades extends BaseController

Fíjate en el use App\Models\UnidadesModel.

Miguel Angel
3140 140 209 17
Hola estoy siguiendo algunos tutoriales por Youtube con Codeigniter4 y me sale un error 404 - File Not Found Controller or its method is not found: \App\Controllers\Unidades::getIndex es de controllers\Unidades