goncin@wordpress.com:~$ _

Linux, programação e toda sorte de nerdices

Apresentando o Yii Framework para PHP

Nos últimos quatro anos, trabalhei com o framework PRADO para PHP. Você pode conferir um pouco da minha experiência com ele aqui e ali também.

Quando iniciei com o PRADO, eu era um programador de aplicações desktop, e minha ferramenta predileta era o Borland Delphi Inprise Delphi CodeGear Delphi Embarcadero Delphi. Ao migrar para o ambiente web, a escolha de outra ferramenta que lembrasse o look and feel da antiga foi uma decisão natural, e isso foi-me proporcionado, em boa medida, pelo framework que escolhi.

O PRADO evoluiu, passou da versão 2.x para a 3.x, mas encontrou seu limite, como admitiu seu principal desenvolvedor. A partir do know how adquirido com o desenvolvimento do PRADO, Qiang Xue iniciou um novo framework, com o intuito de reimplementar o que o antecessor tinha de melhor, bem como aproveitar boas ideias introduzidas por outros projetos (veja a seção Credits). Assim vinha a público, em outubro de 2008, a primeira versão do Yii Framework.

Em julho de 2010, o Yii Framework encontra-se na versão 1.1.3, e conta com mais de duas centenas de extensões. Ele implementa rigidamente o padrão de desenvolvimento MVC, algo que o PRADO não fazia muito bem. Desde sempre, o Yii possui uma interface de linha de comando (o yiic), nos moldes do zf do Zend Framework, que automatiza tarefas como criar a estrutura de um projeto, scaffolding (geração de código CRUD), etc. A partir da versão 1.1.2, o framework passou a contar também com uma interface web, chamada Gii, para o scaffolding.

Para demonstrar o poder do Yii Framework, vamos gerar um modelo a partir de uma tabela com a seguinte estrutura:

CREATE TABLE `pessoa` (
  `cod_pessoa` INTEGER(11) NOT NULL AUTO_INCREMENT,
  `nome_pessoa` VARCHAR(100) COLLATE latin1_swedish_ci NOT NULL DEFAULT '',
  `data_nascimento` DATE NOT NULL,
  `sexo` CHAR(1) COLLATE latin1_swedish_ci NOT NULL DEFAULT '',
  PRIMARY KEY (`cod_pessoa`)
)ENGINE=InnoDB
AUTO_INCREMENT=1 CHARACTER SET 'latin1' COLLATE 'latin1_swedish_ci';

Eis o código gerado pelo Gii (ou via yiic shell -> model pessoa), a partir da estrutura acima:

<?php

/**
 * This is the model class for table "pessoa".
 *
 * The followings are the available columns in table 'pessoa':
 * @property integer $cod_pessoa
 * @property string $nome_pessoa
 * @property string $data_nascimento
 * @property string $sexo
 */
class Pessoa extends CActiveRecord
{
	/**
	 * Returns the static model of the specified AR class.
	 * @return Pessoa the static model class
	 */
	public static function model($className=__CLASS__)
	{
		return parent::model($className);
	}

	/**
	 * @return string the associated database table name
	 */
	public function tableName()
	{
		return 'pessoa';
	}

	/**
	 * @return array validation rules for model attributes.
	 */
	public function rules()
	{
		// NOTE: you should only define rules for those attributes that
		// will receive user inputs.
		return array(
			array('nome_pessoa, data_nascimento, sexo', 'required'),
			array('nome_pessoa', 'length', 'max'=>100),
			array('sexo', 'length', 'max'=>1),
			// The following rule is used by search().
			// Please remove those attributes that should not be searched.
			array('cod_pessoa, nome_pessoa, data_nascimento, sexo', 'safe', 'on'=>'search'),
		);
	}

	/**
	 * @return array relational rules.
	 */
	public function relations()
	{
		// NOTE: you may need to adjust the relation name and the related
		// class name for the relations automatically generated below.
		return array(
		);
	}

	/**
	 * @return array customized attribute labels (name=>label)
	 */
	public function attributeLabels()
	{
		return array(
			'cod_pessoa' => 'Cod Pessoa',
			'nome_pessoa' => 'Nome Pessoa',
			'data_nascimento' => 'Data Nascimento',
			'sexo' => 'Sexo',
		);
	}

