2012-03-19 11 views

risposta

25

E 'possibile, ma piuttosto cattiva pratica in un quadro MVC. Dovresti ripensare e riorganizzare il tuo codice se pensi di aver bisogno di usare il componente in un modello perché qualcosa è chiaro sbagliato.

Un componente è pensato per condividere il codice tra i controller, solo tra i controller.

Per condividere il codice riutilizzabile tra i modelli sarebbe un comportamento. Per una vista sarebbe un aiuto.

Se si dispone di un codice veramente generico, dovrebbe essere una lib o inserirlo nella cartella Utility/spazio dei nomi o creare un nuovo spazio dei nomi. Controlla le classi esistenti lì per avere un'idea di cosa mettere lì.

Non è stato fornito alcun codice, pertanto non è possibile fornire alcuna raccomandazione reale su come effettuare il refactoring. Tuttavia, il modo in cui si desidera utilizzare il codice esistente non funzionerà nel contesto MVC, quindi è tempo di ripensare il proprio approccio a qualsiasi cosa si cerchi di fare.

+6

ed è usato in diversi luoghi, sarebbe meglio organizzato come Lib – mark

10

È possibile utilizzare un componente all'interno di un modello (ma non posso commentare se questo è consigliato o una best practice).

Ispirato da original source, un esempio per utilizzare un componente chiamato ‘Geocoder’ in un modello:

App::import('Component','GeoCoder'); 
$gc = new GeoCoderComponent(new ComponentCollection); 

quindi è possibile utilizzare $gc per chiamare le funzioni del componente.

-

P.S .: Non voglio incoraggiare pratiche di programmazione cattive, ma a volte la pressione delle scadenze (nei progetti del mondo reale) può costringere uno sviluppatore di prendere tali decisioni.

+0

Qualche volta il nostro senore ci fa pressione perché non sappia cos'è l'arco in mvc (credo). – Debasis

+2

"Scadenze" sono una * scusa pessima * per non scrivere codice corretto. Non è niente che richiede "lavoro", basta metterlo nel posto giusto. Non farlo correttamente sta giocando a Jenga: sposta il codice e accumula cazzate fino a quando non si blocca.È questione di minuti di codice in movimento nel posto giusto, tranne che l'intera "architettura" è già completamente rovinata. Finirai con un disordine irraggiungibile che diventerà orribile costoso da mantenere e eseguire il debug ad un certo punto. – burzum

+0

Hai sbagliato le mie intenzioni. Leggevo il codice completo 2 al college, in modo da scrivere un codice migliore professionalmente. Leggo gli standard PSR in tempo reale, in modo da poterli implementare nel mio lavoro diurno. Spero di chiarire da dove vengo - sono un programmatore perfezionista OCD, e non taglierei mai gli angoli con il mio codice. Imparo qualcosa di nuovo ogni giorno, e lo stesso compito che svolgo sei mesi dopo sarà più efficiente, questo accetto. –

-1

@ AD7six

// Use anywhere 
AuthComponent::user('id') 

// From inside a controller 
$this->Auth->user('id'); 

Dalla documentazione torta di PHP che forniscono AuthComponent::user('id') in modo che possa essere utilizzato in luoghi diversi da un controllore.

Forse ho bisogno di un suggerimento più grande, ma perché il mio modello non dovrebbe essere in grado di accedere alle informazioni ACL?

Problemi correlati