[RISOLTO] E dopo che ho creato un modulo come lo richiamo?

Salve a tutti ancora =).

Sto cercando di capire come posso realizzare un modulo. Sto seguendo una guida ma. Ma come lo carico sto modulo? La querystring. Quale deve essere?

Nome modulo: wiki

Nome controller del modulo: defaultController

Nome della action del modulo: view

Altro … id: ciao

index.php?r=wiki/default/view&id=ciao

chi l’ha dura la vince. Ho fatto il mio primo modulo ed il mio primo wiki. Adesso posso premiarmi con una pausa.

Dopo tutto questo tempo, in cui hai anche utilizzato il modulo rights, non sapevi come fare? :P

Piccolo lapsus :-p. Cmq risolto, ovviamente. Ammetto di non aver mai guardato la querystring usando RIGHTS. Devo solo approfondire un po’ l’uso di un modulo da parte delle applicazioni. Così inizio a trasferire in moduli tutte le logiche di business delle mie applicazioni. Yii mi ha stupito ancora una volta. Ed ho la pelle d’oca ogni volta che scopro qualche cosa di nuovo.

Io preferisco giocare con l’urlmanager per avere link cosi:

www.sito.com/wiki/default/view/ciao.html

Io preferisco non mettere mai mano all’urlmanager. Ma il mio è un problema di pigrizia. Sono “scarso”. Non ho ancora capito come si fa :-p. Non tanto la parte di yii. Ma il resto. Cosa dire a chi: apache2? .htaccess? In effetti un link del tipo:

http://www.miosito.com/index.php?r=this/is/a/querystring

è meno interessante di

http://www.miosito.com/this/is/a/querystring

Ammetto di non aver mai messo mano ne a mod_rewrite ne a file .htsaccess. Per lo meno non abbastanza da ricordarmi cosa bisogna fare. Di fatto, ad oggi non ho ancora trovato una guida semplice ed abbastanza stupida da farmi capire che cosa c’è da fare. Ci ho provato diverse volte. Ma senza grande successo. Ho sempre scartato l’opzione dell’urlmanager. Ho cercato di leggere ogni guida di questo mondo. Non capisco mai cosa dimentico di leggere.

In realtà c’è scritto nella guida e nel file main del config di yii :P

Basta che decommenti




		'urlManager'=>array(

			'urlFormat'=>'path',

			'rules'=>array(

				'<controller:\w+>/<id:\d+>'=>'<controller>/view',

				'<controller:\w+>/<action:\w+>/<id:\d+>'=>'<controller>/<action>',

				'<controller:\w+>/<action:\w+>'=>'<controller>/<action>',

			),

		),



mentre per l’.htaccess

#Options +FollowSymLinks

#IndexIgnore /

RewriteEngine on

nel caso hai una cartella chiamata testyii, altrimenti lascia solo /

RewriteBase /testyii/

if a directory or a file exists, use it directly

RewriteCond %{REQUEST_FILENAME} !-f

RewriteCond %{REQUEST_FILENAME} !-d

otherwise forward it to index.php

RewriteRule . index.php

Ho lasciato spento il pc ieri e torno solo ora… ma vedo che hai già ricevuto risposta.

In Yii basta modificare il file di configurazione.

Al massimo c’è da modificare il DNS se vuoi fare domini tipo: en.sito.com/ o it.sito.com/ invece di www.sito.com/en/ e www.sito.com/it/

Si ma non capisco cosa significhi tutto questo =). Io leggo:

RewriteEngine on @@@ Questo è facile: attiva l’engine di rewrite

RewriteBase /testyii/ @@@ Riscrivi la base /testyii/ ? cioè? Cosa significa?

Per capirci… che corrispondenza ho tra querystring e file system?

RewriteCond %{REQUEST_FILENAME} !-f

RewriteCond %{REQUEST_FILENAME} !-d

Qui ho le mani nei capelli. Suppongo che il file richiesto (quindi index.php) … !-f? !-d?

RewriteRule . index.php

Mmmm intuisco che se non indico nulla, index.php viene "eliminato".


Mi spiego meglio:

se io leggo index.php?r=ciao/mondo/ladro

so che yii punta al modulo ciao, nel controller mondo, nella action ladro. Ho perfettamente chiaro dove si trova il model il view ed il controller. Parafrasando, ho perfettamente chiara la corrispondenza biunivoca tra una querystring ed il file system.

Nel caso dell’url rewriting, come “mappo” ciò che scrivo dentro .htaccess ad un corrispondente url?