	/**
	 * Retrieves a list of models based on the current search/filter conditions.
	 * @return CActiveDataProvider the data provider that can return the models based on the search/filter conditions.
	 */
	public function search()
	{
		// Warning: Please modify the following code to remove attributes that
		// should not be searched.

		$criteria=new CDbCriteria;

		$criteria->compare('cod_pessoa',$this->cod_pessoa);

		$criteria->compare('nome_pessoa',$this->nome_pessoa,true);

		$criteria->compare('data_nascimento',$this->data_nascimento,true);

		$criteria->compare('sexo',$this->sexo,true);

		return new CActiveDataProvider(get_class($this), array(
			'criteria'=>$criteria,
		));
	}
}

Como podem perceber, o código gerado para o modelo é bastante completo. O gerador aproveita as configurações existentes no banco de dados para estabelecer regras de validação (veja na função rules()): campos NOT NULL tornam-se atributos requeridos, o comprimento máximo de um atributo do tipo string é o mesmo definido no campo VARCHAR correspondente, etc. Define, inclusive, os rótulos dos atributos a partir dos nomes dos campos (função attributeLabels()), bastando uma pequena edição para que apareçam ao usuário final num português correto.

Meu propósito neste post foi apresentar o Yii Framework e um pouco do seu poder. Se você já conhece ou já trabalha com ele, compartilhe suas impressões nos comentários. Aos demais desenvolvedores PHP, espero ao menos tê-los atiçado a curiosidade e os deixado com água na boca 8) . Para quem deseja se iniciar no framework, recomendo seguir o Tutorial de Criação de um Blog, cujos passos podem ser facilmente adaptados para as necessidades do seu projeto.

Anúncios

8 Respostas para “Apresentando o Yii Framework para PHP

  1. Pingback: Tweets that mention Apresentando o Yii Framework para PHP « goncin@wordpress.com:~$ _ -- Topsy.com

  2. Francisco 23/07/2010 às 09\0958

    Bacana isso. Confesso que não entendo nada de frameworks (e pouco de PHP – minhas tarefas se resumem a bolar coisas para acrescentar em sites). E também admito que me perco nessa quantidade de frameworks. Qual será o melhor? O mais fácil?

    Abs

    • goncin 23/07/2010 às 10\1011

      Francisco,

      Em termos de framework, creio que o melhor é aquele com o qual você se identifica melhor, e que torna sua curva de aprendizado mais suave. Veja bem: eu era programador Delphi. Ao migrar para o PHP, escolhi o PRADO, por ver semelhanças entre este e aquele. Anos depois, estou mudando para o Yii Framework porque ele representa uma evolução do PRADO.

      Se você for escolher um framework para começar, analise-os e escolha o que mais tenha semelhanças com o seu modo atual de trabalhar, ou que, ao menos, você consiga entender seu modo de funcionamento sem muito esforço. Na minha opinião, usar ou não um framework equivale a usar uma caixa de ferramentas já pronta (apesar de ter de aprender a utilizá-las) ou perder muito tempo construindo suas próprias ferramentas, muitas vezes na base da tentativa e erro. É por isso que fico com a primeira opção.

      Mais uma vez, obrigado pelo comentário. 😀

      • Railton Nepomuceno 03/08/2010 às 22\1035

        Estou tambem nessa migração do Prado para o Yii, ainda nao estou 100%, a maioria das coisas que eu fazia no Prado já estou fazendo no yii, mais algumas semanas e domino o bicho.

        Na minha experiencia até agora posso dizer que o Yii é muito, mas muito mais rapido que o Prado, e mais produtivo também.

        []’s

    • Flavio Zantut 19/08/2010 às 08\0848

      Quanto ao melhor depende muito de que você pretende fazer, cada framework tem seus pontos fortes e fracos.
      Já o mais fácil dentre muitos frameworks PHP que existem por ai, acredito que seja o CodeIgniter por sua rápida curva de aprendizado, mesmo para iniciantes em PHP. Já usei ele em muitos projetos, mas recenteme conheci o Yii, que é meio complicado até pegar o jeito. Ainda estou iniciando e recorro bastante a documentação, que é bem completa por sinal, já implementei um Web Service utilizando ele.

      @flazann

      Desenvolvedor web

  3. Pingback: Entendendo as “relations” (relações) do Yii Framework « goncin@wordpress.com:~$ _

  4. Pingback: O Yii Framework e os “models” (modelos) « goncin@wordpress.com:~$ _

  5. margarida 07/06/2015 às 16\0403

    gostaria que me enviassem o código para inserir imagem na pagina inicial do yii

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s

%d blogueiros gostam disto: