You have the error catcher outside for the for statement, thus it won't execute.
Your IF statement:
if ($row->getName() == "zed-catcher")
{
echo $form['service_code']->renderLabel();
echo $form['service_code']->renderError();
echo $form['service_code'];
}
Needs to be within the "if"..
Otherwise you can do:
$zedcatcher = false;
foreach($catcher_names as $row)
{
if ($row->getName() == "zed-catcher")
{
$zedcatcher = true;
}
?>
<option value="<?php echo $row->getName()."/".$row->getId();?>"<?php
if($row->getName() == $catcher_name) echo 'selected="selected"';?>><?php echo $row->getName();?></option>
<?php
}
if ($zedcatcher === true)
{
echo $form['service_code']->renderLabel();
echo $form['service_code']->renderError();
echo $form['service_code'];
}
Using 3 ='s is so that you capture actual true, instead of just containing a value.
This will allow you to display the drop down list, but still capture that 'zed-catcher'.
I just quickly tossed this into the input box, so may need to be tweaked.