PHP İLE API OLUŞTURMA

PHP İLE API OLUŞTURMA.
Bu örneğimizde kendi oluşturacağımız api ile veri tabanı ile iletişim kurarak ekleme, düzenleme, listeleme ve silme işlemlerini gerçekleştireceğiz.

Merhaba arkadaşlar,

Bu örneğimizde kendi oluşturacağımız api ile veri tabanı ile iletişim kurarak ekleme, düzenleme, listeleme ve silme işlemlerini gerçekleştireceğiz.

Yapacağımız Örneği Test Etmek İçin Tıklayınız

İlk olarak “ArticleAPI” adında bir veri tabanı oluşturalım. Ardından bu veritabanımıza “article” adında bir tablo oluşturalım. Bu tabloda

  • id : Yazının Uniq numarası
  • title: Yazının başlığı
  • slag: Yazının SEO uyumlu başlıkları
  • text: Yazının metin kısmı

Veritabanımızı oluşturduk. Artık kod kısmımıza geçebiliriz. İlk olarak “apiOrnegi” adında bir klasör oluşturalım. Bu klasör de 4 temel dosyamız bulunacaktır. Bunlar

  • .htaccess
  • class.Article.php
  • database.php
  • index.php

Veritabanı Bağlantısı (database.php)

İlk olarak veritabanı bağlantımızı yapalım. Bunun için database dosyamızı açalım ve Database adında bir class oluşturalım.

<?php 
Class Database
{
 //Kodlar buraya...
}
?>

Veritabanı bağlantımız da kullanacağımız kullanıcı adı, şifre, veritabanı adres ve veritabanı adı parametreleri için birer değişken oluşturalım.

<?php 
Class Database
{
    private $user ;
    private $host;
    private $pass ;
    private $db;
}
?>

Bu değişkenlerimiz sabit bir değeri tutacakları için construct içerisinde bu değişkenlere sabit değerler atayalım.

<?php 
Class Database
{
    private $user ;
    private $host;
    private $pass ;
    private $db;

    public function __construct()
    {
        $this->user = "root";
        $this->host = "localhost";
        $this->pass = "";
        $this->db = "ArticleAPI";
    }
}
?>

Sabit değerleri atadığımıza göre artık bağlantı cümlemizi oluşturabiliriz. Bağlantı cümlesi için connect isimli bir metot oluşturalım. Ardından içerisine bağlantı cümlemizi ekleyelim. Oluşturduğumuz bağlantı değişkenini geri döndürelim. return $conn;

Database.php Tüm Kodlar

<?php 
Class Database
{
    private $user ;
    private $host;
    private $pass ;
    private $db;

    public function __construct()
    {
        $this->user = "root";
        $this->host = "localhost";
        $this->pass = "";
        $this->db = "ArticleAPI";
    }
    public function connect()
    {

        $conn = new PDO("mysql:host=".$this->host.";dbname=".$this->db.";", $this->user, $this->pass);
        return $conn;
    }
}
?>

Bağlantı cümlesi de eklendiğine göre veritabanı bağlantımız tamamlanmıştır.


Veritabanı İşlemleri (class.Article.php)

Veritabanı işlemlerimizi gerçekleştireceğimiz “Article” isminde bir sınıf oluşturalım. Bu sınıfımız içerisinde

  •  __construct(): Veritabanı nesnemizi tutacağımız yapıcı metot.
  • getAll() : Tüm listeyi getirecek olan metot.
  • getId($id = ”): Id ye göre veri getirecek olan metot.
  • getSlag($slag = ”): SEO url tipinde veri getirecek metot.
  • setArticle($title = ”, $text = ”): Yazı ekleme işleminde kullanacağımız metot.
  • editArticle($id = ”, $title = ”, $text = ”): Yazı düzenleme işleminde kullanacağımız metot.
  • deleteArticle($id = ”): Yazı silmek için kullanacağımız metot.
  • permalink($str, $options = array()): Başlıklarımızı SEO uyumlu hale getirecek metot.

Metotları belirlediğimize göre ilk sınıfımızı oluşturmaya başlayalım. İlk olarak sınıfımızın bulunduğu dosyaya veritabanı dosyamız olan “database.php” dahil edelim. Ardından kurucu metot da bu sınıfımızdan bir adet nesne oluşturalım.

<?php
require_once 'database.php';
class Article
{
	private $conn;
	public function __construct() {
		$conn= new Database();
		$this->conn = $conn->connect();
	}
}

