29 de janeiro de 2010

Acções adicionais em formulários do Admin Generator

Para adicionar uma função no formulário de edição do Admin Generator, para além das convencionais: "Back to List", "Save" e "Save and Add" temos que editar o generator desse módulo e criar a acção:

Editar o ficheiro app_name/modules/module_name/config/generator.yml:
generator:
  param:
    config:
      actions: ~
      fields:  ~
      list: ~
      filter:  ~
      form: ~
      edit:
        actions:
          _list: ~
          _save: ~
          _save_and_add: ~
          _delete: ~
          save_and_edit_template:
            name: "Save and Edit Template"
            params: confirm=De certeza?
            action: saveAndEditTemplate
      new:     ~

Agora criar a respectiva acção  em app_name/modules/module_name/actions/actions.class.php:
class productActions extends autoProductActions
{
  public function executeSaveAndEditTemplate(sfWebRequest $request)
  {
    // codigo
  }
}


Nota:
No exemplo acima a acção estará apenas disponível ao editar um objecto, mas o bloco "actions" pode ser movido para o "new" (acção apenas disponível ao criar novo objecto), ou para o "form" (acção disponível na edição e criação).

28 de janeiro de 2010

Variaveis globais do sfConfig


Symfony Framework

sf_symfony_lib_dir
The real path to the framework’s lib directory
(/usr/share/php/symfony/symfony12/lib)

Project Structure and Layout

sf_root_dir
The path to the project root
(/var/www/project_name)
sf_apps_dir
The path to the project’s apps folder
(/var/www/project_name/apps)
sf_lib_dir
The path to the project’s lib folder
(/var/www/project_name/lib)
sf_log_dir
The path to the project’s log folder
(/var/www/project_name/log)
sf_data_dir
The path to the project’s data folder
(/var/www/project_name/data)
sf_config_dir
The path to the project’s config folder
(/var/www/project_name/config)
sf_test_dir
The path to the project’s test folder
(/var/www/project_name/test)
sf_doc_dir
The path to the project’s doc folder
(/var/www/project_name/doc)
sf_plugins_dir
The path to the project’s plugins folder
(/var/www/project_name/plugins)
sf_cache_dir
The path to the project’s plugins folder
(/var/www/project_name/cache)
sf_web_dir
The path to the project’s plugins folder
(/var/www/project_name/web)
sf_upload_dir
The path to the project’s upload folder
(/var/www/project_name/web/uploads)

Application Information

sf_app
The current application
(backend)
sf_environment
The current environment
(dev)
sf_debug
Whether debugging is enabled
(1)

Application Structure and Layout

sf_app_dir
The path to the current application
(/var/www/project_name/apps/backend)
sf_app_config_dir
The path to the current application’s config directory
(/var/www/project_name/apps/backend/config)
sf_app_lib_dir
The path to the current application’s lib directory
(/var/www/project_name/apps/backend/lib)
sf_app_module_dir
The path to the current application’s module directory
(/var/www/project_name/apps/backend/modules)
sf_app_template_dir
The path to the current application’s template directory
(/var/www/project_name/apps/backend/templates)
sf_app_i18n_dir
The path to the current application’s i18n directory
(/var/www/project_name/apps/backend/i18n)

Cache Structure and Layout

sf_app_base_cache_dir
The path to the current application’s directory in the cache
(/var/www/project_name/cache/backend)
sf_app_cache_dir
The path to the current application’s directory in the cache by current environment
(/var/www/project_name/cache/backend/dev)
sf_template_cache_dir
The path to the current application’s templates directory in the cache by current environment
(/var/www/project_name/cache/backend/dev/template)
sf_i18n_cache_dir
The path to the current application’s i18n directory in the cache by current environment
(/var/www/project_name/cache/backend/dev/i18n)
sf_config_cache_dir
The path to the current application’s config directory in the cache by current environment
(/var/www/project_name/cache/backend/dev/config)
sf_test_cache_dir
The path to the current application’s test directory in the cache by current environment
(/var/www/project_name/cache/backend/dev/test)
sf_module_cache_dir
The path to the current application’s modules directory in the cache by current environment
(/var/www/project_name/cache/backend/dev/modules)

