2011-11-10 5 views
32

Ho cercato di caricare alcuni modelli per questo sito Web che sto costruendo. Tuttavia, per un motivo sconosciuto, che porterà il seguente errore:CodiceIgniter Accesso modello PHP "Impossibile individuare il modello specificato"

An Error Was Encountered 

Unable to locate the model you have specified: logon_model 

Ora, ho fatto la mia ricerca. Il problema sarebbe che IC elabora i nomi dei file in minuscolo. Tuttavia, sia il mio file e il file di chiamata è in minuscolo, come illustrato di seguito:

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'); 

L'esecuzione fa non portata di mano "del modello presente", si ferma quindi sul modello di carico. Ho provato a utilizzare:

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

Senza risultati. Hai bisogno di menzionare che il file del modello è posizionato correttamente nella cartella del modello giusto?

Come posso risolvere questo?

EDIT: Testata per il file del modello:

class Logon_model extends CI_Model { 

.... 
+1

Inoltre, è logon_model e non login_model, giusto? Altrimenti, vedere la risposta di wclark –

+0

@Kai Qing È tutto logon_model –

+0

Assicurarsi che la classe del modello e il nome del file siano uguali e solo la prima lettera deve essere maiuscola es. "Model_user" – RedFlow

risposta

51

Durante la creazione di modelli, è necessario inserire il file in application/models/ e il nome del file in tutto minuscolo - come logon_model.php

Il logon_model.php dovrebbe contenere le seguenti:

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


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

Ora, cosa si può fare , per verificare se il tuo modello di applicazione è raggiungibile, è provare ad aprirlo nel browser, ad esempio:
http://example.org/application/models/logon_model.php

Se viene visualizzato il testo , non è consentito l'accesso diretto allo script significa che si preme il file corretto (in caso di dubbi, provare a scrivere qualcos'altro in exit() nella prima riga).

In secondo luogo, per caricare il modello in vostro controller, si dovrebbe essere in grado di fare in questo modo:

public function index() 
{ 

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

} 

Se tutto sopra i controlli come previsto vorrei iniziare a guardare i permessi dei file e/o, eventualmente, i link simbolici se stai usando qualsiasi.

+0

Il nome del file php deve corrispondere al nome della classe e il primo carattere della classe deve essere in maiuscolo. Pertanto, dovresti inserire la classe Logon_model in Logon_model.php. La distinzione tra maiuscole e minuscole nel nome del file non è un problema se si è su Windows, ma sarà su Linux. – Jeremy

8

Ecco ciò che un modello dovrebbe essere simile: Assicurarsi che il vostro è così.

<?php 
    class Logon_model extends CI_Model { 

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

    function myFunc() 
    { 
     // do something 
    } 
} 

notare il nome della classe maiuscola.

Per caricarlo utilizzare:

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

nota tutto in minuscolo.

+0

Ho aggiunto l'intestazione, check it out –

+0

Ho aggiornato il mio risposta. Il tuo file modello è strutturato allo stesso modo? – wclark

2

I modelli devono essere denominati e chiamati con la prima lettera del nome del modello in maiuscolo e il resto in lettere minuscole.

Ad esempio: $this->load->model('Logon_model');

e:

class Logon_model extends CI_Model { 
... 

Ma lei ha ragione circa il nome del file.

+0

Li ho modificati entrambi come dici tu, e ancora non funziona! –

+0

Esattamente in quale cartella è inserito il tuo modello? Dovrebbe essere 'application/models /' e dovrebbe essere chiamato 'logon_model.php'. Se tutte le condizioni di cui sopra sono soddisfatte, non c'è motivo per cui non dovresti riuscire a caricarlo come "Logon_model". –

+0

Tutto è posizionato correttamente, quindi non lo capisco neanche io. –

3

In CodeIgniter 3.0-dev (scarica da github) questo non funziona perché l'elemento della configurazione è la ricerca come prima lettera maiuscola.

È possibile trovare il codice sul sistema/core/Loader.php linea 282 o sotto:

$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; 
} 

Questo significa che abbiamo bisogno di creare il file con il seguente nome su application/modelli/Logon_mode.php

48

Io uso codeigniter 3+. Ho avuto lo stesso problema e nel mio caso ho cambiato il nome del file del modello a partire dal caso uppser.

Logon_model.php

+2

Stesso. Sto usando Codeigniter 3.0 e avevo bisogno di nominare il file nella cartella del modello da 'test_model.php' a 'Test_model_php'. –

+1

Grazie di aver risparmiato il mio tempo :) –

+3

Desidero precisare che la lettera maiuscola è richiesta solo su sistemi basati su unix come linux e mac osx. su Windows che iniziano con una lettera maiuscola funziona bene. – Corne

4

risolvo questo con questo modo:

  1. ho rinominare il file fare Page_model.php
  2. Nome classe di Page_model estende ...
  3. Chiedo autoload: $autoload['model'] = array('Page_model'=>'page');

Funziona bene .. Spero di essere d'aiuto.

2

aggiunta alla risposta @jakentus, di seguito è quello che ha funzionato per me:

  1. Modificare il nome del file nel pacchetto modelli di Logon_model.php (maiuscolo prima lettera come @jakentus detto correttamente)

  2. modificare il nome della classe come stessi nome di file ad esempio

    class Logon_model extends CI_Model

  3. C Hange il nome nel metodo carico troppo come

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

Spero che questo aiuti. Buona programmazione. :)

1

Ho riscontrato lo stesso problema, ma l'ho risolto modificando il file application/config/routes.php.

Ho apportato alcune modifiche alle directory del controller e ho dimenticato di eseguirlo sul file di rotte.

precedenza:

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

e ora:

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

2

Prima lettera del nome del file e il nome della classe deve essere in maiuscolo.

La classe modello sarà

classe

Logon_model estende CI_Model

e il nome del file sarà Logon_model.php

accesso dal vostro contoller come

$ questo-> carico-> modello ('Logon_model');

1

Modifica del nome del nome del modello che inizia con le opere in maiuscolo. Esempio: Login_model.php invece di login_model.php

0

è necessario modificare il nome del modello prima lettera maiuscola. nella piccola lettera localhost funziona correttamente ma online non funziona. per exa:

common_model.php 

sostituito a

Common_model.php 
0

solo aggiungendo il mio problema che ho avuto:

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

e la .php shouldnt essere lì, quindi avrebbe dovuto essere:

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

speranza che questo aiuta qualcuno

0

Accertarsi che:

  1. Prima lettera maiuscola
  2. Nome classe esatto nome come nome del file
  3. Assicurati che il tuo file termina con estensione .php

Nel mio caso ho avuto 1 e 2 corretto, ma ho dimenticato di chiamare il mio file con estensione .php. Come ho dimenticato, nessuna idea, ma sicuramente mi ha dato un sacco di tempo cercando di capire il problema