MeuMySQL Blog is now at http://blog.mdnsolutions.com/.
Showing posts with label zend framework. Show all posts
Showing posts with label zend framework. Show all posts

Wednesday, September 19, 2012

Instalando o Zend Framework

Bem, nesse artigo vou dar dicas de como fazer a instalação e configuração para rodar o zend framework versão 1.12.0 no ubuntu 12.04.


Configurando o Apache

Primeiramente temos que habilitar o modo rewrite do apache. Para isso faremos um link simbólico do respectivo módulo:

shell> ln -s /etc/apache2/mods-available/rewrite.load /etc/apache2/mods-enabled/

Vamos criar então o virtual host do nosso sistema acessando:

shell> cd /etc/apache2/sites-available/

dentro desse diretório crie o arquivo local.zf com o seguinte conteúdo:

<VirtualHost *:80>

        ServerName local.zf
        DocumentRoot "/var/www/zf/public"
        SetEnv APPLICATION_ENV "development"

        <Directory "/var/www/zf/public">
                Options Indexes MultiViews FollowSymLinks
                AllowOverride All
                Order allow,deny
                Allow from all
        </Directory>

</VirtualHost>

Da mesma forma que fizemos anteriormente vamos agora fazer um link simbólico desse arquivo.

shell> ln -s /etc/apache2/sites-available/local.zf /etc/apache2/sites-enabled/

Agora vamos adicionar o novo virtual host ao hosts do sistema acessando:

shell> nano /etc/hosts

Neste arquivo adicione a seguinte linha

127.0.0.1       local.zf


Baixando e configurando o ZF

Faça o download do projeto aqui. Recomendo que baixe a versão "Zend Framework 1.12.0 Minimal", nela contém arquivos basicos de configuração e a Library. Eu optei pela versão zip do arquivo no download. 

Você pode extrair o arquivo e logo após remover o zip:

shell> unzip ZendFramework-1.12.0-minimal.zip 
shell> rm -R ZendFramework-1.12.0-minimal.zip 

Entraremos no diretório htdocs do apache em:

shell> cd /var/www

