it-swarm.com.de

CodeIgniter PHP Modellzugriff "Das angegebene Modell konnte nicht gefunden werden"

Ich habe versucht, einige Modelle für diese Website, die ich baue, zu laden. Aus einem unbekannten Grund wird jedoch der folgende Fehler angezeigt:

An Error Was Encountered

Unable to locate the model you have specified: logon_model

Nun habe ich meine Forschung gemacht. Das Problem wäre, dass IC Dateinamen in Kleinbuchstaben verarbeitet. Sowohl meine Datei als auch der Dateianruf sind jedoch in Kleinbuchstaben, wie hier gezeigt:

echo "VALIDATING";
            // Validation passed. Off we go to account info verification from AA's database. God help us all.
            $this->load->model('logon_model');
            echo "FOUND MODEL";
            $res = $this->logon_model->verify_user($this->input->post('username'),$this->input->post('password'));
            echo $this->input->post('username');
            echo $this->input->post('password');

Die Ausführung erreicht nicht "FOUND MODEL", hält also beim Laden des Modells an. Ich habe versucht zu verwenden:

 $this->load->model(site_url('logon_model'));

Ohne Ergebnisse Müssen Sie erwähnen, dass die Modelldatei korrekt im richtigen Modellordner abgelegt ist?

Wie kann ich das beheben?

EDIT: Header für die Modelldatei:

class Logon_model extends CI_Model {

....
36

Beim Erstellen von Modellen müssen Sie die Datei in application/models/ platzieren und die Datei in Kleinbuchstaben benennen - wie logon_model.php.

Der logon_model.php sollte Folgendes enthalten:

<?php  if ( ! defined('BASEPATH')) exit('No direct script access allowed');


class Logon_model extends CI_Model
{
    public function __construct()
    {
        parent::__construct();
    }
    ...

Nun können Sie testen, ob Ihr Anwendungsmodell erreichbar ist, indem Sie versuchen, es im Browser zu öffnen.
http://example.org/application/models/logon_model.php

Wenn Sie den Text Kein direkter Skriptzugriff sehen, bedeutet dies, dass Sie die richtige Datei anschlagen (wenn Sie sich nicht sicher sind, schreiben Sie etwas anderes in exit () in der ersten Zeile).

Zweitens sollten Sie zum Laden des Modells in Ihre Controller folgendermaßen vorgehen können:

public function index()
{

    $this->load->model('logon_model');
    ...

}

Wenn alles wie erwartet klappt, würde ich anfangen, Dateiberechtigungen und/oder möglicherweise Symlinks zu suchen, wenn Sie welche verwenden.

59
Repox

Ich benutze Codeigniter 3+. Ich hatte das gleiche Problem und in meinem Fall änderte ich den Namen der Modelldatei ausgehend vom Fall uppser.

Logon_model.php

55
jakentus

So sollte ein Modell aussehen: Stellen Sie sicher, dass Ihr Modell so ist.

    <?php
    class Logon_model extends CI_Model {

    function __construct()
    {
         parent::__construct();
    }

    function myFunc()
    {
      // do something
    }
}

beachten Sie den Klassennamen in Großbuchstaben.

Um es zu laden, verwenden Sie:

$this->load->model('logon_model');

beachten Sie alle Kleinbuchstaben.

8
wclark

Ich löse das auf diese Weise:

