İçeriğe atla

Symfony

Symfony: Textfielde yazılan veri varmı

Bu yazıda symfony de text field e veri yazarken o veri daha önce eklenmiş onu kontrol etmenizi sağlayan eklentiyi paylaşıyorum.

İşlem yapacagınız bölümler:

  • Routing
  • Conroller
  • Views

bu üç dosyada işlem yapacaksınız.

Öncelikle controller oluşturmanız gerekiyor. ismi AjaxController.php olsun içeriği

<?php namespace Web\AdminBundle\Controller; use Symfony\Component\HttpFoundation\Response; use Symfony\Bundle\FrameworkBundle\Controller\Controller; use Symfony\Component\HttpFoundation\Request; /** * Ajax controller. * */ class AjaxController extends Controller { public function otel_kontrolAction(Request $request) { $em = $this->getDoctrine()->getManager();
        $otel_ad = $request->get('kayitli');
        $otel = $em->getRepository("WebAdminBundle:Otel")->findOneBy(array('ad'=>$otel_ad));
        $sonuc = array();
        if($otel)
        {
            $otel_url = $this->generateUrl('otel_show',array('id'=>$otel->getId()));
            $sonuc['durum'] = 0;
            $sonuc['html'] = 'Kayitli Otel gitmek için <a href="'.$otel_url.'">tıklayınız</a>';
        }
        else
        {
            $sonuc['durum'] = 1;
            $sonuc['html'] = '';
        }
        return new Response(json_encode($sonuc));

    }

}


Sonrasında routing dosyası oluşturalım ismi ajax.yml olsun.

ajax_otelkontrol:
    path:     /otelkontrol
    defaults: { _controller: "WebAdminBundle:Ajax:otel_kontrol" }

Routing.yml dosyasına girelim. aşagıdaki kodu ekliyelim.

web_admin_ajax:
    resource: "@WebAdminBundle/Resources/config/routing/ajax.yml"
    prefix:   /ajax

Sonrasında ilgili tiwg dosyasına gidiyoruz.

{{ form_start(form) }}

hemen altına

{{ form_row(form.ad) }}
                            <div id="sonuc"></div>

burada form.ad kendinize göre yani aratacagınzı veriye göre düzenlemeniz gerekiyor.

endblock altına girip.

{% block script %}
     <script>
        $(document).ready(function () {
            $('#web_adminbundle_otel_faturaNumarasi').keyup(function () {
                fatura_kontrol($(this).val());
            });
            $('#web_adminbundle_otel_ad').focusout(function () {
                fatura_kontrol($(this).val());
            });
            $('#web_adminbundle_otel_ad').change(function () {
                fatura_kontrol($(this).val());
            });
        });
        function fatura_kontrol(deger) {
            veriler = 'kayitli='+deger;
            $.post('{{ path('ajax_otelkontrol') }}',veriler,function (sonuc) {
                $('#sonuc').html(sonuc.html);

            },'json');
        }
    </script>
{% endblock %}

kodunu ekliyorsunuz web_adminbundle_otel_ad kısmını oradaki verinize göre çekiyorsunuz.

İlgili Dosyaları indir:
http://www.tasarimrehberi.net/download/217/

Birden Fazla Tabloda __tostring kullanımı

Farklı Baglantılarda değişken getirmek.

Birden fazla tablonuz olduğunuzu varsayalım

cari
fatura
fatura_vade

fatura_vade de fatura vade eklemye kalktıgınızda to string hatası verecektir.
Bu durumda eğer cari adını ve fatura tarihini görmek isterseniz.

Fatura bölümüne aşagıdaki kodu yazmanız yeterlidir.

    public function __toString()
    {
        return $this-&gt;getCari()-&gt;__toString().' '.date("d-m-Y",$this-&gt;getTarih());
    }

http://www.tasarimrehberi.net/download/207/

Symfony Tarih ve saat ekleme

Symfony Tarih ve saat ekleme

