segunda-feira, 21 de junho de 2010

Sobre sfUser

O melhor link que achei na internet sobre como acessar sfUser das diferentes partes do symfony:
http://erisds.co.uk/symfony/snippet-symfony-user-access-the-user-object

Resumidamente é

Template / View:
$user = $sf_user;

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

Note: the context isn’t setup when using the command line, therefore if you use this in the save() method of an object and try to populate the object from a data-load it will throw an error: ‘The “default” context does not exist’.

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


sfGuardUser and sfGuardUserProfile

sfGuard is a popular plugin for Symfony which provides a complete set of tools for managing users, groups, permissions and profiles. Once the user object has been retrieved as above, the sfGuard user and profile are accessed as follows:

Template / View
$profile = $user->getGuardUser()->getProfile();

A Note on Snippets: When using frameworks such as Symfony it is often the simplest pieces of code which are the hardest to either find or remember. These snippets are placed here for my own reference and will hopefully be useful to others. If you find them useful or have any suggestions, please let me know.

domingo, 20 de junho de 2010

Ocultando backend.php da URL

Ainda não cheguei a nenhuma conclusão nem solução definitiva sobre isso, mas ficam aqui dois links para dar uma lida e implementar com cuidado em uma outra aplicação que não esteja em produção.
Eu tinha desenvolvido uma, mas não foi satisfatória então saí catando na internet. Achei duas prováveis soluções. Tentei aplicar as duas, mas não deu muito certo.

Verificar depois o porquê (com mais paciência e sem o deadline estourado).

Links:
1. http://jonocode.wordpress.com/2009/09/30/giving-your-symfony-apps-better-urls/
2. http://particul.es/blog/index.php?post/How-to-change-backend.php-to-admin-prefix-routes-automatically-symfony

terça-feira, 6 de abril de 2010

Sumário de comandos do symfony 1.4 (doctrine)

Comandos comumente usados para criação de um projeto no symfony 1.4.
Presumindo que o servidor já esteja configurado e que tenha sido criada a pasta projeto e dentro dela o caminho lib/vendor/symfony.
E que o databases.yml, schema.yml e o fixtures.yml também tenham sido configurados

Passos para Criação de Projeto:
php lib/vendor/symfony/data/bin/symfony generate:project projeto
php symfony generate:app frontend
chmod 777 cache/ log/

#Criando o mapeamento objeto-relacional usando Doctrine (ORM)
php symfony doctrine:build --model
php symfony doctrine:build --sql
php symfony doctrine:insert-sql

#Substitui os três comandos acima e acrescenta outros mais além de carregar dados do fixtures.yml
php symfony doctrine:build --all --and-load --no-confirmation

sábado, 27 de março de 2010

PDO Connection Error com symfony no Mac OS X

Estava tentando rodar o comando ./symfony doctrine:insert-sql quando surge o seguinte erro:
PDO Connection Error: SQLSTATE[HY000] [2002] No such file or directory 
Eu já tinha visto esse erro quando estava desenvolvendo no Ubuntu (agora desenvolvo num Mac OS X) e lembrei vagamente do que fiz para resolver. Procurei na internet, mas as sugestões de solução envolviam alterar meu php.ini, coisa que eu não queria fazer.
Assim fui buscar no germe de backup que tenho e achei o método que tinha adotado para resolver isso. Não lembro a fonte desta solução - provavelmente algum dos fóruns sobre symfony - mas ela consiste basicamente em adicionar a configuração da localização do mysql.sock usado. No caso, meu arquivo database.yml ficou assim:

all:
  doctrine:
    class: sfDoctrineDatabase
    param:
      dsn: 'mysql:host=localhost;dbname=jobeet;unix_socket=/Applications/MAMP/tmp/mysql/mysql.sock'
      username: jobeet
      password: jobeet

No caso para o Ubuntu, eu estava usando o Lampp com ORM Propel.  O arquivo consistia em:

dev:
  propel:
    param:
      classname: DebugPDO

test:
  propel:
    class: sfPropelDatabase
    param:
      classname: DebugPDO
      dsn: 'mysql:host=localhost;dbname=jobeet_test;unix_socket=/opt/lampp/var/mysql/mysql.sock'
      username: jobeet
      password: 'jobeet'

all:
  propel:
    class: sfPropelDatabase
    param:
      classname: PropelPDO
      dsn: 'mysql:host=localhost;dbname=jobeet;unix_socket=/opt/lampp/var/mysql/mysql.sock'
      username: jobeet
      password: 'jobeet'
      encoding: utf8
      persistent: true
      pooling: true

É só.

terça-feira, 23 de março de 2010

Welcome Mac OS X and MAMP

Depois de tanto trabalho pra desenvolver com o XAMPP e com o WAMPP (esse nem tanto, afinal é só dar dois cliques mesmo), estou tendo que configurar para desenvolver com o MAMP.

Não que a instalação seja difícil ou complicada: é só arrastar a pasta pra dentro do diretório de Aplicações.
O que eu realmente demorei para entender é porque não conseguia criar um Virtual Host usando 127.0.0.6 como eu conseguia no Windows. Vá entender, mas só consegui criar o Virtual Host usando o 127.0.0.1, coisa tinha tentado inicialmente no Windows e que não surtiu efeito (e que também levou tanto tempo quanto essa configuração do MAMP).

Realmente... vá entender.
Outra coisa que notei é que o Mac OS X já vem com um apache pré-instalado. Decidi não utilizá-lo, mas creio que seja fácil encontrar algum tutorial na net que ensine como. Ele encontra-se na pasta /private/etc/apache2/

