symfony usar o object_select_tag para retornar os valores ordenados

Esses tempos estava usando o object_select_tag (é uma mão na roda), mas precisava trazer os resultados em ordem crescente. Foi ae que eu descobri que existe uma opção peer_method onde é possível definir o método no model para retornar a lista de resultados.

Eu não curto o Propel, prefiro bem mais o Doctrine. Desta forma esse exemplo é baseado usando o Doctrine:

No template:

1
2
3
4
5
6
7
<?php echo object_select_tag(isset($filters['Status']) ? $filters['Status'] : null, null, array (
  'include_blank' => true,
  'related_class' => 'Status',
  'text_method' => '__toString',
  'control_name' => 'filters[Status]',
  'peer_method' => 'getSorted'
)) ?>

No model StatusTable.class.php:

1
2
3
4
5
6
7
public static function getSorted()
{
  $q = new Doctrine_Query();
  $q->from('Status')->orderBy('name ASC');
 
  return $q->execute();
}

No código acima que é possível definir a forma de ordenação e qual coluna que deve ser usada para ordenar.

Agora falta criar o método __toString no model Status.class.php:

1
2
3
4
public function __toString()
{
  return $this->name;
}

O método __toString e usado para imprimir os valores no combo box.

Pronto! ;-)

Posted in Symfony at dezembro 2nd, 2008. No Comments.

symfony customizando o template de erro 404

Criei na aplicação um módulo chamado default:

1
symfony generate:module nome_da_aplicacao default

Edite o arquivo actions.class.php e crie uma action error404:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php
 
/**
 * default actions.
 *
 * @package    wr
 * @subpackage default
 * @author     Your name here
 * @version    SVN: $Id: actions.class.php 9301 2008-05-27 01:08:46Z dwhittle $
 */
class defaultActions extends sfActions
{
  public function executeError404($request)
  {
  }
}

No diretório template do módulo default, crie o template error404Success.php. Adicionei sua mensagem de erro 404 customizada nesse arquivo.

Pronto! ;-)

Posted in Symfony at novembro 3rd, 2008. No Comments.

Minha experiência com symfony

Minha experiência com symfony

Atualmente eu trabalho na empresa MalaPronta (www.malapronta.com.br), antes de trabalhar aqui eu nunca havia usando um framework PHP. Na realidade eu já tinha todo um padrão para desenvolver, acabei desenvolvendo um mini framework para o meu uso pessoal, mas de forma bem básica e simples.

Quando entrei na MalaPronta o pessoal já usava o symfony, então tive que aprender para me adequar a equipe e desenvolver novos produtos e dar suporte a produtos já existentes.

Hoje eu não consigo desenvolver sem usar um framework, são N facilidades que ele já implementa que ajudam muito para acelerar o desenvolvimento de projetos web, ajuda bastante a adicionar novas pessoas na equipe de desenvolvimento, por que o padrão já está bem definido.

Eu não posso estabeler um quadro comparativo entre symfony e os demais frameworks PHP, apenas conheço o symfony.
As coisas legais do symfony são:

- Comunidade bastante ativa publicando plugins, comunicando bugs e sugerindo melhorias;
- Existe uma empresa por trás do symfony que dá uma impulsionada legal;
- O framework adota muitos padrões bacanas, já consagrados em outras linguagens;
- Tem uma documentação boa, lógico que existem algumas coisas que necessário procurar bastante, alguns recursos mais avançados;
- Empresas grandes com o Yahoo tem aplicações feitas usando o symfony, sem não me engano o Delicious e o Yahoo Respostas foram feitos em symfony;

Eu acredito que o symfony vai crescer muito ainda, cada vez mais está ganhando usuários e reconhecimento pelo mundo a fora.

É lógico que nem tudo é rosas, o symfony tem alguns bugs, falta de documentação em alguns aspectos, algumas implementações são burocráticas, como o novo sistema de formulário do symfony 1.1. As vezes você perde um pouco em um lado, mas acaba ganhando mais segurança na outra ponta.

Atualmente eu estou estudando diariamente Ruby on Rails e cada vez mais estou apaixonado por essa tecnologia. Tem muitas coisas que o symfony rouba ideias do Ruby on Rails. Eu acho o Ruby on Rails é muito mais consolidado, simples e mais prático que o symfony, mas isso se deve também a linguagem, a orientação objetos do PHP é mais fraca que a orientação a objetos do Ruby.

A longo prazo eu pretendo parar de usar PHP e trabalhar com Ruby on Rails.

Bom essa é a minha experiência com o framework symfony.
Espero ter ajudado. ;-)

Posted in Symfony at outubro 14th, 2008. No Comments.

Symfony 1.1 carregando Prototype e Scriptaculous no template

Para carregar o Prototype e Scriptaculous em um template no symfony, basta criar o arquivo view.yml dentro do diretório config no módulo da sua aplicação. Por exemplo:

1
apps/frontend/modules/products/config/view.yml

No arquivo view.yml coloquei o nome do template do módulo que você deseja adicionar as bibliotecas javascripts.