Artık veritabanı sınıfımızdan türeyen “$conn” adında bir nesnemiz var. Bu nesnemizi kullanarak veritabanı işlemlerimizi yapabiliriz.

Tümünü Listeleme Metodu

Veri tabanına sorgu göndererek bütün yazıları aldığımız metot. Veri tabanından gelen verileri JSON tipinde geri gönderiyoruz.

function getAll()
	{
		
		$statement = $this->conn->prepare("SELECT * FROM article");
		$statement->execute();
		$results = $statement->fetchAll(PDO::FETCH_ASSOC);
		$json = json_encode($results);
		return $json;
	}

Tek Yazı Gösterme Metodu (ID)

Kullanıcıdan bir id değeri alıyoruz. Bu id değeri sayısal bir değer değilse veya sistemde kayıtlı değilse Not Found hatasını geri döndürüyoruz.

ID değeri sayısal bir değerse ve bu değere eşit bir verinin olup olmadığını kontrol ediyoruz. Eğer böyle bir veri varsa veriyi JSON tipinde geri döndürüyoruz.

function getId($id = '')
	{
		$results = [
			"error"	=> "Not Found"
		];
		if (is_numeric($id)) {
			
			
			$statement = $this->conn->prepare("SELECT * FROM article WHERE id=:id");
			$statement->execute(array(
				"id"		=> $id
			));
			$count = $statement->rowCount();
			if ($count > 0)
				$results = $statement->fetchAll(PDO::FETCH_ASSOC);
		}


		$json = json_encode($results);
		return $json;
	}

Tek Yazı Gösterme Metodu (SLAG – SEO Tip)

Kullanıcıdan bir slag (SEO tipi) değeri alıyoruz. Bu değerin karakter sayısı 1 den küçükse veya sistemde kayıtlı değilse Not Found hatasını geri döndürüyoruz.

Bu değere eşit bir verinin olup olmadığını kontrol ediyoruz. Eğer böyle bir veri varsa veriyi JSON tipinde geri döndürüyoruz.

function getSlag($slag = '')
	{
		$results = [
			"error"	=> "Not Found"
		];
		if (strlen($slag) > 0) {
			
			
			$statement = $this->conn->prepare("SELECT * FROM article WHERE slag=:slag");
			$statement->execute(array(
				"slag"		=> $slag
			));
			$count = $statement->rowCount();
			if ($count > 0)
				$results = $statement->fetchAll(PDO::FETCH_ASSOC);
		}
		$json = json_encode($results);
		return $json;
	}

Yazı Ekleme Metodu

Veri tabanına kayıt işlemini bu metot yardımı ile gerçekleştiriyoruz. Kullanıcıdan başlık ve metin değerlerini alıyoruz.

Başlık veya metin değerlerimizden herhangi birisi boşa eğer Missing Parameter şeklinde bir hata mesajı veriyoruz.

Başlık değerimizi permalink metoduna gönderiyoruz ve bize geri gelen slag değerini değişkene aktarıyoruz. Ardından veri tabanına kayıt ediyoruz.

Kayıt sırasında bir hata oluşursa Something went wrong. şeklinde bir uyarı mesajı döndürüyoruz.

Kayıt başarıyla tamamlanması durumunda Article Added şeklinde bir uyarı mesajı döndürüyoruz.

function setArticle($title = '', $text = '')
	{
		$results = [
			"error"	=> "Missing Parameter"
		];

		if (strlen($title) > 0 && strlen($text) > 0) {
			$title = htmlspecialchars($title);
			$text  = htmlspecialchars($text);
			$slag = $this->permalink($title);

			
			

			$sql = "INSERT INTO article (title, slag, text) VALUES (:title,:slag, :text)";
			$query = $this->conn->prepare($sql);
			$status = $query->execute(array(
				"title"	=> $title,
				"slag"	=> $slag,
				"text"	=> $text
			));
			if ($status == true)
				$results = [
					"success"	=> "Article Added"
				];
			else
				$status = [
					"error"	=> "Something went wrong."
				];
		}
		$json = json_encode($results);
		return $json;
	}

Yazı Düzenleme Metodu

Bu metot için kullanıcıdan 3 adet değer alıyoruz. Bu değerlerden herhangi birisi boş olarak gelmesi durumunda Missing Parameter şeklinde uyarı mesajında bulunuyoruz.

Bu değerlerden en önemlisi id değeridir. Id değeri ile sistemde değiştirilmek istenen yazının olup olmadığını kontrol ediyoruz.

Değiştirilmek istenen yazı bulunamazsa eğer kullanıcıya Not Found şeklinde uyarı mesajında bulunuyoruz.

