php

Utilizando Swift numa task (symfony 1.3/1.4)

Ao utilizar esse código na task:

$message = Swift_Message::newInstance();

Tive o seguinte erro:

PHP Fatal error: Class ‘Swift_Message’ not found in […]

Solução:

$message = $this->getMailer()->compose("from@mail","to@mail","subject","body");

cli
php
snippet
swift

Comments (0)

Permalink

symfony 1.0 e Swift 4

Ao utilizar o Swift 4 com o symfony 1.0, tive o seguinte erro:

Fatal error: Cannot instantiate abstract class Swift in /[…]/apps/frontend/modules/[…]/actions/actions.class.php on line 40

Não sei porque o autoload do symfony não funcionou. Só consigo utilizar a classe incluindo o swift_required.php

require_once(dirname(FILE).‘/../lib/swift/lib/swift_required.php’);

Se estiver tendo problemas de tela branca com o Swift, utilize:


error_reporting(E_ALL);
ini_set(‘display_errors’, ‘1’);
 

Aqui vai um exemplo completo:


// swift 4.0.6
require_once(dirname(FILE).‘/../lib/swift/lib/swift_required.php’);

$transport = Swift_SmtpTransport::newInstance(‘smtp.servidor.com.br’, 25)
  ->setUsername(‘usuario’)
  ->setPassword(‘senha’)
  ->setTimeout(60);

$mailer = Swift_Mailer::newInstance($transport);
$message = Swift_Message::newInstance("Titulo")
  ->setFrom("from@email.com")
  ->setTo("para@email.com")
  ->setBody("Mensagem", ‘text/html’);

$mailer->send($message);
 

Aqui fala um pouco sobre esse assunto: http://forum.symfony-project.org/index.php/m/77609/

php
swift

Comments (0)

Permalink

Aumentando o timeout da sessão do usuário (sf 1.2)

Editar arquivo apps/(aplicacao)/config/factories.yml e alterar os segundos do ‘timeout’:

all:
  user:
   class: myUser
   param:
     timeout:         2700
 

php
snippet
yml

Comments (0)

Permalink

Tratando múltiplos telefones com embedded forms no admin generator

No meu post anterior, comentei sobre uma tabela (imovel) que possui diversos telefones (1-N). Nesse post vou tentar explicar como fiz o formulário de edição para tratar os N telefones dos imoveis.

O jeito que fiz vai ficar como a imagem abaixo. Vou deixar sempre 3 campos em branco para adicionar novos telefones. Para remover um telefone, basta deixa-lo em branco (em breve eu crio um botão com ajax para remover).

Vamos começar editando o lib/form/ImovelForm.class.php

class ImovelForm extends BaseImovelForm
{
  public function configure()
  {
      $todoWrapperForm = new sfForm();
      if ($this->getObject()->countTelefoneImovels() > 0) {
          foreach ($this->getObject()->getTelefoneImovels() as $telefone){
             $todoWrapperForm->embedForm(‘tel_’.$telefone->getId(), new TelefoneImovelForm($telefone));
          }
      }
    // adiciona os 3 forms em branco
    $todoWrapperForm->embedForm(‘tel_A’, new TelefoneImovelForm());
    $todoWrapperForm->embedForm(‘tel_B’, new TelefoneImovelForm());
    $todoWrapperForm->embedForm(‘tel_C’, new TelefoneImovelForm());

    $this->embedForm(‘tels’, $todoWrapperForm);

    $this->validatorSchema->setOption(‘filter_extra_fields’, false);
    $this->validatorSchema->setOption(‘allow_extra_fields’, true);

  }

  public function bind(array $taintedValues = null, array $taintedFiles = null) {
    foreach($this->embeddedForms[‘tels’]->getEmbeddedForms() as $key=>$telForm)
    {
       if ($taintedValues[‘tels’][$key][‘telefone’] == "")
       {
          unset($this->embeddedForms[‘tels’]->embeddedForms[$key], $taintedValues[‘tels’][$key]);
          $telForm->getObject()->delete();
       }
    }
    parent::bind($taintedValues, $taintedFiles);
  }

  // http://trac.symfony-project.org/ticket/5842
  public function saveEmbeddedForms($con = null, $forms = null, $taintedValues = null, $taintedFiles = null)
  {
    //atualiza o imovel_id da telefone_imovel depois de ter o imovel salvo
    //http://www.thatsquality.com/articles/embedding-child-forms-with-sfformpropel-a-practical-example
    foreach($this->embeddedForms[‘tels’]->getEmbeddedForms() as $telForm)
    {
       if (!$telForm->getObject()->getImovelId())
       {
         $telForm->getObject()->setImovelId($this->getObject()->getId());
       }
    }

    if (is_null($con))
    {
      $con = $this->getConnection();
    }

    if (is_null($forms))
    {
      $forms = $this->embeddedForms;
    }

    if (is_null($taintedValues))
   {
      $taintedValues = $this->taintedValues;
   }

   if (is_null($taintedFiles))
   {
      $taintedFiles = $this->taintedFiles;
   }

   foreach ($forms as $key => $form)
   {
       // é esse trecho que corrige o problema
       if ($form instanceof sfFormPropel)
       {
          $form->bindAndSave($taintedValues[$key], $taintedFiles);
       } else {
          $this->saveEmbeddedForms($con, $form->getEmbeddedForms(), $taintedValues[$key], $taintedFiles);
       }
   }
 }
}
 

Agora vamos criar um partial para mostrar os telefones no formulário. Crie o arquivo apps/backend/imovel/templates/_tels.php


