Daha önce Symfony 3 kurulumunun nasıl olduğunu görmüştük. Şimdide PHP framework ü olan Symfony ile Easy Admin Bundle kullanarak 1 dakikada komple bir admin paneli yapımını göreceğiz. Tabi bu zamana kurulumlar ve yapılandırma süresi dahil değil.
Yeni Proje oluşturma:
Önce konsol ekranında projemizi oluşturmak istediğimiz klasör yolunda website adında yeni symfony projesi oluşturalım.
php symfony new website
Proje için gerekli tanımlamaları yapıyoruz:
Yükleme bittikten sonra veri tabanı oluşturulmalıdır. Veri tabanı adı ve bağlantı bilgileri app/config/parameters.yml dosyasında tanımlanır.
# app/config/parameters.yml parameters: database_host: 127.0.0.1 database_port: null database_name: WebSiteDB database_user: root database_password: null mailer_transport: smtp mailer_host: 127.0.0.1 mailer_user: mail@mail.com mailer_password: null secret: b5a8507db9c6c54c232511fa062f84c2ef0d840f
Ve aşağıdaki kod ile veri tabanı oluşturulur.
php bin/console doctrine:database:create
easyadmin Bundle yükleme:
Bundle dosyalarını composer vasıtası ile konsol ekranında projemizi oluşturduğumuz dizinde aşağıdaki kod ile yüklüyoruz.
composer require javiereguiluz/easyadmin-bundle
Bundle aktifleştirme:
Bundle’ı app/AppKernel.php dosyasında
new JavierEguiluz\Bundle\EasyAdminBundle\EasyAdminBundle(),
kodu ile aktifleştiriyoruz.
App/AppKarnel.php dosyasına kodu şu şekilde ekliyorsunuz.
<?php // app/AppKernel.php // ... class AppKernel extends Kernel { public function registerBundles() { $bundles = array( // ... new JavierEguiluz\Bundle\EasyAdminBundle\EasyAdminBundle(), ); } // ... }
Route ayarlaması:
Bundle’ın yolunu ayarlayacak kodları app/config/routing.yml dosyasına ekliyoruz.
# app/config/routing.yml easy_admin_bundle: resource: "@EasyAdminBundle/Controller/" type: annotation prefix: /admin
Türkçe dil çevirisini ayarlıyoruz:
Kurulumdan sonra app/config/config.yml dosyasında local dil ayarını Türkçe yapıyoruz
# app/config/config.yml parameters: locale: tr
Aynı yerde app/config/config.yml dosyasında çevirilerin gerçekleşmesi için translator ’ı aktifleştiriyoruz.
# app/config/config.yml framework: #esi: ~ translator: { fallbacks: ["%locale%"] }
config.yml bir yaml dosyasıdır.
YAML formatı XML ve JSON formatları gibi veri tutmak için kullanılır. Daha çok yapılandırma bilgileri tutmak amaçlı kullanılır. XML ve JSON formatlarına göre daha okunaklıdır. Verileri düzenlerken girintilere göre yapar. Kısaca YAML tüm programlama dilleri için insan dostu (okunaklı) veri serileştirme standardıdır.
FOSUserBundle Kurulumu
Admin panelini kullanıcı girişli yapmak için işimize yarayacak olan bu FOSUserBundle’ı kurmanızı tavsiye ediyorum. Kurulum için bu yazımı okuyabilirsiniz. Özetle:
Paket kurulumunu konsole ekranında aşağıdaki kod ile gerçekleştiriyoruz.
composer require friendsofsymfony/user-bundle "~2.0"
App/AppKarnel.php dosyasına aşağıdaki eklemeyi yaparak paketi aktifleştiriyoruz.
<?php // app/AppKernel.php // ... class AppKernel extends Kernel { public function registerBundles() { $bundles = array( // ... new FOS\UserBundle\FOSUserBundle(), ); } // ... }
Bundle’ın yolunu ayarlayacak kodları app/config/routing.yml dosyasına ekliyoruz.
# app/config/routing.yml fos_user: resource: "@FOSUserBundle/Resources/config/routing/all.xml"
app/config/config.yml dosyasında fosuserbundle ın ayarlamalarını yapıyoruz
# app/config/config.yml fos_user: db_driver: orm # other valid values are 'mongodb' and 'couchdb' firewall_name: main user_class: AppBundle\Entity\User from_email: address: mail@mail.com sender_name: kullanını
app/config/security.yml da düzenlemeleri yapıyoruz.
# app/config/security.yml security: encoders: FOS\UserBundle\Model\UserInterface: bcrypt role_hierarchy: ROLE_ADMIN: ROLE_USER ROLE_SUPER_ADMIN: ROLE_ADMIN providers: fos_userbundle: id: fos_user.user_provider.username firewalls: main: pattern: ^/ form_login: provider: fos_userbundle csrf_token_generator: security.csrf.token_manager logout: true anonymous: true access_control: - { path: ^/login$, role: IS_AUTHENTICATED_ANONYMOUSLY } - { path: ^/register, role: IS_AUTHENTICATED_ANONYMOUSLY } - { path: ^/resetting, role: IS_AUTHENTICATED_ANONYMOUSLY } - { path: ^/admin/, role: ROLE_ADMIN }
FosUserBundle kurulduktan sonra sistemimizde kullanacağımız Entity leri oluşturmamız lazım.
Bunun için User, Makale ve Kategori adında 3 adet entity oluşturuyorum. Entity nasıl oluşturulur ve nelerden oluşur kısmını başka makalede yazarım.
src/AppBundle/Entity/User.php
<?php // src/AppBundle/Entity/User.php namespace AppBundle\Entity; 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 } }
src/AppBundle/Entity/Makale.php
<?php // src/AppBundle/Entity/Makale.php namespace AppBundle\Entity; use Doctrine\ORM\Mapping as ORM; /** * Makaleler * * @ORM\Table(name="makale") * @ORM\Entity */ class Makale { /** * @var string * * @ORM\Column(name="baslik", type="string", length=250, nullable=false) */ private $baslik = ''; /** * @var string * * @ORM\Column(name="icerik", type="text", length=65535, nullable=false) */ private $icerik; /** * @var integer * * @ORM\Column(name="id", type="integer") * @ORM\Id * @ORM\GeneratedValue(strategy="IDENTITY") */ private $id; /** * @ORM\ManyToOne(targetEntity="Kategori", inversedBy="makaleler") * @ORM\JoinColumn(name="kategori_id", referencedColumnName="id", nullable=false) */ private $kategori; public function __toString() { return $this->getBaslik(); } /** * Set baslik * * @param string $baslik * * @return Makale */ public function setBaslik($baslik) { $this->baslik = $baslik; return $this; } /** * Get baslik * * @return string */ public function getBaslik() { return $this->baslik; } /** * Set icerik * * @param string $icerik * * @return Makale */ public function setIcerik($icerik) { $this->icerik = $icerik; return $this; } /** * Get icerik * * @return string */ public function getIcerik() { return $this->icerik; } /** * Get id * * @return integer */ public function getId() { return $this->id; } /** * Set kategori * * @param \AppBundle\Entity\Kategori $kategori * * @return Makale */ public function setKategori(\AppBundle\Entity\Kategori $kategori) { $this->kategori = $kategori; return $this; } /** * Get kategori * * @return \AppBundle\Entity\Kategori */ public function getKategori() { return $this->kategori; } }
src/AppBundle/Entity/Kategori.php
<?php // src/AppBundle/Entity/Kategori.php namespace AppBundle\Entity; use Doctrine\ORM\Mapping as ORM; /** * Kategoriler * * @ORM\Table(name="kategoriler") * @ORM\Entity */ class Kategori { /** * @var integer * * @ORM\Column(name="id", type="integer") * @ORM\Id * @ORM\GeneratedValue(strategy="IDENTITY") */ private $id; /** * @var string * * @ORM\Column(name="baslik", type="string", length=200, nullable=false) */ private $baslik; /** * @ORM\OneToMany(targetEntity="Makale", mappedBy="kategori") */ private $makaleler; public function __toString() { return $this->getBaslik(); } /** * Constructor */ public function __construct() { $this->makaleler = new \Doctrine\Common\Collections\ArrayCollection(); } /** * Set baslik * * @param string $baslik * * @return Kategori */ public function setBaslik($baslik) { $this->baslik = $baslik; return $this; } /** * Get baslik * * @return string */ public function getBaslik() { return $this->baslik; } /** * Get id * * @return integer */ public function getId() { return $this->id; } /** * Add makaleler * * @param \AppBundle\Entity\Makale $makaleler * * @return Kategori */ public function addMakaleler(\AppBundle\Entity\Makale $makaleler) { $this->makaleler[] = $makaleler; return $this; } /** * Remove makaleler * * @param \AppBundle\Entity\Makale $makaleler */ public function removeMakaleler(\AppBundle\Entity\Makale $makaleler) { $this->makaleler->removeElement($makaleler); } /** * Get makaleler * * @return \Doctrine\Common\Collections\Collection */ public function getMakaleler() { return $this->makaleler; } }
Veri tabanı şemasını güncelleme:
Entity lerimizin karşılığı olan veri tabanındaki tabloları oluşturuyoruz.
php bin/console doctrine:schema:update --force
Kullanıcı oluşturma:
İlk kullanıcımızı (kadi: admin / parola: admin) terminali (Komut satırı) kullanarak oluşturuyoruz. Role özelliğinide role admin veriyoruz.
php bin/console fos:user:create admin admin@mesutd.com admin php bin/console fos:user:promote admin ROLE_ADMIN
Assets dosyalarını kopyalama:
Paketin assets dosyalarını kopyalayacak kodu çalıştırıyoruz. Bu sayede gerekli javascript, css ve görsel dosyaları projeye dahil edilir.
php bin/console assets:install --symlink
easy admin bundle ı özelleştirme:
Bundan sonrası config.yml da easy admin bundle ı düzenlemeye geliyor.
#app/config/config.yml easy_admin: site_name: 'Admin Paneli' entities: Kategori: class: AppBundle\Entity\Kategori list: title: "Kategori" fields: - { property: 'baslik', label: 'Kategori Başlığı' } - {property: 'makaleler'} form: title: "Kategori" fields: - { property: 'baslik', label: 'Kategori Başlığı' } Makale: class: AppBundle\Entity\Makale list: title: "Makale" fields: - { property: 'baslik', label: 'Başlık' } - { property: 'kategori', label: 'Kategori' } form: title: "Makale" fields: - { property: 'baslik', label: 'Başlık' } - { property: 'icerik', label: 'İçerik' } - { property: 'kategori', label: 'Kategori' } User: class: AppBundle\Entity\User label: "Kullanıcı" list: title: "Kullanıcı" fields: - { property: 'username',label: 'Kullanıcı adı' } - { property: 'email', type: 'email', label: 'E-mail adresi' } - { property: 'enabled', label: 'Aktif mi?', type: 'toggle'} form: title: "Kullanıcı" fields: - { property: 'username',label: 'Kullanıcı adı' } - { property: 'email', type: 'email', label: 'E-mail adresi' } - { property: 'plainPassword', type: 'password',label: 'Parola' } - { property: 'enabled', label: 'Aktif mi?'}
Evet kurulum tamamdır. Esay Admin Bundle’ın kendi sayfasından kurulum ve admin paneli özelleştirme için daha fazla açıklama bulabilirsiniz.
Projenizi localde çalıştırmak için komut satırına aşağıdaki kodu yazıp çalıştırıyoruz.
php bin/console server:run
Tarayıcıda adres satırına http://127.0.0.1:8000/admin yolu ile admin paneline giriş yapabilirsiniz.
Ya da http://localhost/symfony/website/web/admin yolu ile de admin paneline giriş yapabilirsiniz.
Bundan sonrası size kalmış.
gerçekten bunu 1 dk içinde yapabilen varmı :)))
Kurulum ve yapılandırma süreleri dahil değil. Onun dışında basit bir site için bu yöntemle kısa sürede admin paneli yapılır.
Hocam Sitenizden Çıkamıyorum Elinize Sağlık Ama Bu Bi dakka işine bende takılmadım değil....