Değiştirilmek istenen değer bulunursa eğer veritabanımızı yeni değerler ile güncelliyoruz ve kullanıcıya Article Edit şeklinde uyarı mesajında bulunuyoruz.

function editArticle($id = '', $title = '', $text = '')
	{
                $title = htmlspecialchars($title);
		$text  = htmlspecialchars($text) ;
		$results = [
			"error"	=> "Missing Parameter"
		];

		$editStatus = false;
		if (is_numeric($id)) {
			$statement = $this->conn->prepare("SELECT * FROM article WHERE id=:id");
			$statement->execute(array(
				"id"		=> $id
			));
			$count = $statement->rowCount();
			$editStatus = ($count > 0) ? true : false;
		}
		if ($editStatus == false) {
			$results = [
				"error"	=> "Not Found"
			];
		}
		if (strlen($title) > 0 && strlen($text) > 0 && $editStatus == true) {
			$title = htmlspecialchars($title);
			$text  = htmlspecialchars($text);
			$slag = $this->permalink($title);
			$sql = "UPDATE article  SET title=:title,slag=:slag, text=:text WHERE id =:id";
			$query = $this->conn->prepare($sql);
			$status = $query->execute(array(
				"title"	=> $title,
				"slag"	=> $slag,
				"text"	=> $text,
				"id"	=> $id
			));
			if ($status == true)
				$results = [
					"success"	=> "Article Edit"
				];
			else
				$results = [
					"error"	=> "Something went wrong."
				];
		}
		$json = json_encode($results);
		return $json;
	}

Değiştirilmek istenen değer bulunursa eğer veritabanımızı yeni değerler ile güncelliyoruz ve kullanıcıya Article Edit şeklinde uyarı mesajında bulunuyoruz.

Yazı Silme Metodu

Bu metodumuz da kullanıcan id değerini alıyoruz. Id değeri boş gelmesi durumunda kullanıcıya Missing Parameter şeklinde bir uyarı döndürüyoruz.

Id değerinin olması durumunda ilk olarak veri tabanında girilen id değerine uygun bir verinin olup olmadığını kontrol ediyoruz.

İstenilen kayıt yoksa kullanıcıya Not Found şeklinde uyarı mesajında bulunuyoruz.

İstenilen kayıt varsa kaydı siliyoruz ve kullanıcıya Article Deleted şeklinde uyarı mesajında bulunuyoruz.

function deleteArticle($id = '')
	{

		$results = [
			"error"	=> "Missing Parameter"
		];
		$deleteStatus = false;
		if (is_numeric($id)) {
			$statement = $this->conn->prepare("SELECT * FROM article WHERE id=:id");
			$statement->execute(array(
				"id"		=> $id
			));
			$count = $statement->rowCount();
			$deleteStatus = ($count > 0) ? true : false;
		}
		if ($deleteStatus == false) {
			$results = [
				"error"	=> "Not Found"
			];
		}
		if ($deleteStatus == true) {
			
			
			$sql = "DELETE FROM article WHERE id=:id";
			$delete = $this->conn->prepare($sql);
			$status = $delete->execute(array(
				"id"	=> $id
			));
			if ($status == true)
				$results = [
					"success"	=> "Article Deleted"
				];
			else
				$results = [
					"error"	=> "Something went wrong."
				];
		}

		$json = json_encode($results);
		return $json;
	}

İstenilen kayıt varsa kaydı siliyoruz ve kullanıcıya Article Deleted şeklinde uyarı mesajında bulunuyoruz.

Permalink Metodu

Bu fonksiyon ile kullanıcı dostu url’ler oluşturmak için türkçe metinlerinizi derleyebilirsiniz. 

Bu metot alıntıdır. => Php Sef Link Fonksiyonu