<div id="embed_tels">
<?php foreach ($form->getEmbeddedForms() as $key => $itemForm) {
             if (substr($key , 0 , 8) == ‘tels’): ?>
                 <div class="sf_admin_form_row sf_admin_text sf_admin_form_field_telefone<?php echo preg_replace("/[^0-9]/", ‘’, $key); //only number ?>">
                    <div>
                       <?php echo $form[$key]; ?>
                    </div>
                 </div>
             <?php endif ?>
<?php } ?>
</div>
 

Depois de ter criado o partial, basta adiciona-lo ao apps/backend/imovel/config/generator.yml


edit:
  display: [_tels, campo1, campo2]
 

É isso.. tive como referência diversos sites, mas principalmente o blog that’s quality.

http://www.thatsquality.com/search?query=embedded

embedded form
form
php
propel

Comments (0)

Permalink

Adicionando um filtro customizado no admin generator (symfony 1.2)

Tenho uma tabela (1-N) que possui diversos telefones relacionados.

config/schema.yml:


imovel:
  id:
  ()
  created_at:

imovel_telefone:
  id:
  imovel_id:
  telefone:   varchar(20)
  created_at:
 

No admin generator, será necessário criar um filtro customizado, porque o telefone não faz parte da tabela imovel. Para isso, vamos alterar o arquivo lib/filter/ImovelFormFilter.class.php


class ImovelFormFilter extends BaseImovelFormFilter
{
  public function configure() {
     $this->widgetSchema[‘telefone’] = new sfWidgetFormInput();
     $this->validatorSchema[‘telefone’] = new sfValidatorPass(array(‘required’ => false));
  }

  public function getFields() {
    return array_merge(array(‘telefone’ => ‘Telefone’), parent::getFields());
  }

  protected function addTelefoneColumnCriteria(Criteria $criteria, $field, $values) {
    $criteria->addJoin(ImovelPeer::ID, TelefoneImovelPeer::IMOVEL_ID, Criteria::LEFT_JOIN);
    $criteria->add(TelefoneImovelPeer::TELEFONE, $values);
  }
}
 

Para finalizar, altere o generator.yml do seu backend e adicione o field telefone.


filter:
  fields:
    display:  [ telefone, campo1, campo2 ]
 

filter
php
symfony

Comments (0)

Permalink

Symfony Experts

Dia 21 de fevereiro o pessoal do symfonynerds.com lançou um novo portal: www.symfonyexperts.com

O site é basicamente igual ao WP Questions, porém totalmente voltado para o symfony.

Vale a pena dar uma olhada.

Mais informações aqui: http://symfonynerds.com/blog/?p=359

php
symfony

Comments (0)

Permalink

Symfony - Snippet - Maneiras de acessar o objeto User

Esses dias precisei utilizar o objeto User do symfony dentro dos forms.

Pesquisando na internet achei diversas maneiras de acessar o objeto pelo symfony.

Template / View

 $user = $sf_user;

Model ou Form

 $user = sfContext::getInstance()->getUser();

Action

 $user = $this->getUser();

ou

 $user = sfContext::getInstance()->getUser();

Creio que esse último exemplo funcione em qualquer lugar do symfony.

font: http://erisds.co.uk/symfony/snippet-symfony-user-access-the-user-object

php
snippet

Comments (0)

Permalink

Cansei de digitar “php symfony”, agora uso “sf”

Ontem cansei de tanto digitar “php symfony” no terminal.

Comecei um novo projeto no sf1.3 com o Doctrine. Como não conheço muito bem ainda essa versão, leveis uns trancos e tive que utilizar diversas vezes a linha de comando.

Para evitar de ficar toda hora escrevendo “php symfony …” fiz um alias:

$ echo “alias sf=‘php symfony’” >> ~/.bash_profile
$ . ~/.bash_profile

Pronto. Ao invés de digitar “php symfony” basta utilizar “sf”.

php

Comments (1)

Permalink

Snippet - Slug String


<?php
 
function slugString($string, $replacement = ‘_’)
{
  $aux = preg_quote($replacement, ‘/’);
 
  $map = array(
    ‘/à|á|ã|â/’ => ‘a’,
    ‘/è|é|ê|ẽ|ë/’ => ‘e’,
    ‘/ì|í|î/’ => ‘i’,
    ‘/ò|ó|ô|õ|ø/’ => ‘o’,
    ‘/ù|ú|ũ|û/’ => ‘u’,
    ‘/ç/’ => ‘c’,
    ‘/ñ/’ => ‘n’,
    ‘/ä|æ/’ => ‘ae’,
    ‘/ö/’ => ‘oe’,
    ‘/ü/’ => ‘ue’,
    ‘/Ä/’ => ‘Ae’,
    ‘/Ü/’ => ‘Ue’,
    ‘/Ö/’ => ‘Oe’,
    ‘/ß/’ => ‘ss’,
    ‘/[^\w\s]/’ => ‘ ‘,
    ‘/\s+/’ => $replacement
  );
 
  return preg_replace(array_keys($map), array_values($map), $string);
}
 

Fonte: http://api.cakephp.org/view_source/inflector/#line-480

php
snippet

Comments (1)

Permalink

Limpar cache do symfony sem utilizar o CLI

O método removePattern do sfFileCache pode receber “**” como parâmetro e desse modo conseguimos remover recursivamente todos os arquivos de uma determinada pasta.

Esse trecho é útil para apagar o cache sem acessar o CLI.

$frontend_cache_dir = sfConfig::get(‘sf_cache_dir’).‘/frontend/prod/template’;
$cache = new sfFileCache(array(‘cache_dir’ => $frontend_cache_dir));
$cache->removePattern(‘**’); // remove tudo do diretorio
 

É só isso.. =D

php

Comments (0)

Permalink