sexta-feira, 31 de dezembro de 2010

Video muito legal

Para quem já assistiu matrix.

http://www.youtube.com/watch?v=yX8yrOAjfKM&feature=fvw

Nada a ver com programação mas é legallll.
Abraços pessoal e feliz 2011 a todos!!!!

terça-feira, 9 de novembro de 2010

Personalizar o Generator do processForm()

Para personalizar o generator do processForm vá até o arquivo com o caminho abaixo:
  • \lib\vendor\symfony\lib\plugins\sfDoctrinePlugin\data\generator\sfDoctrineModule\admin\parts\processFormAction.php 
Uma opção para alterar este arquivo seria por exemplo setar algum atributo que existe em todas as suas ClassesForm , no caso posso sitar o usuário que fez a ultima atualização
protected function processForm(sfWebRequest $request, sfForm $form)
  {
$form->bind($request->getParameter($form->getName()), $request->getFiles($form->getName()));
    if ($form->isValid())
    {
      $notice = $form->getObject()->isNew() ? 'The item was created successfully.' : 'The item was updated successfully.';

      try {
            try {
 //linha personalizada               
$form->getObject()->setUpdatedUser($this->getUser());
            } catch (Exception $exc) {
                echo $exc->getTraceAsString();
            }
.
.
.
.
.

Bom pessoal este é o exemplo, e lembrando é claro que qualquer alteração nesta classe afetará todos os seus módulos que utilizarem o generator

Abraço a todos 

sexta-feira, 29 de outubro de 2010

Configurando e Utilizando o NetBenas com Symfony

Pessoal este link é um screencast do netbenas.org, de como utilizá-lo com o synfomy.
Para quem gosta do Netbenas, vai adorar.
http://netbeans.org/kb/docs/php/symfony-screencast.html

Abrços

terça-feira, 5 de outubro de 2010

Ajax no Symfony 1.4

Ola pessoal, hoje quero dar um "help" para quem está sofrendo com o use_helper("Javascript").


Até a versão 1.3 o sfProtocolousPlugin vinha "embutido" no symfony,
mas no 1.4 não. Isto para que fosse possível escolher mais facilmente
entre Prototype (que parece um pouco parado no tempo, apesar de
poderoso) e jQuery (que continua com ativo desenvolvimento e largo
uso). 
Você deve optar então entre os dois plugins: 
ESTE tem o helper "Javascript". 
Este tem o helper "jQuery". 

Para o uso de ajax com o symfony e o plugin sfJqueryReloadedPlugin, voce deve instalar seguindo as instruções  do link acima, e, após isso configurar no seu arquivo setings.yml 
all:
  standard_helpers: ..., jQuery]

Pronto para o uso agora a cada chamada de função javascript basta por o prefixo jq_ como por exemplo:

<div id="ja">asassas</div>
<?php
echo javascript_tag(jq_update_element_function('ja', array('position'=>'after', 'content' =>'<strong>Data processing complete</strong>')));
?>


quinta-feira, 30 de setembro de 2010

Remover arquivos e e classes não utilizadas

Ola a todos, sempre quando precisei remover módulos não mais utilizados em minha aplicação eu tinha de entrar nas pastas dentro do lib ( form, filter e model) e remover os arquivos manualmente e também as suas routes.
A pouco um colega( Gilmar Pupo) me passou um comando para o Doctrine:
php symfony dotrine:clean-model-files


Obs - para que este arquivo funcione perfeitamente seu arquivo schema.yml deve estar atualizado.


Após feito isso basta remover os arquivos (que você deseja é claro) da sua aplicação que está localizada em  app/...
Também é necessário editar seu arquivo routing.yml que está dentro da pasta de sua aplicação/config/. então removendo as linhas referentes aos módulos não mais utilizados.


Abraço a todos

quarta-feira, 15 de setembro de 2010

Symfony - Ambiente de Debug na produção *_dev.php

Para o _dev.php funcionar em produção é só comentar o condicional 
no inicio do arquivo _dev.php ( linhas 1,2,3,4) que verifica o ip do usuário remoto. 



1. if (!in_array(@$_SERVER['REMOTE_ADDR'], array('127.0.0.1', '::1')))
2. {
3.   die('You are not allowed to access this file. Check '.basename(__FILE__).' for more information.');
4. }
5.
6. require_once(dirname(__FILE__).'/../config/ProjectConfiguration.class.php');
7.
8. $configuration = ProjectConfiguration::getApplicationConfiguration('frontend', 'dev', true);
9. sfContext::createInstance($configuration)->dispatch();

Auxílio para esta dica: Raphael Almeida Araújo

sábado, 4 de setembro de 2010

Symfony - o Arquivo de tradução mais completo da web

Para atualizar seu arquivo de tradução para português-Brasil cole o conteúdo que segue abaixo no arquivo localizado em : \lib\vendor\symfony\lib\plugins\sfDoctrinePlugin\i18n\sf_admin.pt_BR.xml.
Este conteúdo deve ser colando substituindo todo o conteúdo do arquivo.



<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE xliff PUBLIC "-//XLIFF//DTD XLIFF//EN" "http://www.oasis-open.org/committees/xliff/documents/xliff.dtd" >
<xliff version="1.0">
  <file original="global" source-language="en" datatype="plaintext">
    <header />
    <body>
      <!-- Actions -->
      <trans-unit>
        <source>New</source>
        <target>Novo</target>
      </trans-unit>
      <trans-unit>
        <source>Edit</source>
        <target>Editar</target>
      </trans-unit>
      <trans-unit>
        <source>Delete</source>
        <target>Remover</target>
      </trans-unit>
      <trans-unit>
        <source>List</source>
        <target>Listar</target>
      </trans-unit>
      <trans-unit>
        <source>Save</source>
        <target>Salvar</target>
      </trans-unit>
      <trans-unit>
        <source>Save and add</source>
        <target>Salvar e Adicionar outro</target>
      </trans-unit>
      <trans-unit>
        <source>Cancel</source>
        <target>Cancelar</target>
      </trans-unit>
      <trans-unit>
        <source>Choose an action</source>
        <target>Escolha uma opção</target>
      </trans-unit>
      <trans-unit>
        <source>go</source>
        <target>ir</target>
      </trans-unit>
      <trans-unit>
        <source>Actions</source>
        <target>Ações</target>
      </trans-unit>

      <!-- Filters -->
      <trans-unit>
        <source>Reset</source>
        <target>Limpar</target>
      </trans-unit>
      <trans-unit>
        <source>Filter</source>
        <target>Filtrar</target>
      </trans-unit>
      <trans-unit>
        <source>is empty</source>
        <target>Vazio</target>
      </trans-unit>
      <trans-unit>
        <source>from</source>
        <target>De</target>
      </trans-unit>
      <trans-unit>
        <source>to</source>
        <target>até</target>
      </trans-unit>
          
      <!-- List -->
      <trans-unit>
        <source>No result</source>
        <target>Nenhum resultado.</target>
      </trans-unit>
      <trans-unit>
        <source>Actions</source>
        <target>Ações</target>
      </trans-unit>
      <trans-unit>
        <source>(page %%page%%/%%nb_pages%%)</source>
        <target>(página %%page%%/%%nb_pages%%)</target>
      </trans-unit>
      <trans-unit>
        <source>asc</source>
        <target>asc</target>
      </trans-unit>
      <trans-unit>
        <source>desc</source>
        <target>desc</target>
      </trans-unit>

      <!-- Pagination -->
      <trans-unit>
        <source>First page</source>
        <target>Primeira página</target>
      </trans-unit>
      <trans-unit>
        <source>Previous page</source>
        <target>Página anterior</target>
      </trans-unit>
      <trans-unit>
        <source>Next page</source>
        <target>Próxima página</target>
      </trans-unit>
      <trans-unit>
        <source>Last page</source>
        <target>Última página</target>
      </trans-unit>
      <trans-unit>
       <source>1 result</source>
       <target>1 resultado encontrado</target>
      </trans-unit>
      <trans-unit>
       <source>results</source>
       <target>resultados encontrados</target>
      </trans-unit>
      <trans-unit>
       <source>[0] no result|[1] 1 result|(1,+Inf] %1% results</source>
       <target>[0] sem resultado|[1] 1 resultado|(1,+Inf] %1% resultados</target>
      </trans-unit>


      <!-- Form -->
      <trans-unit>
        <source>The item was created successfully.</source>
        <target>Item adicionado com sucesso.</target>
      </trans-unit>
      <trans-unit>
        <source>The item was updated successfully.</source>
        <target>Item atualizado com sucesso.</target>
      </trans-unit>
      <trans-unit>
        <source>The item was created successfully. You can add another one below.</source>
        <target>Item adicionado com sucesso. Você pode adicionar outro abaixo.</target>
      </trans-unit>
      <trans-unit>
        <source>The item was updated successfully. You can add another one below.</source>
        <target>Item atualizado com sucesso. Você pode adicionar outro abaixo.</target>
      </trans-unit>
      <trans-unit>
        <source>The item has not been saved due to some errors.</source>
        <target>Item não atualizado devido a erros.</target>
      </trans-unit>
      <trans-unit>
        <source>The item was deleted successfully.</source>
        <target>Item removido com sucesso.</target>
      </trans-unit>
      <trans-unit>
        <source>The item was deleted successfully.</source>
        <target>Ítem excluído com sucesso.</target>
      </trans-unit>
      <trans-unit>
        <source>You must at least select one item.</source>
        <target>Você deve selecionar pelo menos um ítem.</target>
      </trans-unit>
      <trans-unit>
        <source>You must select an action to execute on the selected items.</source>
        <target>Você deve selecionar uma ação a ser executada nos ítens selecionados.</target>
      </trans-unit>
      <trans-unit>
        <source>A problem occurs when deleting the selected items as some items do not exist anymore.</source>
        <target>Ocorreu um problema ao excluir os ítens selecionados pois alguns deles não existem mais.</target>
      </trans-unit>
      <trans-unit>
        <source>The selected items have been deleted successfully.</source>
        <target>Os ítens selecionados foram excluídos com sucesso.</target>
      </trans-unit>
      <trans-unit>
        <source>A problem occurs when deleting the selected items.</source>
        <target>Ocorreu um problema ao deletar os ítens selecionados.</target>
      </trans-unit>
    </body>
  </file>
</xliff>

sexta-feira, 3 de setembro de 2010

Symfony - Personalizar Todos os Formulários

Abra o arquivo localizado em lib\form\doctrine\BaseFormDoctrine.class.php, coloque seu comando dentro da function setup().
No exemplo abaixo estou ocultando os campos created_at e updated_at, de todos os meus módulos

abstract class BaseFormDoctrine extends sfFormDoctrine
{
public function setup()
{
unset ($this['created_at']);
unset ($this['updated_at']);
}
}

quarta-feira, 1 de setembro de 2010

Symfony - Internacionalização




Uma das grandes vantagens do Symfony é a sua facilidade para trabalhar com internacionalização, mas por algum motivo ou por ser novo ainda, as vezes falta algum passo em sua documentação para que o desenvolvedor chegue no seu propósito.


No caso da Internacionalização a primeira coisa que deve ser feita é alterar o arquivo apps/"sua_aplicação"/config/settings.yml. 
Devemos habilitar 2 parâmetros: um referente ao i18n e o outro ao culture. São eles:
all: 
  .settings: 
      i18n: on 
     default_culture: pt_BR 
A linha i18n serve para habilitar o suporte a internacionalização do symfony e a default_culture creio que dispensa explicações.
Após feito isso basta limpar o cache através do comando de linha "php symfony cc", e pronto sua aplicação está em Português Brasil.


terça-feira, 31 de agosto de 2010

PDO PHP Data Objects

O FrameWork Symfony utiliza dois frameworks de acesso a base de dados o Propel e o Doctrine, onde ambos utilizam a conexão nativa do PHP a partir da versão 5 o PDO.
O PHP Data Objects (PDO) extensão define uma interface leve e consistente para acessar bancos de dados em PHP. Cada driver de banco de dados que implementa a interface PDO pode expor recursos de banco de dados específicos, funções de extensão regular. 
Observe que você não pode executar todas as funções de banco de dados usando a extensão PDO, por si só, você deve usar um banco de dados específico PDO driver para acessar um servidor de banco de dados. 
PDO proporciona uma camada de abstração de acesso de dados, o que significa que, independentemente de qual banco de dados você está usando, você pode usar as mesmas funções, fazer consultas e buscar dados. PDO não fornece só uma abstração de banco de dados, mas também o livra de reescrever SQL, ou até não escrever comandos SQL.
Atualmente o PDO suporta os seguintes Drives:




Symfony framework de alta produtividade

O framework symfony tem sido um projeto Open-Source por mais de três anos e tornou-se um dos mais populares frameworks PHP graças as suas poderosas características e a sua excelente documentação. E esta grandiosa tradição iniciou cedo.
Em dezembro de 2005, logo após o primeiro lançamento oficial do symfony, onde foi publicado o "tutorial Askeet", um conjunto de 24 tutoriais, publicados dia-a-dia entre o dia primeiro de Dezembro e o Natal.
Este tutorial tem provado ser uma valiosa ferramenta para promover o framework para os recém-chegados. Muitos desenvolvedores aprenderam symfony graças ao askeet, e muitas empresas ainda utilizam o askeet como seu principal material de treinamento.
Estão agora celebrando o lançamento do symfony 2.0 e o tutorial askeet começa a mostrar sua idade. Portanto, é hora de um outro tutorial novo.
Apartir da versão 1.2 foi criado o tutorial Jobeet, super interessante e prático.
Tenho certeza que se você já programa em php vai achar ótimo, e em uma semana seguindo o tutorial você terá um sistema pronto, com aplicação "frontend e backend".