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.
Soluções rápidas para problemas encontrados durante o desenvolvimento (geralmente de programação web) para alguma coisa. Também chamado de "Lembre-me Depois Como Fazer Isso" :D
segunda-feira, 21 de junho de 2010
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
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
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:
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:
No caso para o Ubuntu, eu estava usando o Lampp com ORM Propel. O arquivo consistia em:
É só.
PDO Connection Error: SQLSTATE[HY000] [2002] No such file or directoryEu 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ó.
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ó.
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ó.
sexta-feira, 5 de março de 2010
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;
}
/* 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):
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:
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:
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.
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/
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/