function permalink($str, $options = array())
	{
		$str = mb_convert_encoding((string)$str, 'UTF-8', mb_list_encodings());
		$defaults = array(
			'delimiter' => '-',
			'limit' => null,
			'lowercase' => true,
			'replacements' => array(),
			'transliterate' => true
		);
		$options = array_merge($defaults, $options);
		$char_map = array(
			// Latin
			'À' => 'A', 'Á' => 'A', 'Â' => 'A', 'Ã' => 'A', 'Ä' => 'A', 'Å' => 'A', 'Æ' => 'AE', 'Ç' => 'C',
			'È' => 'E', 'É' => 'E', 'Ê' => 'E', 'Ë' => 'E', 'Ì' => 'I', 'Í' => 'I', 'Î' => 'I', 'Ï' => 'I',
			'Ð' => 'D', 'Ñ' => 'N', 'Ò' => 'O', 'Ó' => 'O', 'Ô' => 'O', 'Õ' => 'O', 'Ö' => 'O', 'Ő' => 'O',
			'Ø' => 'O', 'Ù' => 'U', 'Ú' => 'U', 'Û' => 'U', 'Ü' => 'U', 'Ű' => 'U', 'Ý' => 'Y', 'Þ' => 'TH',
			'ß' => 'ss',
			'à' => 'a', 'á' => 'a', 'â' => 'a', 'ã' => 'a', 'ä' => 'a', 'å' => 'a', 'æ' => 'ae', 'ç' => 'c',
			'è' => 'e', 'é' => 'e', 'ê' => 'e', 'ë' => 'e', 'ì' => 'i', 'í' => 'i', 'î' => 'i', 'ï' => 'i',
			'ð' => 'd', 'ñ' => 'n', 'ò' => 'o', 'ó' => 'o', 'ô' => 'o', 'õ' => 'o', 'ö' => 'o', 'ő' => 'o',
			'ø' => 'o', 'ù' => 'u', 'ú' => 'u', 'û' => 'u', 'ü' => 'u', 'ű' => 'u', 'ý' => 'y', 'þ' => 'th',
			'ÿ' => 'y',
			// Latin symbols
			'©' => '(c)',
			// Greek
			'Α' => 'A', 'Β' => 'B', 'Γ' => 'G', 'Δ' => 'D', 'Ε' => 'E', 'Ζ' => 'Z', 'Η' => 'H', 'Θ' => '8',
			'Ι' => 'I', 'Κ' => 'K', 'Λ' => 'L', 'Μ' => 'M', 'Ν' => 'N', 'Ξ' => '3', 'Ο' => 'O', 'Π' => 'P',
			'Ρ' => 'R', 'Σ' => 'S', 'Τ' => 'T', 'Υ' => 'Y', 'Φ' => 'F', 'Χ' => 'X', 'Ψ' => 'PS', 'Ω' => 'W',
			'Ά' => 'A', 'Έ' => 'E', 'Ί' => 'I', 'Ό' => 'O', 'Ύ' => 'Y', 'Ή' => 'H', 'Ώ' => 'W', 'Ϊ' => 'I',
			'Ϋ' => 'Y',
			'α' => 'a', 'β' => 'b', 'γ' => 'g', 'δ' => 'd', 'ε' => 'e', 'ζ' => 'z', 'η' => 'h', 'θ' => '8',
			'ι' => 'i', 'κ' => 'k', 'λ' => 'l', 'μ' => 'm', 'ν' => 'n', 'ξ' => '3', 'ο' => 'o', 'π' => 'p',
			'ρ' => 'r', 'σ' => 's', 'τ' => 't', 'υ' => 'y', 'φ' => 'f', 'χ' => 'x', 'ψ' => 'ps', 'ω' => 'w',
			'ά' => 'a', 'έ' => 'e', 'ί' => 'i', 'ό' => 'o', 'ύ' => 'y', 'ή' => 'h', 'ώ' => 'w', 'ς' => 's',
			'ϊ' => 'i', 'ΰ' => 'y', 'ϋ' => 'y', 'ΐ' => 'i',
			// Turkish
			'Ş' => 'S', 'İ' => 'I', 'Ç' => 'C', 'Ü' => 'U', 'Ö' => 'O', 'Ğ' => 'G',
			'ş' => 's', 'ı' => 'i', 'ç' => 'c', 'ü' => 'u', 'ö' => 'o', 'ğ' => 'g',
			// Russian
			'А' => 'A', 'Б' => 'B', 'В' => 'V', 'Г' => 'G', 'Д' => 'D', 'Е' => 'E', 'Ё' => 'Yo', 'Ж' => 'Zh',
			'З' => 'Z', 'И' => 'I', 'Й' => 'J', 'К' => 'K', 'Л' => 'L', 'М' => 'M', 'Н' => 'N', 'О' => 'O',
			'П' => 'P', 'Р' => 'R', 'С' => 'S', 'Т' => 'T', 'У' => 'U', 'Ф' => 'F', 'Х' => 'H', 'Ц' => 'C',
			'Ч' => 'Ch', 'Ш' => 'Sh', 'Щ' => 'Sh', 'Ъ' => '', 'Ы' => 'Y', 'Ь' => '', 'Э' => 'E', 'Ю' => 'Yu',
			'Я' => 'Ya',
			'а' => 'a', 'б' => 'b', 'в' => 'v', 'г' => 'g', 'д' => 'd', 'е' => 'e', 'ё' => 'yo', 'ж' => 'zh',
			'з' => 'z', 'и' => 'i', 'й' => 'j', 'к' => 'k', 'л' => 'l', 'м' => 'm', 'н' => 'n', 'о' => 'o',
			'п' => 'p', 'р' => 'r', 'с' => 's', 'т' => 't', 'у' => 'u', 'ф' => 'f', 'х' => 'h', 'ц' => 'c',
			'ч' => 'ch', 'ш' => 'sh', 'щ' => 'sh', 'ъ' => '', 'ы' => 'y', 'ь' => '', 'э' => 'e', 'ю' => 'yu',
			'я' => 'ya',
			// Ukrainian
			'Є' => 'Ye', 'І' => 'I', 'Ї' => 'Yi', 'Ґ' => 'G',
			'є' => 'ye', 'і' => 'i', 'ї' => 'yi', 'ґ' => 'g',
			// Czech
			'Č' => 'C', 'Ď' => 'D', 'Ě' => 'E', 'Ň' => 'N', 'Ř' => 'R', 'Š' => 'S', 'Ť' => 'T', 'Ů' => 'U',
			'Ž' => 'Z',
			'č' => 'c', 'ď' => 'd', 'ě' => 'e', 'ň' => 'n', 'ř' => 'r', 'š' => 's', 'ť' => 't', 'ů' => 'u',
			'ž' => 'z',
			// Polish
			'Ą' => 'A', 'Ć' => 'C', 'Ę' => 'e', 'Ł' => 'L', 'Ń' => 'N', 'Ó' => 'o', 'Ś' => 'S', 'Ź' => 'Z',
			'Ż' => 'Z',
			'ą' => 'a', 'ć' => 'c', 'ę' => 'e', 'ł' => 'l', 'ń' => 'n', 'ó' => 'o', 'ś' => 's', 'ź' => 'z',
			'ż' => 'z',
			// Latvian
			'Ā' => 'A', 'Č' => 'C', 'Ē' => 'E', 'Ģ' => 'G', 'Ī' => 'i', 'Ķ' => 'k', 'Ļ' => 'L', 'Ņ' => 'N',
			'Š' => 'S', 'Ū' => 'u', 'Ž' => 'Z',
			'ā' => 'a', 'č' => 'c', 'ē' => 'e', 'ģ' => 'g', 'ī' => 'i', 'ķ' => 'k', 'ļ' => 'l', 'ņ' => 'n',
			'š' => 's', 'ū' => 'u', 'ž' => 'z'
		);
		$str = preg_replace(array_keys($options['replacements']), $options['replacements'], $str);
		if ($options['transliterate']) {
			$str = str_replace(array_keys($char_map), $char_map, $str);
		}
		$str = preg_replace('/[^\p{L}\p{Nd}]+/u', $options['delimiter'], $str);
		$str = preg_replace('/(' . preg_quote($options['delimiter'], '/') . '){2,}/', '$1', $str);
		$str = mb_substr($str, 0, ($options['limit'] ? $options['limit'] : mb_strlen($str, 'UTF-8')), 'UTF-8');
		$str = trim($str, $options['delimiter']);
		return $options['lowercase'] ? mb_strtolower($str, 'UTF-8') : $str;
	}