Öncelikle base.html.twig dosyasına aşagıdaki kodu ekleyin

    <script>
        $(document).ready(function () {
            $('.form_timepicker').datetimepicker({
                format:"hh:ii",
                startView: 1
            });

            $(".form_datetime2").datepicker({
                dateFormat:"dd.mm.yy",
                monthNames: [ "Ocak", "Şubat", "Mart", "Nisan", "Mayıs", "Haziran", "Temmuz", "Ağustos", "Eylül", "Ekim", "Kasım", "Aralık" ],
                monthNamesShort:["Oca","Şub","Mar","Nis","May","Haz","Tem","Ağu","Eyl","Eki","Kas","Ara"],
                dayNamesMin: [ "Pa", "Pt", "Sl", "Ça", "Pe", "Cu", "Ct" ],
                changeMonth: true,
                changeYear: true
            });
        });
    </script>

ilgili bölümün type kısmına girin.
tarih kısmı için
form_datetime2

saat kısmı için
form_timepicker
kullanıın

        $builder->add('tarih', TextType::class   , array('label'=>'Tarih','attr'=>array('class'=>'form-control form_datetime2'))
)->add('saat', null, array('label'=>'Saat','attr'=>array('class'=>'form-control form_timepicker'))

Kontroller dosyasına girip hangi bölüme eklemek istiyorsanız o bölüme aşagıdakini yazın. Örnegin new yapacaksanız.
Değişken tanımlama bölümüne aşagıdakileri yazın.

        $tarih = date("d.m.Y");
        $saat = date("H:i");

eğer tablonuzu integer yaptıysanız

 if ($form->isSubmitted() && $form->isValid()) {

altına ekleyiniz.
$Fatura->setTarih(strtotime($form['tarih']->getData())) ;

sonrasında twig dosyasına göndermek için aşagıdaki gibi sistemi uygulayın.

        return $this->render('WebAdminBundle:fatura:new.html.twig', array(
            'Fatura' => $Fatura,
            'form'           => $form->createView(),
            'hata'           => $hata,
            'hatakodu'       => $hatakodu,
            'tarih'       => $tarih,
            'saat'       => $saat,
        ));
    }

new.html.twig dosyasına gelip

aşagakidaki gibi düzenleyin.

                            {{ form_start(form) }}
                            {{ form_row(form.tarih,{'value': tarih }) }}
                            {{ form_row(form.saat,{'value': saat }) }}
                            {{ form_widget(form) }}

buradaki form_start ve form_widget arasına yazmalısınız.

Ekranda göstermek istediğinizde kontrolerin show bölümünde

    public function showAction(Fatura $Fatura)
    {
        $deleteForm = $this->createDeleteForm($Fatura);
        $tarih = $Fatura->getTarih();
        $tarih = date("d.m.Y",$tarih);
        return $this->render('WebAdminBundle:fatura:show.html.twig', array(
            'Fatura' => $Fatura,
            'tarih' => $tarih,
            'delete_form' => $deleteForm->createView(),
        ));
    }

şeklinde düzenleyin.

show.html.twig dosyasını açın.

{{ Fatura.tarih }}

olan ismi

{{ tarih }}

şeklinde değiştirin.

Düzenleme bölümünü yapmak için.
edit action bölümünü açın.

        $tarih = $Fatura->getTarih();
        $tarih = date("d.m.Y",$tarih);

        return $this->render('WebAdminBundle:fatura:edit.html.twig', array(
            'Fatura' => $Fatura,
            'tarih' => $tarih,
            'edit_form'      => $editForm->createView(),
            'delete_form'    => $deleteForm->createView(),
            'hata'           => $hata,
            'hatakodu'       => $hatakodu,
        ));

şeklinde ekleyin.

edit.twig.html acın


                            {{ form_start(edit_form) }}
                            {{ form_row(edit_form.tarih,{'value': tarih }) }}
                            {{ form_widget(edit_form) }}

şeklinde düzenleyin.

kontroller kısmında edit actionda aşagıdaki kodu bulun

if ($editForm->isSubmitted() && $editForm->isValid()) {

altına ekle

 $Fatura->setTarih(strtotime($editForm['tarih']->getData())) ;

İndirme Linki:

http://www.tasarimrehberi.net/download/201/

Symfony twig çoklu değişken gönderme

Bazı yerlerde çoklu değişkenler göndermeniz gerekebilir. Bu durumda ilgili kontrollere alttaki kodu yazınız:

     $bugun_baslangic = strtotime(date("d-m-Y 00:00:01"));
        $bugun_bitis = strtotime(date("d-m-Y 23:59:59"));
        $yongiden = 2;
        $yongelen = 1;
        $yedi_gun_rapor = array();
for ($i=1; $i <8 ; $i++) {
            $gun_baslama =  strtotime(date('d-m-Y 00:00:01', strtotime("-$i days")));
            $gun_bitis =  strtotime(date('d-m-Y 23:59:59', strtotime("-$i days")));
            $gun = date('d-m-Y', strtotime("-$i days"));

            $yongelen = $em->getRepository('WebAdminBundle:AramaYonu')->find($yongelen);
            $arama_sayisi_gelen  = $em
                ->createQueryBuilder()
                ->select('d')
                ->from('WebAdminBundle:AramaKayit', 'd')
                ->Where('d.kayit_tarihi <= :bitis')
                ->andWhere('d.kayit_tarihi >= :baslama')
                ->andWhere('d.AramaYonu = :yongelen')
                ->setParameter('baslama', $gun_baslama)
                ->setParameter('bitis', $gun_bitis)
                ->setParameter('yongelen', $yongelen)
                ->getQuery()
                ->getResult();

            $yongiden = $em->getRepository('WebAdminBundle:AramaYonu')->find($yongiden);
            $arama_sayisi_giden  = $em
                ->createQueryBuilder()
                ->select('d')
                ->from('WebAdminBundle:AramaKayit', 'd')
                ->Where('d.kayit_tarihi <= :bitis')
                ->andWhere('d.kayit_tarihi >= :baslama')
                ->andWhere('d.AramaYonu = :yongelen')
                ->setParameter('baslama', $gun_baslama)
                ->setParameter('bitis', $gun_bitis)
                ->setParameter('yongelen', $yongiden)
                ->getQuery()
                ->getResult();

            //array_push($yedi_gun_gelen, $arama_sayisi_gelen);
            $yedi_gun_rapor[$gun]['gelen'] = count($arama_sayisi_gelen);
            $yedi_gun_rapor[$gun]['giden'] = count($arama_sayisi_giden);

        }
      return $this->render('WebAdminBundle:Default:index.html.twig',array(
            'yedi_gun_rapor'=>$yedi_gun_rapor,
        ));

Twig dosyasında ise

   {% for key,user in yedi_gun_rapor %}
                ['{{ key}}',  {{ user.giden}},      {{ user.gelen}}],
                {% endfor %}

yazmanız yeterlidir.

Symfony twig e değişken gönderme

İlgili kontrollere gidip gerekli kodlarınızı yazın.
Örnegin:

 $em      = $this->getDoctrine()->getManager();
        $bugun_baslangic = strtotime(date("d-m-Y 00:00:01"));
        $bugun_bitis = strtotime(date("d-m-Y 23:59:59"));
        $yongiden = 2;
        $yongelen = 1;

        $bugun_toplam_arama  = $em
            ->createQueryBuilder()
            ->select('d')
            ->from('WebAdminBundle:AramaKayit', 'd')
            ->Where('d.kayit_tarihi <= :bitis')
            ->andWhere('d.kayit_tarihi >= :baslama')
            ->setParameter('baslama', $bugun_baslangic)
            ->setParameter('bitis', $bugun_bitis)
            ->getQuery()
            ->getResult();

 return $this->render('WebAdminBundle:Default:index.html.twig',array(
            'bugun_toplam_arama'=>count($bugun_toplam_arama),
        ));

Kontrollere eklediğimiz kodlar yukardadır.

İlgili template dosyasına yazmamız gereken kod:

{{ bugun_toplam_arama }} 

Symfony Twige ile çalışmadan önce yapılması gereken

Smyfony projeniz var ve twig ile çalışacaksanız öncelikle aşagıdaki kodları eklemeniz gerekmektedir.

 
app->config->config.xml
ekle

# Twig Configuration
twig:
    debug:            "%kernel.debug%"
    strict_variables: "%kernel.debug%"
    globals:
          site_url: %site_url%
          site_url_t: %site_url_t%
          site_title: %site_title%

app->config->oaraneters.yml
ekle

    site_url: http://localhost/bulutrehber/
    site_url_t: http://localhost/bulutrehber/
    site_dizini: C:\xampp\htdocs\bulutrehber
    site_title: Bulut Rehber


    upload_g_dir:   %site_dizini%/web/assets/uploads/
    upload_g_url:   %site_url%/web/assets/uploads/

    upload_k_dir: %site_dizini%/web/images/konu/
    upload_k_url: %site_url%/web/images/konu/

    upload_r_dir: %site_dizini%/web/images/
    upload_r_url: %site_url%/web/images/

Catchable Fatal Error: could not be converted to string hatası

Symfony kullanırken ilişkili tablolar kurdugunuzda aşagıdaki benzer bir hatayı bulabilirsiniz bu durumlarda ilişki kurduğunuz diğer tablonun entity sinde düzenleme yapmanız gerekiyor.

Örnek Kod Hatası:

Catchable Fatal Error: Object of class Web\AdminBundle\Entity\Otel could not be converted to string
500 Internal Server Error - ContextErrorException

Çözümü:

 

public function __toString()
    {
        return $this->getAd();
    }

burada o tablonun ad alanını stringe ceviyoruz.
Lütfen unutmayınız ilişki kurduğumuz tablodaki enttiye yazacagız. ve bu çözüm symfony kullananlar için geçerlidir.

Veritabanından gelen veriye göre işlem yapma

Veritabanınızda müşterinizin yasaklı olup olmadıgını kaydetmeniz için basit bir kod blogu
yasak telefon ve yasak mail diye alanlar oluşuturun. Sonrasında aşagıdakileri yapmanız yeterli.


'yasak_telefon' =>'Yasak Değil',
'yasak_mail' =>'Yasak Değil',
if(@$user->getYasakTelefon())
{
$yenikullanici['yasak_telefon'] = 'Yasak';
}
if(@$user->getYasakMail())
{
$yenikullanici['yasak_mail'] = 'Yasak';
}

Bu işlemi kontrollerde yapmanız gerekmektedir.

Symfony il , ilçe ve semt seçimi yaptırma

form type da
->add('Il', null, array('label'=>'Il','attr'=>array('class'=>'form-control')))

->add(‘Il’, null, array(‘label’=>’Il’,’attr’=>array(‘class’=>’form-control select2me’)))

new twige ekle

 



{% block script %}

{% endblock %}

Kontroller a ekle
$em = $this->getDoctrine()->getManager(); kodunun altına ekle

if($request->get(‘ilce’))
{
$ilce = $em->getRepository(‘WebAdminBundle:Ilce’)->find($request->get(‘ilce’));
$otel->setIlce($ilce);
}
if($request->get(‘semt’))
{
$semt = $em->getRepository(‘WebAdminBundle:Semt’)->find($request->get(‘semt’));
$otel->setSemt($semt);
}
if($request->get(‘mahalle’)) {
$mahalle = $em->getRepository(‘WebAdminBundle:Mahalle’)->find($request->get(‘mahalle’));
$otel->setMahalle($mahalle);
}

base.html.twig ekle

getir

new.html.twig form bitişinin başına ekle



edit.twig.html ekle

form_widget altına ekle



Sayfanın en altına
{% block script %}

{% endblock %}

İndir:
http://www.tasarimrehberi.net/download/150/