Archive for setembro \28\-02:00 2010

Desabilitando Layout e View Render no Zend Framework

Posted on setembro 28, 2010. Filed under: PHP, Zend Framework |

Por padrão o Zend Framework, ao executar um action, irá disparar um view automáticamente baseado no nome da “Action”. Caso você precise desabilitar o disparo do view em uma determinada situação. Por exemplo, caso você esteja usando o action para retornar dados de uma requisção ajax você provavelmente não irá usar um script de view, você resolverá tudo no próprio action retornando dados encodados no formato Json. Dentro do Action, insira a linha abaixo para desabilitar o view render:

$this->getHelper('viewRenderer')->setNoRender();

Caso você esteja utilizando o recurso de “layout” do zend framework você deverá adicionar a linha abaixo também para desabilitar o layout (dentro do Action):

$this->getHelper('layout')->disableLayout();

Ler Post Completo | Make a Comment ( 1 so far )

PHP Patterns parte 3: Factory

Posted on setembro 8, 2010. Filed under: PHP |

A classe genérica que implementa o pattern Factory provê a faciliade de criar instâncias de classes que fornecem as mesmas tarefas porém de maneiras diferentes. Traduzindo ao pé da letra, Factory pode ser definido como uma “Fábrica de Objetos”.
Normalmente quando precisamos criar um objeto, utilizamos o operador “new” seguido do nome da classe desejada. Porém em algumas situações o operador “new” pode ser uma problemática. Alguns tipos de objetos necessitam de uma série de passos para serem criados: – Computar ou obter configurações iniciais do objeto a ser criado, – executar funções de outros objetos para poder criar o objeto desejado, etc. Para esses casos é interessante a utlização do pattern Factory.

Por exemplo: Ao invés de instanciar o objeto com “new”:

$db = new Database_Mysql();

Utilizamos o pattern Factory na classe Database:

$db = Database::factory(Database::MYSQL));

Implementando o pattern Factory:
class Database {

  const MYSQL = 1;
  const PGSQL = 2;
  const ORACLE = 3;

  public static function factory($type = self::MYSQL)
  {
    switch ($type) {
      case self::MYSQL:
        return new Database_Mysql();
      case self::PGSQL:
        return new Database_Pgsql();
      case self::ORACLE:
        return new Database_Oracle();
      default:
        throw new Exception("Adaptador não idenficado");
    }
  }
}

class Database_Mysql {
// ...
}

class Database_Pgsql {
// ...
}

class Database_Oracle {
// ...
}

Instanciado as classes de banco de dados com o Factory explicado no exemplo anterior:

$mysql = Database::factory(Database::MYSQL);
$pgsql = Database::factory(Database::PGSQL);
$oracle = Database::factory(Database::ORACLE);

Detalhando a classe Database

Primeiramente, declaramos três constantes que serão utilizadas para identificar a classe que desejamos obter no factory. Utilizamos nomes sugestivos e de fácil identificação.

class Database {

  const MYSQL = 1;
  const PGSQL = 2;
  const ORACLE = 3;

Depois implementamos o método “factory”, que fará o serviço de retornar a instância do objeto desejado. Opcionalmente podemos informar qual objeto queremos através do parâmetro “$type”. Aqui podemos utilizar as constantes definidas anteriormente para facilitar o nosso trabalho e tornar o código mais legível. De acordo com o parâmetro informado podemos obter uma instância das classes Database_Mysql, Database_Pgsql ou Database_Oracle.
  public static function factory($type = self::MYSQL)
  {
    switch ($type) {
      case self::MYSQL:
        return new Database_Mysql();
      case self::PGSQL:
        return new Database_Pgsql();
      case self::ORACLE:
        return new Database_Oracle();
      default:
        throw new Exception("Adaptador não idenficado");
    }
  }

Finalmente abaixo o exemplo de um código que utilizamos para instânciar o driver do Postgresql.
$pgsql = Database::factory(Database::PGSQL);

Ler Post Completo | Make a Comment ( None so far )

Liked it here?
Why not try sites on the blogroll...

%d blogueiros gostam disto: