Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Void :

Zend Framework

Recommended Posts

digamos que você tenhos os seguintes modulos:

default => application/controllers/admin => application/admin/controllers/
O IndexController eh o controlador padrão, e é usado quando nenhum controlador foi solicitado.

ex:

www.site.com/

www.site.com/admin/

 

para fazer um controlador do módulo admin, o deve-se faze assim:

class Admin_IndexController{ }
se o modulo for o padrão, nao é necessário usar o nome do modulo na frente do nome da classe

Compartilhar este post


Link para o post
Compartilhar em outros sites

isso ae Magical Trevor,

 

lembrando perfect lion que é recomendado que voce crie sua própria classe de "Action", ou seja, que voce tenha uma classe PerfectLion_Controller_Action;

 

dessa forma, voce consegue personalizar seus scripts caso voce queira criar algum método que seja utilizado por varias classes de controle em seu sistema.

 

No meu classe, minha classe de controle esta ficando assim (não terminei) :

 

<?php/** * My Class in Zend Framework (My class for perform) * * LICENSE * * This source file is subject to the new BSD license that is bundled * * @category	My * @package	My_Controller *  */ abstract class My_Controller_Action extends Zend_Controller_Action{	/**	 * Método init, invocado assim que a classe é instanciada 	 *	 * Invocado em {@link __construct()} o último passo da instanciação. 	 * 	 * @return void	 */			 public function init()	 {	 	$this->_init();	 }	 	/**	 * Método abstrato _init, invocado assim que a classe é instanciada através do método	 * público init (sua assinatura é obrigatória);	 * 	 * @return void	 */			abstract protected function _init();	 	 	/**	 * Initialize View object 	 *	 * Initializes {@link $view} if not otherwise a Zend_View_Interface.	 *	 * If {@link $view} is not otherwise set, instantiates a new Zend_View 	 * object, using the 'views' subdirectory at the same level as the 	 * controller directory for the current module as the base directory. 	 * It uses this to set the following:	 * - script path = views/scripts/	 * - helper path = views/helpers/	 * - filter path = views/filters/	 * 	 * @return Zend_View_Interface	 * @throws Zend_Controller_Exception if base view directory does not exist	 */	public function initView()	{		require_once 'Zend/View/Interface.php';				if (isset($this->view) && ($this->view instanceof Zend_View_Interface)) {			return $this->view;		}		$request = $this->getRequest();		$module  = $request->getModuleName();		$dirs	= $this->getFrontController()->getControllerDirectory();		if (empty($module) || !isset($dirs[$module])) {			$module = 'default';		}		$baseDir = dirname($dirs[$module]) . '/views';		if (!file_exists($baseDir) || !is_dir($baseDir)) {			throw new Zend_Controller_Exception('Missing base view directory ("' . $baseDir . '")');		}		require_once 'Zend/View.php';		$this->view = new Zend_View(array(			'scriptPath' => $baseDir . '/templates',			'helperPath' => $baseDir . '/helpers',			'filterPath' => $baseDir . '/filters'		));		return $this->view;	}		/**	 * Seta o diretório das classes Model do projeto.	 *	 * Método público, geralmente invocado em todas classes de controle.	 * 	 * @return void 	 * @throws Zend_Controller_Exception se o diretorio de models nao existir.	 */		public function initModel()	{		if (function_exists("ini_set")){						$request = $this->getRequest();			$module  = $request->getModuleName();			$dirs	 = $this->getFrontController()->getControllerDirectory();			$baseDir = dirname($dirs[$module]) . DIRECTORY_SEPARATOR . 'models';						if (!file_exists($baseDir) || !is_dir($baseDir)) { 				throw new Zend_Controller_Exception('Missing base model directory ("' . $baseDir . '")');							} 			   					ini_set("include_path",ini_get("include_path") . SEP . $baseDir);					} else {						throw new Zend_Controller_Exception('Don\'t have ini_set permission');					}			}	/**	 * Do check if var user set in session, this method allways called 	 * before any action 	 * 	 * @param undefined;	 * @return undefined; 	 */		public function preDispatch()	{	}		/**	 * Método público, invocado em caso de ações e/ou controles requisitados que não foram definidos.	 * 	 * @return void	 */			public function __call($action, $arguments)	{				if (method_exists($this, "noRouteAction")) { 			$this->noRouteAction(); 					} else {						$error = array(						"number"	  => 404,						"description" => "NOT_FOUND" );												$this->_forward("noRoute", "index", "default", $error);		}			}		public function __toString()	{}		public function __clone()	{}}

---

 

esse meu post tinha como referencia a pergunta do perfect lion sobre o erro que estava dando ... postei atrasado!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Hummm... se eu fose iniciante no PHP iria apanhar para saber isso em.. pq no manual num achei falando sobre isso.... tive que debugar...Void: valeu da mesma forma.. mais acho que no momento preciso de agilidade num tem como eu criar um Controller_Action personalizado.. meu.. =/

Compartilhar este post


Link para o post
Compartilhar em outros sites