Para criarmos nosso projeto digitaremos o caminho do diretório do zend framework que você acabou de baixar, dentro dele temos diretório bin e neste um arquivo chamado zf.sh. (obs.: você pode ainda adicionar esse arquivo ao seu path do sistema.

cd /var/www$ ./path/ZendFramework-1.12.0-minimal/bin/zf.sh create project zf

Copie a biblioteca do Zend para seu projeto ou adicione ela no seu include_path.

shell> cp -R /path/ZendFramework-1.12.0-minimal/library/Zend/ /var/www/zf/library/

Então reinicie o servidor via

shell> /etc/init.d/apache2 restart
ou 
shell> service apache2 restart

Digite no seu browser o caminho http://local.zf/, e neste momento você deveria estar visualizndo o seu projeto.  \o/

ps: Se por algum motivo não rodar você pode verificar o motivo em /var/log/apache2/error.log

Wednesday, September 12, 2012

[OFF-TOPIC] Zend_Form: setRequired(true) or addValidator("NotEmpty")

Pessoal, me veio uma dúvida sobre o uso de dois atributos nos formulários do Zend:  Há alguma diferença entre o uso de ->setRequired(true) e ->addValidator('NotEmpty') nos formulários? Bem, gostaria de compartilhar a informação que encontrei com vocês.

Resposta

Sim, há diferença entre os dois. Se um elemento é requerido (setRequired(true)) ele será validado mesmo se todo campo/valor não existir nos dados enviados pelo formulário (pense em valores dinâmicos alterados pelo DOM). Os valores do formulário são apenas verificados pelos validators que você registrou após serem determinados que ele existem. O validador NotEmpty 'funcionaria' apenas se o campo estiver presente, mas vazio.

Contudo, não é necessário adicionar o validador NotEmpty no formulário. Por padrão o Zend automaticamente insere NotEmpty para os elementos que possuem a propriedade setRequired(true). Isso quer dizer que fazendo ->setRequired(true) é o mesmo que fazer ->setRequired(true)->addValidator('NotEmpty'). Você pode ainda desabilitar esse comportamento com o comando
->setAutoInsertNotEmptyValidator(false).


Referências:

http://framework.zend.com/svn/framework/standard/trunk/library/Zend/Form/Element.php

Tuesday, September 11, 2012

[OFF-TOPIC] Zend Framework - Uso de Barras (Slashes) na Url

Olá galera,

Como desenvolvedor todo dia matamos um leão. Hoje quero compartilhar uma situação que tivem com Zend Framework e os tipos de dados que tinha que trafegar na minha aplicação.


O problema

Quando tentei enviar uma variável pela url na minha aplicação em Zend Framework ela continha barras no em um parâmetro chamado grade "/BI/CV/PT". O que gerava uma url do tipo http://URL_PATH/MODULO/CONTROLLER/ACTION/id/289069/grade/BI/CV/PT. Quando eu tentava acessar essa URL recebia de retorno um bom NOT FOUND. 

Mesmo utilizando a função nativa do PHP stripslashes()  (resultando em http://URL_PATH/MODULO/CONTROLLER/ACTION/id/289069/grade/BI%2FCV%2FPT) continuava tendo o mesmo problema.


A solução

Ao pesquisar e com ajuda do @yourwebmarker descobri que se tratava de uma configuração do Apache para permitir o uso de barras codificadas. Você encontra sobre isso em http://httpd.apache.org/docs/2.2/mod/core.html#allowencodedslashes. O que fiz foi adicionar no meu arquivo de configuração do virtual host a linha AllowEncodedSlashes On e tudo funcionou perfeitamente. Exemplo:


<VirtualHost *:80>
    ServerName test.local
    DocumentRoot "/home/local/public"
    SetEnv APPLICATION_ENV "development"
    AllowEncodedSlashes On
    <Directory "/home/local/public">
        DirectoryIndex index.php
        AllowOverride All
        Order allow,deny
        Allow from all
    </Directory>
</VirtualHost>



Abraços!

Wednesday, August 29, 2012

[OFF-TOPIC][En] Zend_Form_Select with dynamic options


Hey Guys,

I'd like just to show off a really hand attribute to be used with select elements in Zend_Form.
It gives you the change of load options into your select fields without have that anoying message: "X  was not found in the haystack" (or in portuguese "X não faz parte dos valores esperados").

All you need to do is set the 'registerInArrayValidator' as false. Doing so Zend_Form is not validating the original set of values in your select element.



<?php
 ....
               $this->addElement('select', 'xptoId', array(
                    'label' => 'Xpto',
                    'multiOptions' => array(),
                    'registerInArrayValidator' => false,
                    'required' => true,
                ))

...
?>

Hope it is going to be hand for you mates!

Wednesday, June 6, 2012

[OFF-Topic] Customizando ZF BreadCrumb

Olá galera. Hoje trago um tópico que achei bacana para um problema que me confrontei hoje. E como  soluções surgem de necessidades aqui está um que me ajudou e que acredito que pode ajudar outra pessoa.


Breadcrumbs

O Zend Framework trabalha de forma elegante com navigation e breadcrumbs. Já vinha utilizando ambos há um bom tempo em meus sistemas, porém hoje precisei customizar um para um sistema especifico que possuo. Sem mais rodeios segue abaixo as intervenções que fiz no meu Layout e no meu breadcrumb.


No seu Layout.phtml adicione a linha:

<?php echo $this->navigation()->breadcrumbs()->setPartial('breadcrumb.phtml')->render(); ?>

E crie seu breadcrumb no diretório seuModulo/views/scripts/breadcrumb.phtml e escreva ele como desejar. Ex o meu:

<?php

if (null === $this->container) {
    $this->container = $this->breadcrumbs()->getContainer();
}

// find deepest active
if (!$active = $this->breadcrumbs()->findActive($this->container)) {
    return '';
}

$active = $active['page'];

// put the deepest active page last in breadcrumbs
if ($this->breadcrumbs()->getLinkLast()) {
    $html = $active;
} else {
    $html = $active->getLabel();
    if ($this->breadcrumbs()->getUseTranslator() && $t = $this->breadcrumbs()->getTranslator()) {
        $html = $t->translate($html);
    }
    $html = $this->escape($html);
}

// walk back to root
while (($parent = $active->getParent()) != null) {
    if ($parent instanceof Zend_Navigation_Page) {
        // prepend crumb to html
        $html = $parent->getLabel() . $this->breadcrumbs()->getSeparator() . $html;
    }

    if ($parent === $this->container) {
        // at the root of the given container
        break;
    }

    $active = $parent;
}
echo strlen($html) ? $this->breadcrumbs()->getIndent() . $html : '';

?>


Bem, é isso galera. Espero que tenham gostado da dica.