Esistono funzioni di codificatore nativo che posso utilizzare per determinare se un determinato modello è già stato caricato? Si può usare php class_exists()
per sapere se un modello è già stato caricato?Codeigniter: come posso sapere se un modello è già stato caricato?
risposta
Sarei tentato di estendere la classe principale CI_Loader
. (Vedere extending Core Class)
class MY_Loader extends CI_Loader {
function __construct()
{
parent::__construct();
}
/**
* Returns true if the model with the given name is loaded; false otherwise.
*
* @param string name for the model
* @return bool
*/
public function is_model_loaded($name)
{
return in_array($name, $this->_ci_models, TRUE);
}
}
Si potrebbe essere il controllo per un determinato modello con il seguente:
$this->load->is_model_loaded('foobar');
That strategy è già in uso da parte della classe CI_Loader
.
Questa soluzione supporta la funzione di denominazione del modello di CI, in cui i modelli possono avere un nome diverso rispetto alla classe del modello stesso. La soluzione class_exists
non supporta questa funzionalità, ma dovrebbe funzionare correttamente se non si rinomina i modelli.
Nota: se è stata modificata la configurazione subclass_prefix
, potrebbe non essere più MY_
.
Modificato:
È possibile utilizzare la funzione log_message().
mettere questo nel costruttore del modello (parent :: Modello())
log_message ("debug", "model is loaded");
non dimenticate di impostare la configurazione di registro per la modalità di debug nel file config.php
$config['log_threshold'] = 2;
E impostare il permesso della directory di sistema/logs su scrivibile (per impostazione predefinita CI creerà i file di registro qui)
o impostare la directory dei registri in un'altra directory
$config['log_path'] = 'another/directory/logs/';
CI creerà quindi il file di registro nella directory. controlla i file di log come preferisci. È possibile ottenere il messaggio di debug per verificare se il modello è già caricato o meno nei file di registro.
questo mi consentirà solo di sapere se il file esiste, volevo sapere se il primo modello è stato caricato manualmente nel controller o se è stato caricato automaticamente tramite autoload – Xecure
riffing fuori quello Maxime Morin & Tomexsans hanno scritto, questa è la mia soluzione:
<?php
class MY_Loader extends CI_Loader {
/**
* Model Loader
*
* Overwrites the default behaviour
*
* @param string the name of the class
* @param string name for the model
* @param bool database connection
* @return void
*/
function model ($model, $name = '', $db_conn = FALSE) {
if (is_array($model) || !class_exists($model)) {
parent::model($model, $name, $db_conn);
}
}
}
?>
In questo modo, non è mai bisogno di (consapevolmente) di controllare se un modello caricato o non :)
situazione in cui stavo caricando le classi più di una volta e non lanciava alcun errore ma stava usando il limite di memoria PHP e questo risolveva il mio problema senza dover modificare nessun altro codice quindi grazie mille! – Sam
La soluzione più semplice è quella di utilizzare la funzione PHP class_exists
http://php.net/manual/en/function.class-exists.php
Ad esempio. se vuoi controllare se Post_model è stato definito o meno.
$this->load->model('post_model');
/*
a lot of code
*/
if (class_exists("Post_model")) {
// yes
}
else {
// no
}
Il più semplice è il migliore ..
- 1. Utilizzando Codeigniter, come posso sapere se un modulo è stato inviato con jquery submit()
- 2. javascript - sapere se è già stato aperto un collegamento
- 3. Come posso rilevare se un iframe è stato caricato?
- 4. Come posso sapere se un array di byte è già stato compresso?
- 5. Come posso sapere se un determinato pacchetto è già stato installato?
- 6. Come posso sapere se AdMob ha caricato un annuncio?
- 7. Come sapere se NSManagedObject è stato salvato?
- 8. Come posso sapere se un file javascript è già stato incluso in una pagina di livello superiore?
- 9. come sapere se l'evento "load" della finestra è stato attivato già
- 10. Come posso sapere se il computer è stato riavviato?
- 11. Come sapere se l'evento $ (window) .load()/window.onload è già stato attivato?
- 12. Come verificare se id esiste già - codeigniter
- 13. Come determinare se un evento è già stato sottoscritto
- 14. Come posso attivare un evento quando è stato caricato un modello di percorso JS angolare
- 15. Come posso sapere se Flash è caricato su un sito Web?
- 16. Come sapere se un PHAsset è stato modificato?
- 17. Come sapere se un modello è nuovo o no?
- 18. Come si aggiornano i dati in un documento mangusta che è già stato caricato?
- 19. Come posso sapere dove è stato istanziato un oggetto?
- 20. Utilizzando jQuery, come posso sapere se un modulo è cambiato?
- 21. Come posso verificare se un identificatore di riutilizzo è già stato registrato con un UITableView?
- 22. Come tornare a un UIViewController già caricato?
- 23. Come posso sapere se Visual Studio 2008 SP1 è installato?
- 24. JavaScript: come verificare se l'evento è già stato aggiunto
- 25. Come sapere se un elemento è reso?
- 26. Come posso sapere se un cavo di rete è stato scollegato?
- 27. Come posso sapere se un "assemblaggio" è davvero cambiato?
- 28. Come posso sapere se un controllo Delphi è attualmente visibile?
- 29. Come posso sapere se un determinato hWnd è ancora valido?
- 30. Come posso verificare se un file JS è già stato incluso?
Sì, è possibile e funzionerà – tomexsans