Regole naming classi per moduli e ZF 1.10

Salve,

sto sviluppando un'applicazione a moduli, e sto incontrando problemi con il naming delle classi dei moduli.

Sto usando la versione 1.10 del framework. Vedendo un esempio, sembra che ora, per il modulo di default, non si debba più usare il prefisso Default, ma Application, con relativa voce di configurazione appnamespace = "Application".

Però il mio dubbio più grande è un altro: di default ci sono delle risorse che il framework mappa in automatico, come layouts, views ecc. Il mio progetto non prevedeva una directory forms, e l'ho creata. Ma cmq è una risorsa che viene mappata in automatico, nella dir Forms e nel mapping logico con il namespace form.

Però non mi funziona. Mi dice che non trova la classe Main_Form_Login (nel mio modulo main, sotto la cartella forms, e di nome login.php).

Devo impostare qualche cosa per far caricare le risorse di questo tipo, o dovrebbe farlo in automatico?

Ed è mai possibile, che ad ogni versione cambino le impostazioni in questo modo? Ci sarà mai un pò di stabilità nel framework?

Grazie

Luca

inviato 6 anni fa
Luca450Mhz
X 0 X
Devo impostare qualche cosa per far caricare le risorse di questo tipo, o dovrebbe farlo in automatico?

Dovrebbe farlo in automatico nel momento in cui tu crei il nuovo oggetto.

Ed è mai possibile, che ad ogni versione cambino le impostazioni in questo modo? Ci sarà mai un pò di stabilità nel framework?

Non mi sembra che variano di continuo le impostazioni ad ogni rilascio, comunque devi continuare a mantenere il nome dei path corretti...mi spiego, devi stare attento alle maiuscole e minuscole che utilizzi.

In tal proposito puoi farci vedere come hai nominato le varie directory e i file in esse contenute?

risposto 6 anni fa
Mario Santagiuliana
X 0 X

Nella reference guide sembra che ora (con la versione 1.10) sia consigliato di mantenere dentro la application le cartelle

-controllers

-models

-views

e dentro module una cartella per ogni modulo con all'interno una struttura identica. Quindi come namespace del modulo principale, quello al di fuori della modules, debba essere Application. Ma prima non era così!

Cmq la struttura che ho io è la seguente:

application

../configs

../db

../layouts

../../scripts

modules

../main

../../controllers

../../../IndexController.php

../../forms

../../../Login.php

../../models

../../views

admin

[stessa struttura del modulo di sopra]

data

library

log

public

tests

Il modulo main è quello di default. In application.ini

resources.frontcontroller.moduleDirectory = APPLICATION_PATH"/modules"
resources.frontcontroller.defaultModule = "main"

Login.php

<?php

class Main_Form_Login extends Zend_Form {
   
   public function __construct($options = null) {
      parent::__construct($options);
      $this -> setName('login');
      $id = new Zend_Form_Element_Hidden('id');
      $id -> addFilter('Int');
      $username = new Zend_Form_Element_Text('username');
      $username -> setLabel('Username')
        -> setRequired(true)
        -> addFilter('StripTags')
        -> addFilter('StringTrim')
        -> addValidator('NotEmpty');
      $password = new Zend_Form_Element_Password('password');
      $password -> setLabel('Password')
        -> setRequired(true)
        -> addFilter('StripTags')
        -> addFilter('StringTrim')
        -> addValidator('NotEmpty');
        
      $submit = new Zend_Form_Element_Submit('submit');
      $submit -> setAttrib('id', 'submitbutton');
      $this -> addElements(array($id, $username, $password, $submit));
   }
   
}

Nell'LoginController del modulo main ho una action

function indexAction(){
   $form = new Main_Form_Login();
   $this -> view -> form_login = $form;
}

e ricevo l'errore:

Fatal error: Class 'Main_Form_Login' not found

Dove sbaglio?

Grazie mille!

Luca

risposto 6 anni fa
Luca450Mhz
X 0 X

Immagino che tu stai sbagliando qui:

../../forms

Prova a modificare il nome della tua classe con Main_Forms_Login.

risposto 6 anni fa
Mario Santagiuliana
X 0 X

Niente da fare.. cmq il mapping automatico funziona con il nome della cartella plurale, ma il nome delle classi deve essere al singolare ('controller', 'controllers/', 'Controller)

Ho trovato degli esempi della versione 1.10, che alla fine riesco a far funzionare, ma non prevedono più moduli. Nel momento che cerco di aggiungere gli altri moduli.. niente da fare.. la documentazione è molto vaga e nebulosa.. ma perchè un prodotto di questo tipo non viene corredato da una documentazione adeguata? .. vabbè ..

risposto 6 anni fa
Luca450Mhz
X 0 X
ma perchè un prodotto di questo tipo non viene corredato da una documentazione adeguata?

In realtà la documentazione per alcune classi ha il minimo indispensabile.

A volte il codice e il funzionamento delle classi è estremamente logico e di conseguenza la documentazione ci "passa sopra velocemente".

Non ho capito, allora adesso hai risolto il tutto mettendo il nome al singolare per le classi e al plurale per le directory?

risposto 6 anni fa
Mario Santagiuliana
X 0 X

Alla fine sono riuscito a risolvere il problema..

Nel file di configurazione bisogna, "semplicemente", (dato che non è scritto da nessuna parte nella guida.. o almeno a me è sfuggito ognuna delle 50 volte che l'ho letta e riletta..  8) ) mettere:

resources.modules[] =

In automatico si abilitano i moduli multipli.

A quel punto basta usare le cartelle standard (forms, models, ecc) per le classi dei Form, Model, ecc.

Tutto il meccanismo si mette in funzione con la riga di codice scritta su in alto, altrimenti non "capisce" che c'è un modulo in più, e quindi non sa dove cercare le classi.

E anche questo sembra risolto per ora.. :)

Grazie!

Ciao

Luca

risposto 6 anni fa
Luca450Mhz
X 0 X

Ah...bene a sapersi  ;D

Ciao ciao e grazie per l'info

risposto 6 anni fa
Mario Santagiuliana
X 0 X
Effettua l'accesso o registrati per rispondere a questa domanda