É só.

quarta-feira, 10 de março de 2010

Symfony e I18N - Parte 01

Bem simples mesmo, basta configurar no arquivo settings.yml as opções:

all:
  .settings:
    i18n: on
    default_culture: pt_BR

E depois colar na pasta I18n do seu projeto, os arquivos sf_admin.pt_BR.xml e messages.pt_BR.xml. Existem outros arquivos .xml que podem atuar também nessa pasta, preciso explicitar aqui de uma próxima vez!

Lembrar de SEMPRE, mas SEMPRE, limpar o cache do symfony (php symfony cc), pois a internacionalização fica armazenada lá.

É só.

segunda-feira, 8 de fevereiro de 2010

Trim() em Javascript

Esse código permite a execução da função TRIM no javascript, passando como argumento um objeto.

/* Códigos de Javascript */

/**
* Função que simula a função TRIM() - retira os espaços em branco antes e após o conteúdo do campo
* Passado como argumento um objeto (geralmente do tipo TEXT) e neste mesmo recebendo o retorno
**/
function limparEspacosSobrando(obj) {
var str = obj.value;
//ltrim
str = str.replace(new RegExp("^[\\s]+", "g"), "");
//rtrim
str = str.replace(new RegExp("[\\s]+$", "g"), "");
obj.value = str;
}

quinta-feira, 21 de janeiro de 2010

Configurando ambiente de desenvolvimento em PHP - parte 01

Não sei quantas partes isso vai ter (esta pode ser inclusive a única), o que importa agora é guardar como configurar o Apache do WAMPSERVER 2.0i para rodar os projetos numa URL denominada 'http://projeto.local' ao invés de 'http://localhost/projeto'.

O porquê? Por questões de segurança, organização, pra ficar mais bonitinho, não importa muito pra mim agora. O importante é lembrar como fazer isso sem ter que ficar reomendo o resto de neurônios que tenho. Assim, presumo que já se tenha instalado o WAMPSERVER 2.0 (sim, é pra Windows, mas juro que um dia explico como fazer pro UBUNTU usando o XAMPP, pelo menos).

Para lembrar aos esquecidos como eu ou para orientar quem ainda está caminhando, nós temos certos endereços de IP reservados, dessa forma vou citar um treco de um artigo do Wikipédia que explica sucintamente (e não preciso reinventar a roda):
Localhost

A faixa de IP 127.0.0.0 – 127.255.255.255 (ou 127.0.0.0/8 na notação CIDR) é reservada para a comunicação com o computador local (localhost). Qualquer pacote enviado para estes endereços ficarão no computador que os gerou e serão tratados como se fossem pacotes recebidos pela rede (Loopback).

O endereço de loopback local (127.0.0.0/8) permite à aplicação-cliente endereçar ao servidor na mesma máquina sem saber o endereço do host, chamado de "localhost".

Na pilha do protocolo TCP/IP, a informação flui para a camada de rede, onde a camada do protocolo IP reencaminha de volta através da pilha. Este procedimento esconde a distinção entre ligação remota e local.

(Fonte: Wikipédia e Acessado em: 21 de Janeiro de 2010)

Dessa forma queremos atribuir, por exemplo, o endereço IP '127.0.0.6' a URL 'http://projeto.local'. Assim, inserimos no final do arquivo 'hosts' localizado no Windows XP em 'C:\WINDOWS\system32\drivers\etc' a seguinte linha:
127.0.0.6 projeto.local

Depois, vamos editar o arquivo 'httpd.conf' do Apache. Nesse arquivo é só descomentar (tirar o # da frente) a linha que tem "Include conf/extra/httpd-vhosts.conf". Salva e fecha.

Então, edita o arquivo 'httpd-vhosts.conf' do Apache, colocando a seguinte configuração:
<VirtualHost 127.0.0.2:80>
  ServerName atlas.local
  DocumentRoot "D:\projeto\web"
  DirectoryIndex index.php
  <Directory "D:\projeto\web">
    AllowOverride All
    Allow from All
  </Directory>
</VirtualHost>

Notar que nesse exemplo estou dizendo que meu diretório principal é 'D:\projeto\web' e que minha página inicial padrão é 'index.php'. Nada impede de especificar outro diretório.

Pronto! Agora é só reiniciar o WAMPSERVER e acessar por qualquer navegador.

segunda-feira, 11 de janeiro de 2010

Sobre PEAR e Wamp2.0

Meu primeiro post vai ser bem apressado (como provavelmente a maioria será).

Hoje estava num impasse pois o WAMP não queria funcionar com o PEAR. O erro apresentado era algo como "don't have signature".

Após procurar no Google (claro!) achei alguns outros posts que me ajudaram a resolver o problema. O fato é que apesar de ter seguido a risca todos eles, em nenhum foi mencionado pra se ter cuidado quando se fosse alterar o arquivo php.ini.

O fato é que no WAMP temos alguns arquivos php.ini e mesmo que alteremos através da interface do WAMP, não será o php.ini que queremos que será alterado.
Para que qualquer uma das dicas achadas nos sites referenciados abaixo funcione, temos que alterar o php.ini da pasta que contém o php.exe e não somente a que o apache usa.

Os sites que pesquisei:
http://blog.calevans.com/2009/07/11/xampp-php-5-3-pear-and-phar-what-a-mess/
http://lenss.nl/2008/07/pear-install-weirdness/