2012-02-08 9 views
14

Ho una classe chiamata MyClass. Vive in app/Lib/MyDir/MyClass. Mi piacerebbe usare App: uses() per caricarlo, ma non riesco a farlo funzionare.CakePHP 2.X - caricamento classe personalizzata in app/dir Lib

In CakePHP 1.3 vorrei caricarlo tramite:

App::import('Lib', 'MyDir/MyClass'); //this still works in CakePHP 2.1 

In CakePHP 2.1 che sto cercando di fare:

App::uses('MyClass', 'Lib/MyDir'); 

Quando cerco di 'nuovo' fino MyClass ottengo Class ' MyClass 'non trovato.

Non è possibile utilizzare App :: utilizza su classi Lib personalizzate? Non posso continuare a utilizzare App :: import() perché se "App :: import ('Lib', 'MyDir/MyClass'); ' appare 2x nel percorso del codice Ho un errore 'Can not redeclare class' in lib/Cake/Core/App.php sulla riga 531

cosa sto facendo male?

Modifica: quindi se faccio App :: uses ('MyClass', 'MyDir'); Funziona. Non sono sicuro se questo è come dovrebbe comportarsi, ma segnalare bug.

+0

Ho trovato il seguente commit che dovrebbe risolvere il problema (renderà il mio utilizzo sopra funziona). Una volta rilasciato, aggiornerò questa domanda. https://github.com/cakephp/cakephp/commit/8ed4876830546593f20db6c7e9aed299aa76a80a – rynop

+0

** Chiunque faccia ricerche su Google ** assicurati che il file contenga una classe con lo stesso nome. [maggiori informazioni in questa risposta] (http://stackoverflow.com/questions/19120409/cakephp-unable-to-load-class-from-app-lib/37231878#37231878) –

risposta

20

Hai provato

App::uses('MyClass', 'MyDir'); 

? dal momento che "Lib" può essere visto come una directory di base

PS: si suppone che si debba raggruppare tutto all'interno di Lib in sottocartelle (pacchetti) simili al core.

+0

Sì, questo funziona. Ma questo non sembra intuitivo. http://book.cakephp.org/2.0/en/core-utility-libraries/app.html#App::uses ha anche un esempio per "Lib". Sì, sto cercando di mettere tutto in sottocartelle. Diciamo che non avevo una classe nella cartella Lib in una sottocartella (era solo in app/Lib/MyClass.php) - non sarei in grado di caricarla con :: uses()? – rynop

+0

sì, lo sei. non solo App :: uses ('MyClass', 'Lib'); ma dovrebbe essere evitato :) – mark

+0

Sto lavorando nella versione cakephp 2.5.4. Devo importare una classe Lib in un'altra classe Lib. es: Ho una classe Search.php sotto cartella Lib e GooglePlus.php sotto Lib/cartella Google. Ho bisogno di utilizzare il file GooglePlus.php in Search.php, ma non funziona. Ho provato app: la funzione build è stata descritta in http://book.cakephp.org/2.0/en/core-utility-libraries/app.html per registrare la classe Lib. Come uso una classe lib in un'altra? o se non è possibile, qual è l'approccio alternativo per questo? – Dashrath