Bu metot alıntıdır. => Php Sef Link Fonksiyonu

Son metodumuzu da ekledik. Artık bu fonksiyonları çağırarak apimizi çalıştırabiliriz.

Devamını okumak için lütfen diğer sayfaya geçiniz…

Laravel Veritabanı İşlemleri

Laravel Framworkü kullanarak veritabanı ile genel (ekle, düzenle, listele ve görüntümele) işlemlerinin nasıl gerçekleştirileceğini göstereceğim.

Merhabalar bugün sizlere Laravel Framwork‘ü ile veritabanı işlemlerinin nasıl yapılacağını anlatacağım. Detaylı sorgular için Laravel tarafından oluşturulmuş Database: Query Builder inceleyebilirsiniz.

1. Adım Laravel Projesi Oluşturma

Komut yöneticisini açıyoruz.(CMD & Terminal) ardından bilgisayarınızda global olarak laravel yüklü ise

laravel new crudExample

kodunu kullanabilirsiniz. Fakat bilgisayarınızda sadece composer yüklü ise

composer create-project --prefer-dist laravel/laravel crudExample

komutunu kullanarak crudExample adında bir Laravel projesi oluşturabilirsiniz. Yükleme işlemleri tamamlandıktan sonra.


2. Adım Veritabanı Oluşturma İşlemleri

