Layout de diretorios

Novembro 21, 2008 on 12:02 pm | In Informatica, php, Tutorial | 1 Comment

Bom, eu irei na verdade aqui dar sequencia ao meu modelo de aplicação MVC, se você não conhece pode dar uma lida neste Post, seguindo a ideia vamos agora partir da ideia do layout de diretorios para nossa aplicação, usando Url Amigaveis, primeiro temos que ter em mente que poderemos ter diversos App, ou aplicativos que funcionarão como modulos (ex: Admin, Cliente, Contas, RH e assim vai) e para cada modulo estará o modelo MVC ( ou MVP ).

Iremos separar também nossas libs (Library ou bibliotecas no bom português), para que possamos atualiza-las independente do sistema (modulos) que tivermos.

Iremos também separar uma pasta chamada var que serão as variaves do sistema, são arquivos que irão sendo atualizados mudados conforme o tempo de site (no meu caso os templates do smarty e outros arquivos como xml) e iremos separar os arquivos chamados publicos (que são aqueles arquivos onde as pessoas podem visualizar e roubar de você), no caso são arquivos JS, CSS, Imagens e coisas do genêro.

Então por enquanto teremos :

CODE:
  1. /app
  2. /lib
  3. /publico
  4. /var

Colocando modulos no app e pensando que teremos o modulo rais teremos em MVC a seguinte estrutura :

CODE:
  1. O acesso a estas pastas será travada no .htaccess para maior segurança
  2. /app/
  3. /app/config
  4. /app/controller
  5. /app/model
  6. /app/view
  7. -----> Exemplo modulo Admin
  8. /app/Admin
  9. /app/Admin/config
  10. /app/Admin/controller
  11. /app/Admin/model
  12. /app/Admin/view

No caso ainda no view utilizando um sistema de templates para separar codigo de tela, eu tenho mais duas pastas que irão separar mais codigo, em vez de construir inputs, selects, e alguns outros na tela com codigo, dou preferencia para buscar uma classe que possa criar para min e eu retornar o codigo pronto para o template, assim separando o que é um codigo contrutor.

CODE:
  1. /app/view/analizador <- arquivos que somente trazem dados para o view
  2. (arquivos so escritos em php, são contrutores)
  3. /app/view/helpers <- arquivos de carater padrão entre telas ( topo.tpl,
  4. banner.tpl, menu.tpl +++ )

Pensando agora no resto da estrutra, as bibliotecas ( /lib ) o que iremos ter ? No meu caso eu terei algumas bibliotecas suporte e principalmente aqui uma biblioteca (camada de persistência - Base de dados), veja como fica:

CODE:
  1. O acesso a estas pastas será travada no .htaccess para maior segurança
  2. /lib/
  3. /lib/commom <-- classes de uso comum durante todo o sistema (ex. classe envioMail(), Upload(), Conexao() )
  4. /lib/MDB2  <--  classe camada de persistência
  5. /lib/smarty
  6. /lib/a j a x

O layout da publico é super simples e podemos criar diversas regras no .htaccess para moderamos o uso desta estrutura

CODE:
  1. /publico
  2. /publico/images
  3. /publico/scripts
  4. /publico/styles

No meu caso a var que contém os dados de teamplates compilados e cache deles.

CODE:
  1. Estrutura para dados que possam ser alterados, também protegido por htaccess
  2. /var
  3. /var/tpl_cache
  4. /var/tpl_compiled

É isso ai pessoal, logo mais vou continuar escrevendo dos htaccess de cada pasta e do index para nos acessarmos tudo isso com um unico arquivo só. Ficaria muito grande esse index e access aqui neste mesmo texto, então ficamos para a próxima.


phpConf 2008

Novembro 18, 2008 on 12:30 pm | In Informatica, Trabalho, php, Tutorial | No Comments

E lá vamos nós, ou melhor dizendo eu, confirmada minha presença nos 3 dias da php Conference Brasil 2008, vou deixar aqui a programação que pretendo assistir e participar, espero ver vocês lá.

phpConf

Quinta feira :

No período da manhã vou assitir a palestra/curso sobre SOA com o César Schneider.
No período da tarde irei voltar a trabalhar, hehehe.

Sexta-feira :

O que eu gostaria de assistir é "Camadas do desenvolvimento Web", "Vulnerabilidades", "OpenSocial", "SPL", "PHP Doc"... é algumas das palestras que me interessam ainda estou incerto do que irá me fazer melhor.

Sábado :

Sábado é um grande mistério se irei aparecer, ainda mais em relação as palestras, veremos até la o que irá aconteçer.


Links

Novembro 14, 2008 on 2:36 pm | In Festas, Informatica, Mente, php | No Comments

Bom, como eu não tenho custume de colocar links na categoria de Links hoje eu vou fazer um post para isso, para alguns links interessantes que sempre utilizo, sejam eles no trabalho ou por mera diversão, quem sabe é algo útil ou divertido a você também.


Namespaces no PHP

