Best Practice: Vista Con Diversi Model - Come Creare I Controller ?

La mia domanda è di pura teoria di programmazione, chiedo consiglio proveniente dalla vostra esperienza personale.

Avendo Company [1 - N] CompanyContacts,

nella form delle company, se !isNewRecord è visibile anche la form / list per aggiungere i Contacts.

Attualmente la company l’ho fatta con delle actionCreateContact, actionDeleteContact, etc …

Io non ho creato il CRUD da gii per il model CompanyContact, perchè ogni contatto può esistere solo se appeso ad una ed una sola company.

E’ stata una buona scelta ?

O dovrei creare almeno il CompanyContactController e far si che il CompanyController usi le action del CompanyContractController ?

Io ho una situazione simile per gestire i contatti dell’anagrafica: 1 anagrafica ha n contatti.

nel mio caso ho un controller che gestisce anche i contatti a cui mando le richieste di CRUD da parte dell’anagrafica.

In questo modo gestisco meglio il codice.

scusami, ma non ho capito: le varie action che gestiscono i contatti sono DENTRO al controller dell’anagrafica?

scusa la confusione:

ho un controller contattiController, con tutte le sue brave action, dal form di anagrafica con ajax inserisco/elimino i contatti in update, mentre in create uso una action di Controller che mi restituisce una serie di input del tipo contatti[n][valore]: al submit del post l’anagrafica viene inserita, e poi gli dico foreach $_POST[‘Contatti’] Contatto::save().

Uhm … grazie … ma non mi ispira molto …

Io genero model e crud direttamente da gii. E poi sfrutto il codice generato. Vuole dire che se devo aggiungere un contatto, sfrutto CompanyContacts::actionCreate(); perché se uso yii per fare prima, tanto vale sfruttarlo del tutto e lasciare che sia lui a scrivere il codice del crud. Quello che poi vado a cambiare, sono i vari redirect e/o qualche cosa nelle view.

Ci sto, è appropriato.

Però … il fatto è che c’è di mezzo l’aggiornamento di liste ed altre cose via ajax, e l’oggetto principale è Company.

Io perciò ho bisogno di eseguire CompanyContacts::actionCreate, ma poi questo mi deve fare il render di un partial di company con il model di company dentro, come minimo per avere il companyId , il name ed alcuni altri dati…

sto ancora sbagliando approccio vero ?

Secondo me sbagli perché vuoi renderizzare il template con i dati appena creati. Quello che secondo me puoi fare, è farti restituire un json. Restituire coincide con renderizzare in questo caso.




    echo array(json_encode(array(

        'id' => 2,

        'username' => 'sensorario',

        'blog' => 'www.yiinotes.com',

    )));die



Ed a questo punto, l’aggiornamento ajax potrebbe essere simile a questo




    $.post('controller/action', {'dati':'passati', 'via':'post}, function(json){

        // Qui recuperi i valori restituiti dal json in questo modo

        // json.id

        // json.username

        // json.blog

    }, 'json');



Ne tengo conto, grazie