Ben bu aşamada MySQL kullanacağım. İlk olarak phpmyadmin üzerinde bir adet veritabanı oluşturalım. Ben isim olarak crudexample adını veriyorum fakat siz istediğiniz herhangi bir ismi verebilirsiniz.

Artık Laravel framworküne bağlayacağımız bir veritabanımız var. Şimdi projemizin ana dizininde bulunan .env dosyasını açalım ve gerekli düzenlemeleri yapalım.

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=veritabanınızın adı (Örn: crudexample)
DB_USERNAME=veritabanınızın kullanıcı adı (Örn: root)
DB_PASSWORD=veritabanınızın şifresi (Örn: 123)

Laravel ile veritabanı bağlantımızı başarıyla yaptık.


3. Adım Tablo Oluşturma (Migration Oluşturma)

Artık veritabanı bağlantımızı da yaptığımıza göre tablolarımızı oluşturabiliriz. Laravel 7 ile birlikte komut satırına (CMD & Terminal ) komutlarımızı yazarak model oluşturabiliriz.

php artisan make:migration create_articles_table --create=articles

create_articles_table adında migration bilgilerimizin tutulacağı bir php dosyası oluşturacaktır.

–create=articles komutu ise bize hazır bir şablon vermektedir. Burada geçen articles ismi ise tablomuzun adını belitmektedir. create_articles_table dosyasına ulaşmak için “database/migrations” yolunu takip edebilirsiniz.

<?php

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

class CreateArticlesTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('articles', function (Blueprint $table) {
            $table->id();            // UNIQ ID
            $table->string('title'); // Yazı başlığı.
            $table->text('article'); // Yazımız
            $table->timestamps();    // Oluşturma ve Düzenleme tarihleri
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::dropIfExists('articles');
    }
}

İçeriğinde başlık ve yazımızın bulunduğu bir tablonun temellerini hazırladık. Artık kodumuzu çalıştırarak tablomuzu veritabanına kayıt edebiliriz. Bu işlem için komut satırına (CMD & Terminal)

php artisan migrate

komutunu yazıp çalıştıralım. Veritabanımıza gidip baktığımızda 2 adet tablo oluştuğunu göreceksiniz.

migrations : Migrasyon verilerinin tutulduğu tablo.

articles : Bizim oluşturduğumuz. Yazılarımızın tutulacağı tablo.


4. Adım Route Oluşturma

Laravel’in genel veritabanı işlemlerinin yapıldığı hazır bir route inşa edebiliyor. Bunun için “route/web.php” dosyasının içerisine

Route::resource('articles','ArticleController');

Komutunu eklemeniz yeterlidir. Bu sayede oluşturacağımız Controller’ın routelarını tek bir komut ile tanımlamış olduk.


5. Adım Controller ve Model Oluşturma

Bu işlemi hızlıca yapabilmek için tekrar Komut satırını (CMD & Terminal) kullanacağız.

php artisan make:controller ArticleController --resource --model=Article

Bu komut ile bir AritcleController adında bir Controller ve Article adında bir Model oluşturuyoruz. Oluştururken bize model oluşturmak isteyip istemediğimiz hakkında soru soruyor bu soruya yes cevabını vererek Modelimizide oluşturmuş oluyoruz.

Peki bu –resource nedir ?

–resource komutu ile hazır kaynak kodlarımızı Controller’a dahil etmiş oluyoruz. Bu kaynak kodlarının içerisinde:

  • index() : Verilerimizin listeleneceği method
  • create(): Veri ekleme sayfamızın görüntüleneceği method
  • store(): Veri ekleme işlemimizin gerçekleşeceği method
  • show(): Tek bir verimizin detaylı listeleneceği method
  • edit(): Veri düzenleme sayfamızın görüntüleneceği method
  • update(): Veri güncelleme işleminin gerçekleşeceği method
  • destroy(): Veri silme işleminin gerçekleşeceği method

şeklinde bizlere hazır methodlar sağlamaktadır. Bu methodları Controllarınız üzerinden görmek isterseniz “app/http/Controllers/ArticleController.php” dosya yoluna gidip inceleyebilirsiniz.

<?php

namespace App\Http\Controllers;

use App\Article;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;

