Artikel ini dirunut berdasarkan Jobeet Tutorial, yang dibuat oleh Fabien Potencier, untuk Symfony 1.4.
Form pendaftaran untuk affiliate
Setelah service API-nya kita buat maka selanjutnya adalah kita membuat form untuk pendaftaran affiliate. Ok langsung saja kita buta terlebih dahulu AffiliateController.php.src/Ibw/JobeetBundle/Controller/AffiliateController.php
namespace Ibw\JobeetBundle\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Ibw\JobeetBundle\Entity\Affiliate;
use Ibw\JobeetBundle\Form\AffiliateType;
use Symfony\Component\HttpFoundation\Request;
use Ibw\JobeetBundle\Entity\Category;
class AffiliateController extends Controller
{
// Your code goes here
}
===============================================
Dan sesuaikan link Affiliate yang ada di layout:
src/Ibw/JobeetBundle/Resources/views/layout.html.twig
<!-- ... -->
<li class="last"><a href="{{ path('ibw_affiliate_new') }}">Become an affiliate</a></li>
<!-- ... -->
===============================================
Sekarang tambahkan method untuk melakukan proses pendaftaran di AffiliateController.php
src/Ibw/JobeetBundle/Controller/AffiliateController.php
namespace Ibw\JobeetBundle\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Ibw\JobeetBundle\Entity\Affiliate;
use Ibw\JobeetBundle\Form\AffiliateType;
use Symfony\Component\HttpFoundation\Request;
use Ibw\JobeetBundle\Entity\Category;
class AffiliateController extends Controller
{
public function newAction()
{
$entity = new Affiliate();
$form = $this->createForm(new AffiliateType(), $entity);
return $this->render('IbwJobeetBundle:Affiliate:affiliate_new.html.twig', array(
'entity' => $entity,
'form' => $form->createView(),
));
}
}
==============================================
Selanjutnya kita daftarkan routenya ke configurasi bundle kita:
src/Ibw/JobeetBundle/Resources/config/routing/affiliate.yml
ibw_affiliate_new:
pattern: /new
defaults: { _controller: "IbwJobeetBundle:Affiliate:new" }
===============================================
Dan tambahkan juga routing di configuras app kita:
src/Ibw/JobeetBundle/Resources/config/routing.yml
# ...
IbwJobeetBundle_ibw_affiliate:
resource: "@IbwJobeetBundle/Resources/config/routing/affiliate.yml"
prefix: /affiliate
================================================
Berikutnya buat form viewnya, buatlah file AffiliateType.php dan tambahkan kode berikut:
src/Ibw/JobeetBundle/Form/AffiliateType.php
namespace Ibw\JobeetBundle\Form;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolverInterface;
use Ibw\JobeetBundle\Entity\Affiliate;
use Ibw\JobeetBundle\Entity\Category;
class AffiliateType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('url')
->add('email')
->add('categories', null, array('expanded'=>true))
;
}
public function setDefaultOptions(OptionsResolverInterface $resolver)
{
$resolver->setDefaults(array(
'data_class' => 'Ibw\JobeetBundle\Entity\Affiliate',
));
}
public function getName()
{
return 'affiliate';
}
}
==================================================
Tambahkan juga validasi formnya:
src/Ibw/JobeetBundle/Resources/config/validation.yml
# ...
Ibw\JobeetBundle\Entity\Affiliate:
constraints:
- Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity: email
properties:
url:
- Url: ~
email:
- NotBlank: ~
- Email: ~
=================================================
Dan akhirnya buat template formnya:
src/Ibw/JobeetBundle/Resources/views/Affiliate/affiliate_new.html.twig
{% extends 'IbwJobeetBundle::layout.html.twig' %}
{% set form_themes = _self %}
{% block form_errors %}
{% spaceless %}
{% if errors|length > 0 %}
<ul class="error_list">
{% for error in errors %}
<li>{{ error.messageTemplate|trans(error.messageParameters, 'validators') }}</li>
{% endfor %}
</ul>
{% endif %}
{% endspaceless %}
{% endblock form_errors %}
{% block stylesheets %}
{{ parent() }}
<link rel="stylesheet" href="{{ asset('bundles/ibwjobeet/css/job.css') }}" type="text/css" media="all" />
{% endblock %}
{% block content %}
<h1>Become an affiliate</h1>
<form action="{{ path('ibw_affiliate_create') }}" method="post" {{ form_enctype(form) }}>
<table id="job_form">
<tfoot>
<tr>
<td colspan="2">
<input type="submit" value="Submit" />
</td>
</tr>
</tfoot>
<tbody>
<tr>
<th>{{ form_label(form.url) }}</th>
<td>
{{ form_errors(form.url) }}
{{ form_widget(form.url) }}
</td>
</tr>
<tr>
<th>{{ form_label(form.email) }}</th>
<td>
{{ form_errors(form.email) }}
{{ form_widget(form.email) }}
</td>
</tr>
<tr>
<th>{{ form_label(form.categories) }}</th>
<td>
{{ form_errors(form.categories) }}
{{ form_widget(form.categories) }}
</td>
</tr>
</tbody>
</table>
{{ form_end(form) }}
{% endblock %}
=================================================
Ketika user mensubmit formnya maka kita akan menyimpan datanya sebagai affiliate, untuk itu kita tambahkan method createAction.php dan ketikan kode berikut:
src/Ibw/JobeetBundle/Controller/AffiliateController.php
class AffiliateController extends Controller
{
// ...
public function createAction(Request $request)
{
$affiliate = new Affiliate();
$form = $this->createForm(new AffiliateType(), $affiliate);
$form->bind($request);
$em = $this->getDoctrine()->getManager();
if ($form->isValid()) {
$formData = $request->get('affiliate');
$affiliate->setUrl($formData['url']);
$affiliate->setEmail($formData['email']);
$affiliate->setIsActive(false);
$em->persist($affiliate);
$em->flush();
return $this->redirect($this->generateUrl('ibw_affiliate_wait'));
}
return $this->render('IbwJobeetBundle:Affiliate:affiliate_new.html.twig', array(
'entity' => $affiliate,
'form' => $form->createView(),
));
}
}
================================================
Untuk membuat method createAction bekerja kita harus menambahkannya ke routing bundle kita:
src/Ibw/JobeetBundle/Resources/config/routing/affiliate.yml
# ...
ibw_affiliate_create:
pattern: /create
defaults: { _controller: "IbwJobeetBundle:Affiliate:create" }
requirements: { _method: post }
=================================================
Setelah data pendaftar affiliate tersimpan selanjutnya kita buatkan halaman untuk landing yang menampilkan tulisan terima kasih dan meminta kepada user untuk melakukan kofirmasi email.
src/Ibw/JobeetBundle/Controller/AffiliateController.php
class AffiliateController extends Controller
{
// ...
public function waitAction()
{
return $this->render('IbwJobeetBundle:Affiliate:wait.html.twig');
}
}
==================================================
Dan juga templatenya:
src/Ibw/JobeetBundle/Resources/views/Affiliate/wait.html.twig
{% extends "IbwJobeetBundle::layout.html.twig" %}
{% block content %}
<div class="content">
<h1>Your affiliate account has been created</h1>
<div style="padding: 20px">
Thank you!
You will receive an email with your affiliate token
as soon as your account will be activated.
</div>
</div>
{% endblock %}
==================================================
Berikut juga routingnya :
src/Ibw/JobeetBundle/Resources/config/routing/affiliate.yml
# ...
ibw_affiliate_wait:
pattern: /wait
defaults: { _controller: "IbwJobeetBundle:Affiliate:wait" }
No comments:
Post a Comment