  1. Ich benenne die Datei do Pagemodel.php um
  2. Klassenname zu Pagemodel erweitert ...
  3. Ich rufe beim Autoload auf: $autoload['model'] = array('Page_model'=>'page');

Funktioniert gut .. ich hoffe helfen.

5
Gabriel Glauber

In CodeIgniter 3.0-dev (von github abrufen) funktioniert dies nicht, da das CI als Großbuchstaben des ersten Buchstaben gesucht wird.

Sie finden den Code in system/core/Loader.php Zeile 282 oder unten:

$model = ucfirst(strtolower($model));

foreach ($this->_ci_model_paths as $mod_path)
{
    if ( ! file_exists($mod_path.'models/'.$path.$model.'.php'))
    {
        continue;
    }

    require_once($mod_path.'models/'.$path.$model.'.php');

    $CI->$name = new $model();
    $this->_ci_models[] = $name;
    return $this;
}

Dies bedeutet, dass wir die Datei mit dem folgenden Namen in application/models/Logon_mode.php erstellen müssen

4
ialbescu

Der erste Buchstabe des Dateinamens und des Klassennamens muss in Großbuchstaben sein. 

Ihre Modellklasse wird sein 

die Klasse Logon_model erweitert CI_Model

und der Dateiname lautet Logon_model.php

Greifen Sie von Ihrem Controller aus darauf zu

$ this-> load-> model ('Logon_model');

3
Avnish alok

Nachstehend finden Sie eine Antwort zu @jakentus:

  1. Ändern Sie den Dateinamen im Modellpaket in Logon_model.php (Großbuchstaben als @jakentus richtig angegeben)

  2. Ändern Sie den Klassennamen wie den Dateinamen, d. H.

    class Logon_model extends CI_Model

  3. Ändern Sie den Namen auch in der Lademethode als

    $this->load->model('Logon_model');

Hoffe das hilft. Fröhliches Codieren. :)

2
Atul O Holic

Modelle müssen benannt und aufgerufen werden, wobei der erste Buchstabe des Modellnamens und der Rest in Kleinbuchstaben großgeschrieben werden muss. 

Zum Beispiel: $this->load->model('Logon_model');

und:

class Logon_model extends CI_Model {
...

Sie haben jedoch einen korrekten Dateinamen.

2

Das gleiche Problem ist aufgetreten, aber ich habe es behoben, indem ich meine Datei application/config/routes.php geändert habe.

Ich habe meine Controller-Verzeichnisse umstrukturiert und vergessen, sie in der Routendatei auszuführen.

Vorhin:

$route['application/apply'] = 'ex/application/account/create';

und nun:

$route['application/apply'] = 'application/account/create'; 

1
Suleiman Umar

sie müssen den Anfangsbuchstaben Ihres Modellnamens ändern. In Localhost-Kleinbuchstaben funktioniert das ordnungsgemäß, aber online funktioniert dies nicht. für Exa: 

common_model.php

ersetzt zu  

Common_model.php
1
sandeep kumar

Das Ändern des Namens des Modellnamens, beginnend mit Großbuchstaben, funktioniert. Beispiel: Login_model.php statt login_model.php

1
user3642940

Ändern Sie den Namen der Modelldatei. Beginnen Sie mit Großbuchstaben wie folgt: Logon_model.php

Dies geschieht, wenn wir unser Projekt von einem Windows-Server auf einen LINUX-Server migrieren, da bei Linux die Groß- und Kleinschreibung beachtet wird, während Windows dies nicht tut. 

Wenn Sie also unter Windows keinen Dateinamen mit Großbuchstaben schreiben, funktioniert das auch, aber nicht unter Linux.

0
Krish

Ich füge einfach mein Problem hinzu, das ich hatte:

$this->load->model("planning/plan_model.php");

und der .php sollte nicht da sein, also hätte es sein sollen:

$this->load->model("planning/plan_model");

hoffe das hilft jemandem

0
Frank Conry

Stelle sicher:

  1. Erster Buchstabe in Großbuchstaben
  2. Exakter Name des Klassennamens als Dateiname 
  3. Stellen Sie sicher, dass Ihre Datei mit der Erweiterung .php endet

In meinem Fall hatte ich 1 und 2 richtig, habe aber vergessen, meine Datei mit der Erweiterung .php zu benennen. Wie ich es vergaß, keine Ahnung, aber es machte mir sehr schwer, das Problem herauszufinden

0
theTypan