Symfony är ett php ramverk. I skrivande stund har symfony2 precis kommit ut med en betaversion. Ramverket är franskt och jag har jobbat med detta ramverk sedan 2009.
Jag sitter just nu på Bali och sköter mitt jobb här ifrån. Dock lider jag av en opålitlig internetuppkoppling. Det har mest varit irriterande med inte några större problem att göra det man ska… för än nu. Jag försökte ladda ner den senaste versionen av Symfony2 från deras hemsida. Efter ca en minut så sa nedladdningen att det var klart. Det borde ta ca 10 minuter så jag anade misstankar. Mycket riktigt så var hela filen inte nedladdad trots Firefox meddelade detta.
Jag testade att ladda ner filen i Chrome men samma sak hände. Jag var tvungen att öppna terminalen och wgetta ner filen. Jag såg hur anslutningen avbröts gång på gång men wget fortsatte nedladdningen där den avbrutits så min fil var snart nere. När kommer Chrome och Firefox med denna feature?
Äntligen har Symfony2 fått ett datum för när en stabil version ska släppas. Det datumet sattes i samband med att den sista RC5 kom ut igår. Den 28 Juli har man sagt. Riktigt roligt och spännande. Man har också sagt att vissa komponenter kommer ha ett API som inte ändras från och med Symfony2.0 medan andra kanske kommer ändras till och med version 2.1.
Kort efter man har släppt RC5 så blev man tvungen att släppa RC6 på grund av en prestandabugg. Det är andra gången två release candidates släpps inpå varandra på grund av buggar. Har man inte tillräckligt med testkod? Går det för fort att utveckla så att man lätt missar saker? Oavsett hur det är så rättas felen till ganska snabbt.
Jag har för tillfället 4 st Symfony2 projekt igång. Två av dessa ska vara klart inom en dryg vecka och de två andra inom en dryg månad är det tänkt. Jag ska blogga mer om de då.
Symfony utvecklas mer en rasande takt. Under förra veckan han de släppa två RC. Jag började testa Symfony RC3 igår. Det är inte mycket som skiljer från beta versionerna men med är ett par saker som bland annat Entities och formulär. Jag tror att vi kommer att få se en stabil version av ramverket innan augusti är slut.
Yes, there is currently no documentation on how to upload a file in Symfony2. Yes, it took me hours to figure out how to do it. Yes, of course I will share!
I don’t think this is the correct Symfony way to do it, but it works and I believe it is secure. I would like to access the $uploadedFile object from the $form object instead of the $request. If you know how to do it, please write a comment.
The code is pretty straight forward and documented so I figure I just post it.
My controller:
public function indexAction()
{
//create a simple form with one filed called "dataFile" of type "file"
$form = $this->get('form.factory')
->createBuilder('form')
->add("dataFile","file", array("required"=>true))
->getForm();
$request = $this->get('request');
if ($request->getMethod() == 'POST') {
//bind the request, (note the enctype in the template)
$form->bindRequest($request);
if ($form->isValid()) {
//if the form is valid, try to get the uploaded file object
//Symfony\Component\HttpFoundation\File\UploadedFile
$files=$request->files->get($form->getName());
$uploadedFile=$files["dataFile"]["file"]; //"dataFile" is the name on the field
//once you have the uploadedFile object there is some sweet functions you can run
$uploadedFile->getPath();//returns current (temporary) path
$uploadedFile->getOriginalName();
$uploadedFile->getMimeType();
//and most important is move(),
$uploadedFile->move(
$_SERVER['DOCUMENT_ROOT']."/uploads",
$uploadedFile->getOriginalName()
);
$this->get('session')->setFlash('notice', 'The file is uploaded!');
}
else{
//form is not valid
}
}//end if request method == POST
return $this->render('ApplicationMyBundle:Default:index.html.twig',
array("form"=>$form->createView()));
}
My template:
{# note the form_enctype, without it the form will not bind in the controller #}
<form action="" method="post" {{ form_enctype(form) }}>
{{ form_widget(form) }}
<input type="submit" class="submit" id="form_submit" value="Save" />
</form>
När man utvecklar i PHP så vet man att det lätt kan bli lite kladdigt. Man importerar saker hit och dit och snart har man ingen koll på vad som gör vad eller vilken fil som används när. Många skickliga utvecklare har ett eget litet system när man utvecklar en ny applikation. Man har vissa mappar och vissa regler. Men när en annan eller en tredje utvecklare kommer in i projektet så blir det bara kaos.
Ett par franska utvecklare har skrivit PHP ramverket Symfony. Det är tokigt objektorienterat och det gör många av programmerarens simpla autonoma uppgifter automatiskt. Till exempel skapa databasklasser, skriva formulär, verifiera formulär och mycket mer.
Nu är det snart dags för Symfony2 att lanseras. Det är många prestanda fördelar jämfört med version 1.4. Jag längtar att få testa det. Jag har ett par projekt som jag ska testa Symfony2 med i sommar.