class ArticleController extends Controller
{
    /**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function index()
    {
        $articles = Article::get();
        return view("articles.list",['articles' => $articles]);
    }

    /**
     * Show the form for creating a new resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function create()
    {
        return view("articles.create");
    }

    /**
     * Store a newly created resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return \Illuminate\Http\Response
     */
    public function store(Request $request)
    {
        $request->validate([
            'title'     => 'required',
            'article'   => 'required',
        ]);

        Article::create($request->all());
        return redirect()->route('articles.index')
                        ->with('success','Kayıt başarıyla yapıldı.');
    }

    /**
     * Display the specified resource.
     *
     * @param  \App\Article  $article
     * @return \Illuminate\Http\Response
     */
    public function show(Article $article)
    {
        return view("articles.show",['article'  => $article]);
    }

    /**
     * Show the form for editing the specified resource.
     *
     * @param  \App\Article  $article
     * @return \Illuminate\Http\Response
     */
    public function edit(Article $article)
    {
        return view("articles.edit",['article'  => $article]);
    }

    /**
     * Update the specified resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \App\Article  $article
     * @return \Illuminate\Http\Response
     */
    public function update(Request $request, Article $article)
    {
        $request->validate([
            'title'     => 'required',
            'article'   => 'required',
        ]);

        $article->update($request->all());

        return redirect()->route('articles.index')
                        ->with('success','Kayıt başarıyla güncellendi.');
    }

    /**
     * Remove the specified resource from storage.
     *
     * @param  \App\Article  $article
     * @return \Illuminate\Http\Response
     */
    public function destroy(Article $article)
    {
        $article->delete();
        return redirect()->route('articles.index')
                        ->with('success','Kayıt başarıyla silindi.');
    }
}

Evet gerekli veritabanı işlemlerini yapacak şekilde Controllerimizi düzenledik. Artık modelimizi düzenleyebiliriz.


6. Adım Model Düzenleme

“app/Article” model dosyamıza müdahale edeceğimiz verilerimizi tanımlıyoruz.

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Article extends Model
{
    protected $fillable = [
        'title', 'article'
    ];
}

7. Adım Sayfaların Oluşturulması

“resources/view” klasörünün içerisine 2 adet klasör oluşturalım.

  1. Klasör: shared
  2. Klasör: articles

shared: Bu klasörün içerisinde tüm sayfalarda olmasını istediğimiz parçaları bulunduracağız. Bir sade bir işlem yaptığımız için içersinde sadece “layout.blade.php” oluşturacağız.

shared/layout.php

<!DOCTYPE html>
<html>
<head>
    <title>Laravel 7 Veritabanı İşlemleri</title>
    <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.0/css/bootstrap.min.css" integrity="sha384-9aIt2nRpC12Uk9gS9baDl411NQApFmC26EwAOH8WgZl5MYYxFfc+NcPb1dKGj7Sk" crossorigin="anonymous">
</head>
<body>

<div class="container mt-3">
    @yield('content')
</div>

<!-- Footer -->
<footer class="page-footer font-small blue fixed-bottom">

    <!-- Copyright -->
    <div class="footer-copyright text-center py-3">© 2020 Copyright:
      <a href="https://enginyenice.com/"> enginyenice.com</a>
    </div>
    <!-- Copyright -->

  </footer>
  <!-- Footer -->

</body>
</html>

2. Klasörümüz olan articles klasörünün içerisine

  • list.blade.php (Yazılarımızın listelendiği sayfa)
  • show.blade.php (Yazı detaylı gösterme sayfamız.)
  • create.blade.php (Yazı ekleme sayfamız)
  • edit.blade.php (Yazı düzenleme sayfamız)

articles/list.blade.php

@extends('shared.layout')

@section('content')
<div class="row">
    <div class="container">


        @if ($message = Session::get('success'))
        <div class="alert alert-success">
            <p>{{ $message }}</p>
        </div>
        @endif
        <a href="{{ route('articles.create')}}" class="btn btn-sm btn-success mt-2">Ekle</a>
        <table class="table table-bordered mt-2">
            <thead>
                <tr>
                    <th width="5%">ID</th>
                    <th width="15%">Başlık</th>
                    <th width="30%">Yazı</th>
                    <th width="20%">Göster</th>
                    <th width="20%">Düzenle</th>
                    <th width="10%">Sil</th>
                </tr>
            <thead>
            <tbody>
                @foreach ($articles as $article)
                <tr>
                    <td>{{ $article->id}}</td>
                    <td>{{ $article->title}}</td>
                    <td>{{ $article->article}}</td>
                    <td><a class="btn btn-sm btn-primary" href="{{ route('articles.show',$article->id) }}">Göster</a></td>
                    <td><a class="btn btn-sm btn-info" href="{{ route('articles.edit',$article->id) }}">Düzenle</a></td>
                    <td>
                    <form action="{{ route('articles.destroy', $article->id)}}" method="POST">
                            @csrf
                        @method('DELETE')
                        <button type="submit" class="btn btn-danger">Sil</button>
                        </form>
                    </td>
                </tr>
                @endforeach
            </tbody>


                <tfoot>
                    <tr>
                        <th width="5%">ID</th>
                        <th width="15%">Başlık</th>
                        <th width="30%">Yazı</th>
                        <th width="20%">Göster</th>
                        <th width="20%">Düzenle</th>
                        <th width="10%">Sil</th>
                    </tr>
                <tfoot>
        </table>
    </div>

