Login Widget Su Template Personalizzato

Buongiorno,

il mio obiettivo è realizzare un widget del classico "Login Form".

Premetto che sto utilizzando un template HTML appositamente modificato per YII.

Ho creato in "protected/components" LoginWidget.php:


<?php


Yii::import('zii.widgets.CPortlet');

 

class LoginWidget extends CPortlet

{

    protected function renderContent()

    {

        $this->render('loginWidget',array('model'=>new LoginForm));

    }

}


?>

ed in "protected/components/views" loginWidget.php:


<div class="form">

<?php $form=$this->beginWidget('CActiveForm', array(

	'id'=>'login-form',

         'action'=>Yii::app()->createUrl('site/login'),

        'enableAjaxValidation'=>false,


)); ?>




	<div class="row">

		<?php echo $form->textField($model,'username'); ?>

		<?php echo $form->error($model,'username'); ?>





		<?php echo $form->passwordField($model,'password'); ?>

		<?php echo $form->error($model,'password'); ?>


		<?php echo $form->checkBox($model,'rememberMe'); ?>

		<?php echo $form->label($model,'rememberMe'); ?>

		<?php echo $form->error($model,'rememberMe'); ?>


            <?php echo CHtml::button('Entra',

    array(

        'submit'=>array('site/login'),

        'confirm' => 'Are you sure?'

        // or you can use 'params'=>array('id'=>$id)

    )) ?>

		<?php echo CHtml::submitButton('Login'); ?>

	</div>


<?php $this->endWidget(); ?>

</div><!-- form -->

Per richiamare il widget in tutte le pagine nella main.php del mio template inserisco:


  <?php $this->widget('loginWidget');  ?>

Di fatti viene mostrato correttamente il form di Login in tutte le pagine, ma se provo ad autenticarmi non succede nulla, ed il mio url diventa da "index.php" a "?LoginForm%5Busername%5D=admin&LoginForm%5Bpassword%5D=admin&LoginForm%5BrememberMe%5D=0&yt1=Login#"

Mentre se mi loggo tramite “index.php?r=site/login” l’autenticazione avvine corretamente

Dove sto sbagliando?

Grazie in anticipo

leggiti per bene la parte delle guida di yii sull’autenticazione:

http://www.yiiframework.com/doc/guide/1.1/it/topics.auth

non c’è bisogno di inserire il login su tutte le pagine,

devi solo filtrare gli accessi per ogni controller, sulle azioni che ti interessano

e automaticamente una volta contatta quella pagina verrai redirezionato sulla pagina di login.

Ci sono anche delle estensioni che ti aiutano in merito, ma sono consigliate per applicazioni di una certa entità. Guardati rights, e rbac in generale.

Ciao st4nny,

Grazie come sempre per la tua risposta, purtroppo però mi sono spiegato male:

Vorrei inserire il form di login nel main.php del mio template; non per gestire i permessi o i ruoli, ma per dare la possibilità agli utenti di fare il login in qualsiasi parte del sito (index, contact etc…).

Semplicemente un form login funzionante da inserire nel main.php

Ho provato anche questa soluzione (sostanzialmente quanto già avevo fatto) ma nulla da fare.

Possibile che ci sia una interferenza con il javascript del template??

scusami ma non avevo capito bene quello che volevi fare.

ti confermo che il codice che hai postato fa quello che deve fare.

Ho creato una nuova webapp di test:




./yiic webapp /path/test



in components ho creato:




loginwidget.php

views/loginWidget.php



occhio a come chiami i file perchè a me dava errore quando dichiaravo nel main.php




<?php $this->widget('loginwidget');  ?>



tu invece avevi il file components/LoginWidget.php, linux è fiscalissimo… ma magari sei su windows.

Se posso dare dei consigli, in verità buone pratiche diffuse e non dettate da me, quando un file contiene il nome di una classe, è bene che il file contenga il nome della classe. LoginWidget dovrebbe essere il nome corretto.

Riguardo alla posizione delle nostre estensioni, dentro components ci andrebbero i componenti: questo è un widget e dovrebbe trovarsi dentro alla cartella extensions. Yii non è per nulla fiscale e qualche volta sembra bello poter mettere le cose dove vogliamo. Ma poi che cosa succede se condividiamo il nostro codice? Un po’ di widget stanno in una cartella, altri in un’altra ancora. … E così si finisce per rendere complicato il lavoro.

si tutto vero, anche io ho storto il naso per quanto riguarda la posizione del widget, ma immagino che il nostro Andrea.p voleva solo far funzionare le cose, poi dopo con tutta calma avrebbe sistemato il codice :lol:

Anche per il nome del file, è sacrosanto rispettare le regole a cui fa riferimento sensorario

nel main va:




<?php $this->widget('LoginWidget');  ?>



l’orario di ieri notte, mi ha imposto di fare le cose alla svelta (nella maniera meno consona)

Nel Ringraziare tutti per il prezioso supporto sono felice di informarvi che ho individuato il problema:

un tag html "<form>" di troppo che includeva il "login-form" di yii e ne comprometteva il funzionamento.

Avresti per caso un link sul YII quality code? In questo modo evito di ripetere questi "errori" in futuro.

Grazie di nuovo a tutti

Devi solo leggere la documentazione e leggere le regole del coding standard. Cercando a caso ho trovato questo: https://github.com/Ardem/yii-coding-standard