İçeriğe atla

Symfony - 4. sayfa

Symfony 3 Giriş Seviyesi Notları

Bundle Oluştuktan sonra
enttiy oluştur

php bin/console doctrine:generate:entity

WebMuhasebeBundle:Fatura

Sonrasında ilişki kurulacak.

İlişkilerde

 /**
 * @ORM\OneToMany(targetEntity="Ilce", mappedBy="Il", cascade={"persist", "remove"})
 */
 private $Ilce;

id göndermek için kullanıyoruz. Kendi id sini karşıya entitye gönderiyor.


/**
 * @ORM\ManyToOne(targetEntity="Il", inversedBy="Ilce")
 * @ORM\JoinColumn(name="il_id", referencedColumnName="id")
 */
 public $il;

Buradaki karşıdan gelen id kayıt ediyor. (ilden gelen id yi kayıt ediyor)

1 ilin birden fazlası ilçesi olabilir ama bir ilçenin ilçesi olamaz.
İl burada one kısmı ilçe many olur.
işlemler bittikten sonra

php bin/console doctrine:generate:entities WebMuhasebeBundle
php bin/console doctrine:schema:update --force

sonrasında sayfalandırmak için kullanmak için aşagıdaki kodu yazıyoruz

 

composer require knplabs/knp-paginator-bundle

şeklinde kurunuz

github linki : https://github.com/KnpLabs/KnpPaginatorBundle

Config.yml içerisinde aşagıdaki kodu ekleyiniz:

knp_paginator:
 page_range: 5 # default page range used in pagination control
 default_options:
 page_name: page # page query parameter name
 sort_field_name: sort # sort field query parameter name
 sort_direction_name: direction # sort direction query parameter name
 distinct: true # ensure distinct results, useful when ORM queries are using GROUP BY statements
 template:
 pagination: KnpPaginatorBundle:Pagination:sliding.html.twig # sliding pagination controls template
 sortable: KnpPaginatorBundle:Pagination:sortable_link.html.twig # sort link template

sonrasında user için

composer require friendsofsymfony/user-bundle "~2.0@dev"

şeklinde kurulum yapınız.

Ekle:

<?php
// app/AppKernel.php

public function registerBundles()
{
$bundles = array(
// ...
new FOS\UserBundle\FOSUserBundle(),
// ...
);
}

Kendi bundlunuze seçip user.php oluşturup

use FOS\UserBundle\Model\User as BaseUser;
use Doctrine\ORM\Mapping as ORM;

/**
* @ORM\Entity
* @ORM\Table(name="fos_user")
*/
class User extends BaseUser
{
/**
* @ORM\Id
* @ORM\Column(type="integer")
* @ORM\GeneratedValue(strategy="AUTO")
*/
protected $id;

public function __construct()
{
parent::__construct();
// your own logic
}
}

içine ekleyin

devamını
http://symfony.com/doc/current/bundles/FOSUserBundle/index.html

adresinden bakabilirsiniz.

a) Doctrine ORM User class

bölümünde

// src/AppBundle/Entity/User.php

kısmında oluşturmuş oldugunuz bundle göre vermeniz gerekmektedir.

İşlemleri bitirdikten sonra crud işlemini yapınız.

Crud Dökümanı
http://symfony.com/doc/current/bundles/SensioGeneratorBundle/commands/generate_doctrine_crud.html

php app/console generate:doctrine:crud

Crud oluşturabilirsiniz.
Oluşturalacak bütün entityler için tek tek yazmanız gerekiyor.

yml yapıyoruz
isim girerkende Örnek WebMuhasebeBundle:fatura

Orm ve Doctrine

Orm ve Doctrine

 

İlişki Türleri:

One-to-one:

Her iki ilşkidede sadece tek bağlantı kurulabilinir.

 

One-to-many:

Bu ilişki türünden bir tane nesne birden fazla ilişki kurabilir.