Application Settings

You can access any value in settings.yml by prepending “sf_” to the value.
sf_error_404_module
The module that contains the 404 action (default)
sf_error_404_action
The action that displays the 404 error (error404)
sf_logging_enabled
Boolean for whether logging is currently enabled (1)
sf_escaping_strategy
Whether the sfView class is using the Escaping Strategy (1)
sf_no_script_name
Whether the application is requiring the script name. (1)
sf_csrf_secret
The CSRF secret (UniqueSecret)

Onchange em DoctrineForms


$this->widgetSchema['category_id'] = new sfWidgetFormDoctrineChoice(array(
'model' => 'Category',
'default' => '',
'add_empty' => 'Seleccione categoria'
), array('onchange' => 'alert("hi")'));

27 de janeiro de 2010

Obter o last insert id.

Eis a forma de obter o last_insert_id quando estamos a usar as querys Propel em raw sql.

$this->conn = Propel::getConnection();
$query = "INSERT INTO something (something, something)";
$statement = $this->conn->prepare(query);
$result = $statement->execute();

$new_created_id = $this->conn->LastInsertId();

26 de janeiro de 2010

Problemas com schema.yml e doctrine:insert-sql

Já não é a primeira vez que tenho problemas em gerar o sql para o meu schema.yml...

Cenário
Altero o schema.yml, executo php symfony doctrine:build --sql mas quando vejo o ficheiro .sql gerado, ele não corresponde ao schema definido!

Motivo
O .sql é gerado a partir do modelo e não do schema.yml

Solução
  1. Alterar o schema.yml conforme pretendido
  2. Gerar o novo modelo com php symfony doctrine:build --model
  3. Agora sim, executar php symfony doctrine:build --sql

19 de janeiro de 2010

Embed Forms no Symfony

Para analisar e eventualmente traduzir :)

http://sandbox-ws.com/frameworks/symfony-frameworks/how-to-embed-forms-in-symfony-12-admin-generator

http://sandbox-ws.com/frameworks/symfony-frameworks/how-to-embed-forms-in-symfony-12-admin-generator-part-2

http://sandbox-ws.com/frameworks/symfony-frameworks/how-to-embed-forms-in-symfony-12-admin-generator-part-3

12 de janeiro de 2010

30 boas práticas em Symfony


Encontrado aqui.

Layout específico para um método

Por vezes precisamos de ter um método com um layout completamente diferente do geral (que está em: aplicacao/templates/layout.php).

Para atribuir um layout diferente a um módulo específico basta:
  1. Criar o novo layout em: aplicacao/novo_layout.php
  2. No modulo pretendido, criar o ficheiro: aplicacao/modulo/config/view.yml
  3. Nesse novo ficheiro dizer qual o layout que diz respeito ao método pretendido, assim:
termsSuccess:
layout: plain_layout
# neste caso o metodo termsSuccess terá o layout definido em aplicacao/templates/plain_layout.php
No ficheiro views.yml é também possível dizer que um determinado método não tem qualquer layout associado (ex: o método serve apenas fazer uma chamada à base de dados e é redireccionado após isso para a homepage):
leadCentreSubmitSuccess:
has_layout: false
# a vista leadCentreSubmitSuccess.php não existe
Quando se definem estas excepções de vistas, é sempre seguro assegurar que o layout pré-definido não é afectado, por isso convém acrescentar esta linha ao ficheiro views.yml:
all:
layout: layout
# assegura que o layout pre-definido continua a ser o aplicacao/tempaltes/layout.php

Redirect para Referer (página anterior)

Esta técnica permite redireccionar o utilizador para a página anterior, no caso de existir, ou para a página principal:
public function executeShow(sfWebRequest $request)
{
// ....
$referer = $this->getRequest()->getReferer();
$this->redirect($referer ? $referer : '@homepage');
}


Espero que vos dê tanto jeito como a mim :)