ok, tranquilo, mas qq dúvida, pode perguntar meu broda!abrasss

Hummm... se eu fose iniciante no PHP iria apanhar para saber isso em.. pq no manual num achei falando sobre isso.... tive que debugar...Void: valeu da mesma forma.. mais acho que no momento preciso de agilidade num tem como eu criar um Controller_Action personalizado.. meu.. =/

Compartilhar este post


Link para o post
Compartilhar em outros sites

Uma dúvida.No caso, se eu fizer meu site através de algum framework como o Zend Studio, meu provedor de hospedagem terá que ter o Zend Studio instalado para que o site funcione corretamente ou não precisa? Qualquer framework que eu utilizar para PHP, basta eu colocar em uma pasta as bibliotecas que utilizo, que o site irá funcionar corretamente, é isso?

Compartilhar este post


Link para o post
Compartilhar em outros sites

entao, zend studio é uma coisa zend frameworks é outra.para criar uma aplicação usando o frameworks do zend, é recomendado que voce sete o seu include_path para o diretório dos arquivos da lib do zend e utilize o .htacess para fazer um "parser" da urlda uma olhada no site do frameworks da zend que é bem explicativo essa parteabrass

Compartilhar este post


Link para o post
Compartilhar em outros sites

entao, zend studio é uma coisa zend frameworks é outra.para criar uma aplicação usando o frameworks do zend, é recomendado que voce sete o seu include_path para o diretório dos arquivos da lib do zend e utilize o .htacess para fazer um "parser" da urlda uma olhada no site do frameworks da zend que é bem explicativo essa parteabrass

Certo, então se eu quiser eu posso trabalhar com uma IDE como Zend Studio ou Delphi for PHP e incluir qualquer framework que eu queira utilizar em uma dessas IDEs, é isso? Posso trabalhar com o framework Codeigniter no Zend Studio sem problemas, correto?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Kra o Zend Studio é apensa uma ferramenta de edição não importa qual framework você vai usar.. ele só serve para você mecher no arquivo e criar.Depois que você termonar de criar pega os arquivos todos que você mecheu e joga online =DNão importa a ferramenta IDE que use o que importa é o que você vai desenvolver.... se quiser você pode até usar um bloco de notas junto com o framework sako? o framework só vai está localizada em alguma pasta e você tem que configurar o index.php para começar a usufruir ela ;)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Fala galera preciso relatar uma coisa que eu me deparei com a nova versão do Zend FrameWork 1.0

 

Hoje tava aqui eu fazendo teste de criações de modulos no zend para eu poder criar um modulo separado para poder trabalhar em cima dele. e descobri que ao criar modulos eu preciso claro usar o Routers.

 

Bem eu queri desenvolver na seguinte estrutura de arquivos:

 

|www |library   |--Zend ... |Controllers   |--IndexController.php   |--Modulo	 |--IndexController.php   |--Modulo2	 |--IndexController.php |Views   |--scripts	 |--index		|--index.phtml   |--Modulo1	 |--scripts	   |--index		  |--index.phtml   |--Modulo2	 |--scripts	   |--index		  |--index.phtml

 

Percebi que isso num rola. porque num rola?

 

porque eu debugar o bixinho ví que que faz assim

 

imagina que você tenha a url da seguinte forma

 

site.com.br/controller/action

 

quando se cria modulo se torna assim:

 

site.com.br/modulo/controller/action

 

sendo que se você acessar o site assim:

 

site.com.br/

 

Ele vai busca o controller "IndexController.php" e a ação IndexAction();

 

agora com o modulo ele faz a verificação

 

site.com.br/modulo/controller/action

 

Fazendo a verificação onde se encontra o modulo o path que é definido onde está o controller no sistema onde está o modulo, depois ele localiza o seu Controller e então assim executa a ação.

 

Agora vem o problema. na parte de Views ele vai busca no path que você definiu para onde está seu controller fazendo isso:

 

Imagina que você difiniu isso

 

www/ |--Controllers   |--Usuarios < modulo usuários	 |--IndexController.php |--Views   |--Usuarios	 |--scripts	   |--index		 |--index.tlp <- veja a extenção tbm.

Bem você definiu que o modulo usuario o controller dele está em Controllers/Usuarios correto?

 

No zend ele está fazendo da seguinte maneira.

 

Após você definir o seu caminho Controller do modulo ele pega e faz isso automaticamente para ...configurando o path da maneira que le quer.

 

Modulo usuario

/controllers/usuario

 

View usuario

/controllers/views

 

virão onde eu quiz chegar?

 

E agora como poder definir da maneira que eu queria? sei que da maneria que a zend ta fazendo ta legal pois assim você num cria modulos dentro dos controllers claro.. mais se você pensar num lado eu estou colocando todos os meus controllers num lugar só e todos os meus views em outros lugares. Na verdade isso num é correto mais o pessoal aqui no trampo é teimoso já expliquei que cada modulo tem seu proprio view model e controller mais fazer oq. =/

 

Então alguem sabe como vou fazer para me livrar dessa?

 

