x

Mixing Object and Form Helpers in Symfony

Web Computing  phpAugust 21st, 2008
post #126 

Being new to Symfony I’m still getting my head around some of its paradigms. Two months with the manual before embarking on any development taught me that it was worth pursuing, but there’re always areas you need to see working.

The Object form helpers looked particularly useful, so for my first production development I aim to use them wherever possible. These helpers allow you edit objects directly, simplifying the update process back in your actions.

sample form in editformSuccess.html?php echo form_tag('editform/updatetitle'); ?>
<?php echo object_input_hidden_tag($newsletter, 'getID') ;?>
Title: <?php echo object_input_tag($newsletter, 'getTitle') ;?>
<?php echo submit_tag('update'); ?>

and in actions.class.html?php
public function executeEditform($request)
{
$this->newsletter = »
NewsletterPeer::retrieveByPk($request->getParameter(’id’));
$this->forward404Unless($this->newsletter);
}

public function executeUpdatetitle($request)
{
$nltoupdate = NewsletterPeer::retrieveByPk($request->getParameter(’id’));
$this->forward404Unless($nltoupdate );
$nltoupdate->fromArray(»
$this->getRequest()->getParameterHolder()->getAll(),BasePeer::TYPE_FIELDNAME);
$nltoupdate->save();
return $this->redirect(»
‘newsletters/view?id=’.$request->getParameter(’id’));
}

The update code uses the fromArray method to update any properties of your object it holds data for, received from your form. Adding fields to your form doesn’t require changes to the action.

I got into difficulties when it came to setting a boolean field for my object, called “IsPublished”. Wishing to stick with the Object form helpers I investigated the Object_select_tag, however this has a different use altogether - allowing you to grab properties of other objects to match with your current object. The classic example being choosing an author from the authors object to match up to a post object.

I still wanted to save a property for my object, but I didn’t want to have it select from the object, or grab values from other objects. Further searches revealed I wasn’t alone in wondering how to set default selected values and generally get to grips with object_select_tag.

Mixing Object and Form helpers seemed the best solution, using select_tag for my boolean field. However this meant I wasn’t using the Object helper exclusively, so would it still work with fromArray?

The form code generated looked promisingly simple, so I tried a mix of object_input_tag and select_tag in my editformSuccess.html?php
$defaultOption = »
$newsletter->getIsPublished() == 1?1:0; # get current, set default
echo select_tag(’in_published‘, options_for_select(array(»
0, 1),
$defaultOption));
?>

Note the highlighted property in select_tag. My Object Property is called “IsPublished”. To object-generate a plain text input field I’d have used:

<?php
Published: <?php echo object_input_tag($newsletter, 'getIsPublished') ;
?>

So my current field value would be retrieved, and the Object helper generates form fields using BasePeer::TYPE_FIELDNAME which in turn is used in my fromArray method to update the Db.

Normally one would use select_tag with internal field names (BasePeer:: TYPE:PHP_NAME) and write more action code to marry them up before a save(), however here I have to add my database field name into my view code.

Tethering your templates to your database schema is a route no-one should go down. So the internal name should be converted to the Db name on-the-fly in your template. The Peer classes have a function for this, and its public. The following call converts your usual internal field name for you, ready to drop into your select_tag:


<?php
$IsPublished_translated = BaseNewsletterPeer::translateFieldName(»‘IsPublished’,BasePeer::TYPE_PHPNAME, BasePeer::TYPE_FIELDNAME )
?>

You could assign this in your action, but it works just as well in the template:

<?php
echo select_tag(»
BaseNewsletterPeer::translateFieldName(»
‘IsPublished’,BasePeer::TYPE_PHPNAME, BasePeer::TYPE_FIELDNAME
‘,»
options_for_select(array(»
0, 1),
$defaultOption));
?>

A final step would be to migrate this into a function higher up that so as to make templates a little prettier when editing.

SuperLambBanana outbreak, William Brown Street

observationAugust 15th, 2008
post #125 


post #124 

Looks like there’ll be no more Twitter mobile updates on the UK number. According to the email this morning the cost of sending Twitter updates to our mobiles has become prohibitive.

I’m not sure if there’s a bad guy in this, or if this just shows how social networking doesn’t have the power to sweep traditional business aside after all. That Twitter didn’t come up with a premium service to address this earlier probably means they’re hoping that user outcry will force some sort of reinstatement, a full or partial climbdown on the part of the operators.

We’ll see, but we’ll probably have to log on to see.

Your history is your business, not ours

Web ComputingJuly 28th, 2008
post #123 

I like the sound of Cuil- all the goodness of their ex-employer without the digital footprint. Their privacy page reads:

Privacy is a hot topic these days, and we want you to feel totally comfortable using our service, so our privacy policy is very simple: when you search with Cuil, we do not collect any personally identifiable information, period. We have no idea who sends queries: not by name, not by IP address, and not by cookies (more on this later). Your search history is your business, not ours.

Right now though I’m waiting a long time for the first few of the 1,682,519,994 results promised on a search of this blog’s title to appear. The first time I tried it I got a rapid response - saying there were no results. But I’m optimistic that this could be my search engine of choice when things settle down. Their claim to examine the context of search queries in order to refine results is interesting and I wonder what it means in practice.

While a good tactic for a launch I don’t imagine the black homepage with centred box will last, not least when they quickly revert to convention for the results; but the results page layout of boxed up summaries is pleasant and readable - not unlike a good news site.

Now I’m waiting for page 2, and the features, privacy and management pages have all gone missing. I’ll come back tomorrow.

No art for airports

paintingJuly 24th, 2008
post #122 

A Google alert brought this Times Online article, giving a first glimpse of the John Moores 25 Open Painting competition shortlist,to my attention - a bit sensationalist and some unfair reactions to the Chapman’s co-judging the show. After seeing their show at the Tate recently I have no doubt that they’d make excellent judges for JM25. They make no  mention of art critic Sacha Craddock being on the judging panel.

Former winner and Juror Graham Crowley notes:

“There’s no art for airports or corporate foyers in this show. There is a great range in subject matter and context, and an urgency to the exhibition that I hadn’t anticipated”

The article includes a slideshow of some shortlisted entries, and the full shortlist’s here: https://www.liverpoolmuseums.org.uk/walker/

and the show opens in… 57 days.

‘Bonekickers’ has entered its …

history / prehistoryJuly 22nd, 2008
post #121 

‘Bonekickers’ has entered its ‘get a room’ phase. Read the rest of this entry »

Advances in Computer Security and Forensics Conference

Web ComputingJuly 22nd, 2008
post #120 

I’m really glad I got the opportunity to attend this event. It’s given my own research and writing a bit of a boost, but its also shown me just how important advances in this field are.

On day one we heard from Merseyside High Tech Crimes (HTC) Unit, about their day to day challenges and how they’re overcome. We also heard from a career digital forensic analyst about recovering data from all makes and models of mobile devices: handhelds, phones and the like, and the ways and means of recovering data from the removable media they commonly use.

On day two there was a practitioner talk from Henrik Kiertzner, about the technology’s propensity to nurture self-selecting constituencies, groups of like minded (though possibly geographically dispersed) individuals with ideologies in accelerated development - and how we’re unlikely to even notice them until they make their move.

We heard from Mark Taylor about scoping corporate forensic investigations, which gave me additional avenues of inquiry for my own research.

The keynote speaker Jim Gamble from the Child Exploitation and Online Protection Centre brought us insights - with wit and wisdom - from a truly difficult field and a call to developers to understand the difference their expertise can make to young individuals. Many of the techniques they use in the kind of cybercrime they combat are traditional. Knowing your enemy being one of them.

I’d assumed this would be a dry and technical conference, so its surprising how far social concerns pervaded the discussion sessions and the conference as a whole.

First spam attempt on Drag n’ Drop captcha

phpJuly 14th, 2008
post #119 

As its still in development, I’ve set the drag n’ drop captcha mechanism to report failures in full as well as forwarding legitimate responses.
I’ve had the first (update: two now) such failure notice from a live installation today - subject line: ‘yGAQJUnxHNOw’ and just a few web addresses I won’t repeat here.

Positive so far.




Twitterings »

A credits based, access control ‘economy’ for life or death intelligence!

post #118  July 10th, 2008

Add Comment »



Twitterings »

Learning all about anti-forensics and mobile evidence recovery

post #117  July 10th, 2008

Add Comment »