Archive of November 2008

26 Nov

Speed up your slow Firefox DNS lookups in Leopard OS X by turning off IPv6

Apple › System Preferences › Network › Advanced › TCP/IP tab › Configure IPv6 › Off

via

Find the Character Map in Leopard OS X

Apple › System Preferences › International › Input Menu
Check “Keyboard Viewer” and “Show input menu in menu bar”
Flag Menu › Show Keyboard Viewer

via

20 Nov

rm -rf ./*/.DS_Store
rm -rf ./*/.svn

— Tip for removing the .DS_Store files and .svn folders recursively throughout a folder tree.
17 Nov

Adding and/or injecting error messages into Symfony 1.1 Forms

Symfony 1.1 does a great job handling forms and form validation but say you have a few external forces checking the validity of the user submitted data, such as Paypal. Paypal would love to return it’s own error messages (thank you very much!) and tie it to a particular form field (say, the credit_card field).

Place this method into “symfony_project/lib/form/BaseFormPropel.class.php”:

/**
   * Define error
   *
   * <code>author Dmitry Nesteruk, Andrey Kotlyarov
   *

param string $fieldName *
param string $message
   *

return void */ public function defineError($fieldName, $message) { $checkName = ‘check_define_’.md5($fieldName); $this->getErrorSchema()->getValidator()->addOption($checkName); $this->getErrorSchema()->getValidator()->addMessage($checkName, $message); $this->getErrorSchema()->addError( new sfValidatorError( $this->getErrorSchema()->getValidator(), $checkName, array( ‘value’ => sfContext::getInstance()->getRequest()->getParameter($fieldName), $checkName => $this->getErrorSchema()->getValidator($checkName) ) ) ); }

And use it like so:

<br />
$this-&gt;form = new BillingForm();<br />
$Paypal-&gt;sendPayment();<br />
if(in_array($Paypal-&gt;error_codes,10527)){
	$this-&gt;form-&gt;defineError(&#8216;credit_card&#8217;,&#8220;Paypal doesn&#8217;t like your credit card number. Please try another.&#8221;);<br />
}<br />

Loading extra YAML config files in Symfony 1.1

At Dogster, we had a bunch of strings and settings that we wanted to keep out of our actions and place into their own YAML files instead of overloading the app.yml file. Here’s how I did it:

You can use this Filter to load the files we’ll setup in app.yml. Place this new PHP file at “symfony_project/apps/frontend/lib/addYmlFilter.class.php”.

class addYmlFilter extends sfFilter<br />
{
  public function execute($filterChain)
  {
    // Execute this filter only once
    if ($this-&gt;isFirstCall() &amp;&amp; is_array(sfConfig::get(&#8216;app_load_yml_files&#8217;)))
    {
      // Filters don&#8217;t have direct access to the request and user objects.
      // You will need to use the context object to get them
      foreach(sfConfig::get(&#8216;app_load_yml_files&#8217;) as $file){
        @include(sfContext::getInstance()-&gt;getConfigCache()-&gt;checkConfig(&#8216;config/&#8217;.$file.&#8217;.yml&#8217;));
      }
    }
    // Execute next filter
    $filterChain-&gt;execute();
  }<br />
}

That filter takes care of all your caching and per-environment settings, the same as app.yml or the others in the config folder.

We will now setup four (4) new YAML files (config/paypal.yml, config/email.yml, config/flash.yml, config/forms.yml)

Place this in your app.yml file:

load:
    yml_files:
        0: paypal
        1: email
        2: flash
        3: forms

Lastly, create a new YAML file “config/config_handlers.yml” with entries for each YAML file we would like to load:

config/paypal.yml:
  class:    sfDefineEnvironmentConfigHandler
  param:
    prefix: paypal_<br />
config/email.yml:
  class:    sfDefineEnvironmentConfigHandler
  param:
    prefix: email_<br />
config/forms.yml:
  class:    sfDefineEnvironmentConfigHandler
  param:
    prefix: forms_<br />
config/flash.yml:
  class:    sfDefineEnvironmentConfigHandler
  param:
    prefix: flash_

Here is some example content you might find within email.yml:

all:
  admin: &#39;admin@example.com&#39;

Once you load up Symfony, you should see all of your new config settings in the debug toolbar under “vars & config” > “SETTINGS”.

If you would like to place the new admin email setting within your code, you can now use sfConfig:

echo sfConfig::get(&#8216;email_admin&#8217;);<br />
//outputs: admin@example.com

Simple!


I just got this book for my birthday. It’s a beautiful book. I’ve read only a few entries and I’m already hooked. Let’s not forget to learn from those that came before us.