Sadece 1 Dakikada PHP Symfony 3 ile Admin paneli yapımı

makale.baslik

easy admin panel

 

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.

 

easy admin panel kategori

 

easy admin panel login

 

easy admin panel makale

 

Bundan sonrası size kalmış.

Paylaş:

Yorumlar

  1. gerçekten bunu 1 dk içinde yapabilen varmı :)))

    1. 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.