Controller do Layout

E ahe brows blz,

Estou com uma pequena duvida, estou desenvolvendo uma pagina que o form de login esta no layout(main.php) pois deve aparecer em todas as pagina. Onde fica o controller do layout para que eu possa renderizar este form e fazer as suas validação.

Valeu

Opa

Faça um novo component na pasta components, por exemplo loginForm

tambem crie uma model para o login

o código do loginForm seria algo como




<?php

class loginForm{

	protected $model;

	protected function renderContent()

	{

   	if(!$model)

         	$this->model=new UserModel;

    	//crie o form usando o model aqui

	}

?>



e no layout use ele como




<?php if(Yii::app()->user->isGuest) 

      	$this->widget('loginForm'); 

?>



acabei de escrever o código, pode conter erros, mas a idéia de estrutura seria essa

espero ter ajudado

Esta dando este erro no meu codigo:

Fatal error: Cannot access parent:: when current class scope has no parent in D:\websites\transconect\protected\components\LoginForm.php on line 7

O meu codigo component/loginForm.php


<?php

class loginForm{


      

       public function init(){

            parent::init();

       }


       protected function renderContent(){

		$this->render('loginForm');

	}

}




e na pasta views no compoment/views/loginFrom.php


 <?php $form=$this->beginWidget('CActiveForm', array('id'=>'login-form',	'enableAjaxValidation'=>true)); ?>

        <div class="row">

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

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

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

	</div>


	<div class="row">

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

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

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

	</div>


	<div class="row rememberMe">

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

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

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

	</div>


   	<div class="row submit">

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

	</div>

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

Se eu tiro o init da erro e se eu coloco da este erro ahe.

Me desculpe mais eu nunca precisei criar um widget a nao ser agora entao preciso de ajuda…valew…

Onde eu estou Errando?

Edson Rodrigues,

Layouts não tem controllers. O Controller que vc acessa no layout é o controller corrente.

Mesmo o layout não tendo controller específico, nada impede que vc acesse uma action a partir dele. Vc pode fazer seu login no layout, e apenas setar a propriedade action do form com o endereço da action que vc quer acessar.

Se estiver usando CActiveForm, veja aqui, ou se vc está usando Chtml::form(), veja aqui.

Seu widget* precisa extender CPortlet e pode esquecer o method init, caso não for usar, não é necessário

antes da classe adicione esta linha :

Yii::import(‘zii.widgets.CPortlet’);

para importar a classe CPortlet

Ta blz mais se no caso a minha aplicaçao tiver varios controles e quando eu setar o action ao controler correspondente como eu retorno na pagina que o usuario estava tipo, ele esta na pagina de produtos ai ele deseja fazer o login, ele faz mais tem que voltar na mesma pagina que ele estava, mais a action estava em outro controler…

E outra como eu faria para retornar o erro caso o usuario e senha estivesse errada. Estou falando de um site que tem varios controlles.

Pois no meu site tem uma pasta produto que tem o controlerProduto e uma pasta home que tem o controlerHome, e ambas tem o login

Valew

Aqui fica a minha resposta em português de Portugal:

Todos os controladores são extensões da classe Controller que se encontra em protected/components. Se criares aí uma accão ela fica disponivel em todos os controladores. Por isso podes usar uma funcção na classe Controller e vai ficar disponivel em todos os controladores.

No entanto, acho que não devias fazer assim, o login pode ser feito sempre no mesmo controller, o form do login pode estar no layout mas o controller que faz o login é sempre o mesmo.

Espero ter ajudado

Edson

Eu não lembro exatamente, mas tinha uma forma. Fiz isso pra empresa, mas nem lembro como, faz tempo. na segunda dou uma olhada. Mas acho que era do Yii mesmo…

Cara, olhei aqui o código que eu fiz, e fui lembrar como fiz. Não tem nada demais, e a solução que eu tinha feito é bem simples.

Só renderizei o form de login no teamplate e passei +1 parâmetro junto com o form contendo a URL de retorno.

Blz eu fiz o formulario login via html sem usar os helper do yii, no action eu coloquei(livros/index) pois o site que estou fazendo vai validar o usuario e mostrar para ele os livros que estão vinculado a sua conta. Ate ai blz.

O caso é o seguinte o site tera dois login um para frontend que seria os clientes e outro para o backend sistema admin do site, o do Backend ja esta funcionado este esta ok, o meu problema esta sendo o do frontend.

Gostaria de saber como eu posso validar este usuario pois eu nao estou usando nenhum model form pois fiz o form na mao e eu estava pensando fazer as validaçoes dos campos no proprio action. O problema é que eu nao tenho a minima ideia de fazer a validaçao deste usuario com o banco, tenho um model usuario, sei que tb tem a class UserIdentity mais como poderia fazer de forma simples esta validação sem que utilize esta class pois como eu disse sao dois formulario de login e eu nao quero que aconteça confritos. Apesar de estar separado.

A minha ideia é fazer a validaçao deste usuario no proprio (livro/index) mais como poderia adapitar o UserIdentity neste action, pois os comando (Yii::app()->user->id e outros) nao pode ter conflito com o backend.

Resulmindo tudo eu quero separar o login frontend e o Backend.

Em alguem poderia me dar uma ideia de como fazer?