</div>
@endsection

articles/show.blade.php sayfamız

@extends('shared.layout')

@section('content')
<div class="row">
    <div class="container">
    @if ($errors->any())
    <div class="alert alert-danger">
        <ul>
            @foreach ($errors->all() as $error)
                <li>{{ $error }}</li>
            @endforeach
        </ul>
    </div>
    @endif
    <form action="{{ route('articles.update',$article->id)}}" method="POST">
        @csrf
        @method('PUT')
        <div class="form-group row">
        <h1>Başlık: <strong>{{ $article->title }}</strong></h1>
        </div>

        <div class="form-group row">
            <p>Oluşturma Tarihi: <strong>{{ $article->created_at }}</strong></p>
        </div>

        <div class="form-group row">
            <p>Düzenlenme Tarihi: <strong>{{ $article->updated_at }}</strong></p>
        </div>

        <div class="form-group row">
            <p>Yazı: {{ $article->article }}</p>
        </div>
        <div class="form-group row">

        <a href="{{ route('articles.index') }}" class="btn btn-primary">Geri Git</a>
        </div>
    </form>
    </div>
</div>
@endsection

articles/create.blade.php

@extends('shared.layout')

@section('content')
<div class="row">
    <div class="container">
    @if ($errors->any())
    <div class="alert alert-danger">
        <ul>
            @foreach ($errors->all() as $error)
                <li>{{ $error }}</li>
            @endforeach
        </ul>
    </div>
    @endif
    <form action="{{ route('articles.store')}}" method="POST">
        @csrf
        <div class="form-group row">
            <label class="form-input col-sm-1 mt-1">Başlık</label>
            <input type="text" class="col-sm-11" name="title">
        </div>

        <div class="form-group row">
            <label class="form-input col-sm-1 mt-1">Yazı</label>
            <textarea name="article" class="col col-sm-11"></textarea>
        </div>
        <div class="form-group row">

            <button type="submit" class="btn btn-success d-inline-block col-sm-12">Ekle</button>
        </div>
    </form>
    <div class="form-group row text-center">
        <a href="{{ route('articles.index') }}" class="btn btn-secondary d-inline-block col-sm-12">Geri Git</a>
    </div>
    </div>
</div>
@endsection

articles/edit.blade.php

@extends('shared.layout')

@section('content')
<div class="row">
    <div class="container">
    @if ($errors->any())
    <div class="alert alert-danger">
        <ul>
            @foreach ($errors->all() as $error)
                <li>{{ $error }}</li>
            @endforeach
        </ul>
    </div>

    @endif

    <form action="{{ route('articles.update',$article->id)}}" method="POST">
        @csrf
        @method('PUT')
        <div class="form-group row">
            <label class="form-input col-sm-1 mt-1">Başlık</label>
        <input type="text" class="col-sm-11" name="title" value="{{ $article->title }}">
        </div>

        <div class="form-group row">
            <label class="form-input col-sm-1 mt-1">Yazı</label>
            <textarea name="article" class="col col-sm-11">{{ $article->article }}</textarea>
        </div>
        <div class="form-group row">

            <button type="submit" class="btn btn-success d-inline-block col-sm-12">Güncelle</button>
        </div>
    </form>
    <div class="form-group row text-center">
        <a href="{{ route('articles.index') }}" class="btn btn-secondary d-inline-block col-sm-12">Geri Git</a>
    </div>
    </div>
</div>
@endsection

Artık oluşturduğumuz sayfaları ziyaret edebiliriz. Tarayıcımızda http://localhost:8000/articles adresini ziyaret ederek sayfalarımıza ulaşabiliriz.


Bloğumu halen incelemediniz mi ? https://enginyenice.com/

Hakkımda: https://enginyenice.com/hakkimda/

İletişim : https://enginyenice.com/iletisim/