Con yii va bene. Ho fatto delle modifiche. Ma la parte lato server? Basta aggiungere il modulo mod_rewrite ed attivarlo da qualche parte? Purtroppo di questa faccenda ho capito solo il concetto. La capisco, ma non so dove mettere le mani. Io vorrei eliminare dalle querystring il pezzo "index.php?r=". Ma non credo che si possa fare da yii. Credo vada fatto via .htaccess. O sbaglio?

Questa cosa è frustrante =)

Se segui le indicazioni che ti ho dato poi il percorso diventa: sito.it/controller/azione/parametro

tutto qui

Mi stai dicendo che nemmeno tu sai il perché va?

Indichi solamente il percorso base.

Gli indirizzi fanno riferimento a alla posizione sito.com/testyii/ e non a sito.com/

Intuisci male. Le 3 righe un unico comando.

Se si verificano le condizioni 1 e 2 allora viene eseguita la regola alla riga 3.

Il . non significa “nulla”, ma significa “tutto”. E’ come l’asterisco, o il % in mysql.

https://httpd.apache.org/docs/current/mod/mod_rewrite.html#rewritecond

Ignora .htaccess che va bene cosi. Guarda solo il file di configurazione. Tu passi il controller e la action. Eventualmente la view la gestisci dentro alla action e la passi come parametro.

Esempio

sito.com/controllerMio/actionTest/bellavideata.htm




controllerMio.php

function actionTest($id){

  render($id); #renderizza bellavideata

}

# Codice non testato scritto solo a scopo esplicativo!!!



Beh =) intanto potresti aprire un nuovo post. In questo stiamo discutendo di altro :-p.

Marco =). Io non riesco a capire se non vedo .htaccess, file di configurazione, e codice tutto insieme. Per spiegare ad una persona l’MVC di Yii gli ho indicato la querystring, il controller, la view, ed il model. TUTTO.

Per comprendere sta cosa del mod_rewrite, vorrei capire tutti i passaggi per arrivare da

http:// www.example.com / index.php ? ciao=mondo&pippo=pluto

a

http:// www.example.com /mondo/pluto

  • cosa fare nel file .htaccess?

  • cosa fare con yii?

  • cosa fare … ?

  • … ma sopratutto: perché va fatto?

Io purtroppo non so nemmeno se la mia macchina in locale è configurata bene per mettere in pratica quello che mi dite. Vi prego di non dare per scontato nulla. Mi sembra che le vostre soluzioni siano validissime. Ma non sono sicuro di avervi esposto un’analisi completa della mia situazione. Mi rendo pure conto di essere un tantino noioso. =)

Qualche anima pia avrebbe voglia di fare una sessione con TeamViewer?

Quoto …sono stato anticipato!

Niente già è funzionante. Tutte le richieste vengono inoltrate a (e quindi gestite da) index.php

L’esempio che tu hai fatto non chiami un controller ed una action ma passi dei parametri. In questo caso devi modificare (aggiungere delle regole) a l’url manager.

Per rendere i link user friendly, parlanti, per far capire all’utente(ed ai motori di ricerca) che cosa sta vedendo.

Se tu scrivi localhost/testyii/controllore/azione e ti dice che non esiste il controllore e l’azione il tutto dovrebbe funzionare, in quanto è yii a dirti che non ci sono quelle due cose. Se invece non vedi la videata di yii ma un semplice page not found allora può essere che ci siano problemi di configurazione.

La domanda "perché devo farlo?" non era riferito ai motori di ricerca. Era legato alla sintassi ed alla semantica dei singoli comandi di .htaccess. Io non capisco il perché dei comandi.

Per capirci … a cosa corrisponde questo? Perchè devo farlo? Posso anche non farlo?




RewriteCond %{REQUEST_FILENAME} !-f

RewriteCond %{REQUEST_FILENAME} !-d



Come ti ho detto le 3 righe vanno lette tutte assieme

Non hanno senso queste due senza la terza.

Queste sono la prefazione della terza.

La terza riga


RewriteRule . index.php

inoltra tutte le richieste che arrivano ad Apache al file index.php, ma questo solo se si verificano le due condizioni:


RewriteCond %{REQUEST_FILENAME} !-f

ossia che l’url richiesto non sia un file ! = NOT -f = file esistente (dal sito che ti avevo dato: “Treats the TestString as a pathname and tests whether or not it exists, and is a regular file.”)


RewriteCond %{REQUEST_FILENAME} !-d

ossia che l’url richiesto non faccia riferimento ad una directory ! = NOT -d = directory esistente (dal sito che ti avevo dato: “Treats the TestString as a pathname and tests whether or not it exists, and is a directory.”)

Spero sia chiaro. :smiley:

Direi che sei stato chiarissimo. Questa sera provo subito e spero di non avere problemi, altrimenti inizio a sentirmi davvero un caso patologico.