Il existe plusieurs façons de procéder, mais je pense que la meilleure consiste à utiliser les paramètres nommés .
Essentiellement, dans vos vues/clients/vue.ctp, vous ajoutez un customer_id au lien contacts/add :
$html->link(__('Add contact', true), array('controller' => 'contacts', 'action' => 'add', 'customer_id' => $customer['Customer']['id']));
et dans vos vues/contacts/add.ctp vous vérifiez le paramètre nommé et utilisez un champ caché :
if (isset($this->params['named']['customer_id'])) {
echo $form->input('customer_id', array('type' => 'hidden', 'value' => $this->params['named']['customer_id']));
} else {
echo $form->input('customer_id');
}
ou une sélection avec le bon client déjà sélectionné :
echo $form->input('customer_id', array('selected' => @$this->params['named']['customer_id']));