1
2
showSuccess:
  javascripts: [%SF_PROTOTYPE_WEB_DIR%/js/prototype, %SF_PROTOTYPE_WEB_DIR%/js/scriptaculous?load=effects]

ou use all para todos os templates do módulo.

1
2
all:
  javascripts: [%SF_PROTOTYPE_WEB_DIR%/js/prototype, %SF_PROTOTYPE_WEB_DIR%/js/scriptaculous?load=effects]
Posted in Symfony at setembro 30th, 2008. No Comments.

Pluralização de termos no symfony

Existe uma forma de fazer pluralização de temos no symfony.

Você deve usar o helper I18N e a função format_number_choice nos templates.

Por exemplo:

1
2
3
<?php use_helper("I18N") ?>
 
<?php echo format_number_choice('[0]Nobody is logged|[1]There is 1 person logged|(1,+Inf]There are %1% persons logged', array('%1%' => count_logged()), count_logged()) ?>

A função format_number_choice aceita os seguintes parâmetros:

1
format_number_choice($text, $args = array(), $number, $catalogue = &apos;messages&apos;)
Posted in Symfony at setembro 15th, 2008. No Comments.

symfony Project Freeze

Para fazer o freeze de um projeto em symfony, ou seja, copiar os arquivos do core do symfony para dentro do seu projeto. É necessário executar a seguinte linha dentro do diretório raiz do projeto da sua aplicação:

1
symfony project:freeze /usr/share/php/data/symfony/

Onde /usr/share/php/data/symfony/ é o diretório de instalação dos arquivos de dados do symfony.

Posted in Symfony at setembro 12th, 2008. No Comments.

Como usar a função use_dynamic_javascript no symfony 1.1

A função use_dynamic_javascript permite trabalhar com javascripts turbinados, javascripts onde pode existir lógica PHP e passagens de variáveis da action para o javascript.

No symfony 1.0 existia um plugin chamado sfPJSPlugin responsável por fazer isso, agora essa funcionalidade já faz parte do CORE do symfony 1.1.

A função use_dynamic_javascript espera que você passe como parâmetro um module/action, em cima desse module/action a função irá procurar um template chamado actionSucess.js.php, nesse template deve estar o código javascript que você deseja incorporar no template actionSuccess.php.

Como fazer:

No seu template da action desejada, por exemplo indexSuccess.php, você deve chamar a função use_dynamic_javascript:

1
<?php use_dynamic_javascript('login/index'); ?>

Agora dentro do diretório template do módulo você deve criar um arquivo com o nome da actionSuccess.js.php, no exemplo você deve criar indexSuccess.js.php.

Esse arquivo funciona igual ao um template, você pode passar variáveis, usar variável flash e tudo mais, a diferença é que você usar tudo isso com javascript, o que aumenta muito as possibilidades.

Posted in Symfony at agosto 27th, 2008. No Comments.

Bug session storage symfony 1.1

No symfony 1.1 existe um bug nas classes sfPostgreSQLSessionStorage e sfPDOSessionStorage, essas classes são responsáveis por implementar a gravação da sessão do usuário em banco de dados. As classes são do CORE do symfony.

As classes obtém de forma errada a conexão com banco de dados, algumas pessoas desenvolveram patch’s para corrigir o problema, até agora o pessoal do symfony não arrumo esse bug.

Mais informações: http://www.symfony-project.org/forum/index.php/m/55174/

Posted in Symfony at agosto 27th, 2008. No Comments.

Como obter o route usado pela url no symfony

As vezes para realizar algumas programações mais complexas no symfony é necessário saber qual route (rota) uma determinada url usa.

Para descobrir devemos trabalhar com o contexto do symfony e o sfPatternRouting:

1
2
3
$context = sfContext::getInstance();
$routing = $context->getRouting();
$route = $routing->findRoute("/produtos");

O código $context->getRouting() obtém o sfPatternRouting e $routing->findRoute(“/produtos”) busca uma route (rota) através da url passada, no caso “/produtos”.

O conteúdo da variável $route será o seguinte:

1
2
3
4
5
6
7
8
9
10
11
12
Array
(
    [name] => default_index
    [route] => /:module
    [parameters] => Array
        (
            [action] => index
            [module] => produtos
            [sf_culture] => pt_BR
        )
 
)
Posted in Symfony at agosto 26th, 2008. No Comments.

Como definir campos obrigatórios no symfony usando Validation File

É necessário implementar um arquivo validação com o mesmo nome da action dentro do diretório validate do módulo.

Por exemplo, edit.yml.

Digamos que o formulário tenha os campos nome e data, e eles devem ser de preenchimento obrigatório.

Deve ficar da seguinte forma o arquivo edit.yml:

1
2
3
4
5
6
7
8
9
10
11
12
methods: [post]
 
fillin:
  enabled: true
 
fields:
  nome:
    required:
      msg: Campo nome é obrigatório.
  data:
    required:
      msg: Campo data é obrigatório.

O atributo fillin define se os campos devem retornados preenchidos se ocorrer erro de validação.

Posted in Symfony at agosto 25th, 2008. No Comments.
 Assinar RSS Feed