Novembro 7, 2008 on 1:13 pm | In Informatica, php, Tutorial | 4 Comments

Todo mundo vem falando da grande discução do namespace no PHP, ja que vai ser uma característica nova e nem tudo mundo está acontento do uso ou de como vai ser usado, por isso desta discução enorme, porém ainda existe muitas pessoas que nem sabe o que é namespace, por isso vou escrever para tirar as dúvidas e para exemplificar seu funcionamento.

O Porque

O uso de namespace é bom para evitarmos conflitos com nomes de classes, métodos e para o uso de classes com nomes gigantes ex: Super_ultra_mega_nome_da_classe_que_faz_algo, surgindo diversas facilidades na hora de usarmos pacotes e incluirmos bibliotecas.

Antes de tudo

Métodos estáticos, no caso quando se usa métodos estáticos não há a necessidade de se instanciar a classe, segue exemplo abaixo

CODE:
  1. class foo {
  2.     public static function bar() {
  3.         return true;
  4.     }
  5. }
  6.  
  7. // chamando o método estático
  8. $resultado  = foo::bar();

A discução

A grande discução disto tudo foi qual seria o separador do namespace, em muitas linguagens usa-se o "::" também (alias, mesmo separador que o estático), porem com a chamada em maiúscula Foo::bar(), neste caso ele pode ser confundido com um separador para chamadas de métodos estáticos, o que criaria uma confusão, neste caso então rolou uma discução em qual outro separador deveria ser usado, em principio discutiu-se muito o separador ":::" com o separador "\", no caso foi escolhido o \ por diversos motivos, que pode-se ser visto aqui.
Saiba mais sobre a discução aqui e aqui no blog do Augusto Pascutti.

Exemplos

Neste primeiro exemplo vamos lidar com nomes de classes gigantes para vermos como fica com a declaração do namespace:

mysql_base.php

CODE:
  1. // The class file
  2. namespace Mysql\DB;
  3.  
  4. class Connection_com_mysql_utilizando_foo_printando_bar {
  5.    function foo() {
  6.        echo 'bar';
  7.    }
  8. }

CODE:
  1. require 'Lib/DB/mysql_base.php';
  2.  
  3. use Mysql\DB\Connection_com_mysql_utilizando_foo_printando_bar as DbConnection;
  4.  
  5. $z = new DbConnection();
  6. $z->foo();

Lidando com nomes de classes e metodos que possam surgir com nomes iguais

arquivo1.php

CODE:
  1. namespace foo;
  2. function bar(){
  3.   echo "funcao\n";
  4. }

CODE:
  1. include 'file1.php';
  2.  
  3. class foo {
  4.     static function bar(){echo "method\n";}
  5. }
  6.  
  7. foo\bar(); // O que será impresso ?
  8. // Será impresso o "funcao", pois estamos chamando apartir do namespace

Vamos a outro exemplo simples de como podemos lidar nomes de funções/métodos iguais diante do sistema

CODE:
  1. namespace foo\foo;
  2.  
  3. function bar(){echo "func\n";}
  4.  
  5. namespace foo;
  6.  
  7. class foo {
  8.     static function bar(){echo "method\n";}
  9. }
  10.  
  11. foo\bar(); // O que sera impresso ?
  12. // Será impresso o "method", pois estamos chamando apartir do namespace foo\ caso se quisermos a função, usamos foo\foo\bar


Autoloading de Objetos no PHP

Novembro 3, 2008 on 1:12 pm | In Informatica, php | 2 Comments

Uma das coisas mais chatas é ter que inserir milhares de includes, gerencia-los e não errar nos Paths quando você tem as classes em diferentes pastas, no PHP 5 isso foi resolvido com o construtor __autoload(), o que ele faz é que quando você chama uma class/interface que não foi definida ele lê automaticamente para você, vejamos um exemplo :

PHP:
  1. function __autoload($class_name)
  2. {
  3.     require_once $class_name . '.php';
  4. }
  5.  
  6. $obj  = new MyClass1();
  7. $obj2 = new MyClass2();

Porém ela pode ser muito mais, imaginando que você tenha as classes em diferentes diretorios e esta usando um MVC, ou tem sua propria estrutura com diversas camadas, você pode na primeira camada criar esta função para que ela leia diferentes pastas procurando sua classe e assim que achar chama-la, sem se preucupar em chamar nenhuma classe, somente utiliza-las :

PHP:
  1. function __autoload($class_name)
  2. {
  3.     //Diretorios
  4.     $directorys = array(
  5.         'classes/',
  6.         'classes/model/',
  7.         'classes/controler/',
  8.         'classes/view/',
  9.         'classes/view/helpers'
  10.     );
  11.    
  12.     //para cada diretorio
  13.     foreach($directorys as $directory)
  14.     {
  15.         //se o arquivo existe no $directory
  16.         if(file_exists($directory.$class_name . '.php'))
  17.         {
  18.             require_once($directory.$class_name . '.php');
  19.             return;
  20.         }           
  21.     }
  22. }



 

 Assine o feed