Firma – fatura şeklinde olabilir. Bir firmanın birden fazla faturası olabilir ama fatura tek bir firmaya aittir.

İlçe – il

 

Many-to-one:

One-to-many tam tersidir.

İl – ilçe

 

Many-to-many:

Birbirleri ile birden fazla ilişki kuruyorlarsa many-to-many olur.

 

ORM NEDİR (Object Relational Mapping)

Orm ilişkisel veritabanlarının bir yazılım tarafından bir birleri ile ilişkilendirilmesine orm denir.

Crud işlemleri ile orm işlemlerini rahatlıkla yapabilirsiniz.

ORM AVANTAJLARI:

  • Geliştirme Hızı Yüksektir
  • Standart Kod Kullanımı ile spagetti koda çözüm
  • Veritabanı değişimini istediğiniz gibi yapabilirsiniz (Mysql,Postsql vb.)
  • İş yükünüzü hafifletir.
  • Güvenlik Açıklarını engeller
  • Bir çok araç kullanmasını sağlar.
  • Tabloları sınıfa çevirir veritabanı ile pek ugraşmazsınız.
  • Daha az sql sorgusu yazarsınız
  • Veritabanızı harita şeklinde sunar böylece veritabanını kolayca anlarsınız.

 

ORM DEZAVANTAJLARI

  • Performans bakıldığında biraz yavaştır. Küçük projelerde kesinlikle tavsiye edilmez.
  • Öğrenme süreci kimsen zordur
  • Modelleme ve Kulllanım hataları yanlış olabiliyor.

PHP İLE KULLANILAN ORM KÜTÜPHANESİ

  • Doctrine
  • Php activerecord
  • Eloquent ORM

Symfony kullanan kişiler doctrine kullanır. Eskiden php activerecord çok kullanırdı ama gün geçtikçe kullanımı azaldıgı kanısındayım.

Doctrine bir çok framewok ile entegre olduğu için tavsiye ediyorum. Smyfony ile doctrine kullanmayı başladım.  İsterseniz sitesinden comproser ile yüklüyebilirsiniz.

Doctrinede Entity kavramı vardır.

  • Annotation
  • XML
  • YAML
  • PHP Kodu

Entity sayesinde doctrine ve crud işlemleri yapabilirsiniz.

REPOSITORY

Veritabanından nesneleri sorgulamak için kullanılan sınıftır.

Eğer size entityRepository ve query builder yetmediği durumlarda Dql kullanabilirsiniz. Performans kayıplarındada DSQL tavsiye ederim. SQL kodlarını kullanabiliyorsunuz.

Symfony ile Twig e değişken gönderme

Symfony  ile çalışanlar template sistemi olarak genelde twig kullanırlar.

o sayfaya değişken göndermek için yapmanız gerken


/**
* @Route("/firma/ekle",name="firma_ekle")
*/
public function writeAction()
{
$isim = 'Nurettin';
return $this->render("@Muhasebe/Default/firma_ekle.html.twig",['isim'=>$isim]);

}

burada Muhasebe adlı bir bundle oluşturdum. onun altında firma_ekle.html.twig dosyam mevcuttu oraya değişken gönderdim. isim adlı

templatte çıkartmak için ise

{{ isim }}

yazmanız yeterli.

Symfony Kurulumu Hatası

Xampp Symfony kurarken hata verebilir.

Fix "cURL error 60: SSL certificate problem"

benzer hatanın vermesi curl kütüphanesinin yüklü olmadığından dolayıdır.

Aşagıdaki Dosyayı indirin:

https://curl.haxx.se/ca/cacert.pem

C:\XAMPP\php\

klasörün içine atınız.

Sonra php.ini dosyasına aşagıdaki kodu ekleyiniz:

[cURL]
curl.cainfo="C:\XAMPP\php\cacert.pem"

sonra apachi yi ve php yi resetleyiniz.