Já vi o

 

$view = new Zend_View();$view->setScriptPath('/path/to/app/views');

sendo que quando usao isso ele funfa mais mesmo assim ele vai tentando carregar o index.phtml que ele fez de padrão para o path. =/ é fogo =/

Compartilhar este post


Link para o post
Compartilhar em outros sites

bom, se eu entendi, essa é facil ...basta voce reescrever a classe Zend_Controller_Action e criar um método initView() responsavel por setar o scriptpath de acordo com o módulo requisitado ....eu fiz assim, isso vai de programador para programador, mas ajudou muito ....eu consigo usar essa estrutura de arquivos que voce quer !Da uma olhada no post 23 deste tópico, ve se voce entende os métodos initView e initModel ...Criei um método abstrato, chamado init, que força a assinatura em todas as classes que herdam a My_Controler_Action ..abrasss

Compartilhar este post


Link para o post
Compartilhar em outros sites

Opa olha um link ae otimo para quem quer iniciar no Zend FrameWork... um tuto traduzido em PT muito facil de aprender com ele.. ele te mostra o caminho depois é só você seguir com suas pernas ;)

 

http://akrabat.com/wp-content/uploads/inic...amework_130.pdf

 

Aproveitando o post.

 

Alguem sabe me dizer como eu recupero meu valor GET? com o zend quando eu estou fora da classe Controller_Action?

 

Imagina que eu tenho isso:

 

site.com.br/controller/action/key1/value1

 

Eu consigo recuperar assim: $this->_request->getParm('key1') dentro de minha classe Controller que extend o Controller Action do Zend.

 

Mais ai me veio uma questão como eu consigo recuperar esse valor sem ser dentro da classe? pois eu preciso recuperar isso no meu index.php que é o arquivo principal. broad alguma coisa :P

 

se alguem poder me ajudar agradeço.. pois já tentei debugar mais num achei uma maneira de fazer essa recuperação eu acho que deve ter um geito eu só num sei como. =/

Compartilhar este post


Link para o post
Compartilhar em outros sites

rola não nego ... o getParam não é estático ...só se você criar um bloco de código pra tratar a url ..abrass

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bem que deveria ter algo comoZend_Request_Uri::getParm()

Compartilhar este post


Link para o post
Compartilhar em outros sites

é, então, eu pensei nisso, mas teria que reescrever toda a classe Zend_Controller_Action ...abrasss

Compartilhar este post


Link para o post
Compartilhar em outros sites

ola pessoaleu já tentei de tudo mas ate agora nada funcionouo problema é o seguinte quando eu uso o pdo_mysqldah a seguinte menssagem de erro:

Fatal error: Uncaught exception 'Zend_Db_Adapter_Exception' with message 'The mysql driver is not currently installed' in C:\Arquivos de programas\Zend\Apache2\htdocs\library\Zend\Db\Adapter\Pdo\Abstract.php:101 Stack trace: #0 C:\Arquivos de programas\Zend\Apache2\htdocs\library\Zend\Db\Adapter\Abstract.php(246): Zend_Db_Adapter_Pdo_Abstract->_connect() #1 C:\Arquivos de programas\Zend\Apache2\htdocs\library\Zend\Db\Adapter\Pdo\Abstract.php(203): Zend_Db_Adapter_Abstract->query('DESCRIBE `album...', Array) #2 C:\Arquivos de programas\Zend\Apache2\htdocs\library\Zend\Db\Adapter\Pdo\Mysql.php(108): Zend_Db_Adapter_Pdo_Abstract->query('DESCRIBE `album...') #3 C:\Arquivos de programas\Zend\Apache2\htdocs\library\Zend\Db\Table\Abstract.php(595): Zend_Db_Adapter_Pdo_Mysql->describeTable('album', NULL) #4 C:\Arquivos de programas\Zend\Apache2\htdocs\library\Zend\Db\Table\Abstract.php(528): Zend_Db_Table_Abstract->_setupMetadata() #5 C:\Arquivos de programas\Zend\Apache2\htdocs\library\Zend\Db\Table\Abstract.php(264): Zend_Db_Ta in C:\Arquivos de programas\Zend\Apache2\htdocs\library\Zend\Db\Adapter\Pdo\Abstract.php on line 101

eu tenho essa extensão e também mostra no phpinfo()conto com vocêsflw

Compartilhar este post


Link para o post
Compartilhar em outros sites

Opa.. kra você tem que ir no seu PHP.INI e lá em extencions descomente o extension=php_pdo_mysql.dll caso você esteja tentando pelo mysql a conexão.. depois pegue os DLLS que estão na pasta PHP rais e jogue dentro do System32 caso xp e reinicie o apache e pronto agora você vai ter o suporte ao PDO MYSQLLembrando galera que a alguns dias já foi lançado oficialmente o Zend FrameWork 1.0 ;) e ta show de bola..Agora eu estou trabalhando somente com o Zend em breve irei postar alguns tutos aqui de facilidades para a galera... pois esse framework ta show de bola.. ;)Até mais

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.