Categories
Laravel MySQL PHP

Mysql General Error 1364 Field Doesn’t Have Default Value

Hi All,

Since I’ve updated my homestead to 0.3.0 and mysql version is upgrade to 5.7.4. From that moment, my old projects has been started to throw problems which is Mysql General Error 1364 Field doesn’t have default value.

Even migrations was not working, there has to be a problem. After my first research I’ve found a solution for Php Laravel Projects there is a “strict” parameter for mysql connection, when I set it true migrations worked well.. But, in some cases, I let the mysql to set default value such as integer fields are sets to ‘0’ and varchar fields are empty strings etc.. I need to use default values as before..

Categories
Laravel MySQL PHP

Laravel Eloquent Model Events

Hi All ,

In this post , I’ll talk about Eloquent Model Events.

Looks Like Database Trigger Isn’t it?

When I read the documentation , I said “Mysql already doing this so..”. Personally, still I prefer to use Mysql Triggers for database operations. It’s more faster and guaranteed. But day by day NoSQL solutions or Hybrid database solutions like using MongoDB and Mysql together becoming as a popular solutions.  Also each NoSQL database is different, but MongoDB doesn’t support  actually stored procedures or triggers. In that case , we need to handle this kind of situations.

If you are interested in MySQL-NoSQL Hybrid Solution with Laravel. You can check this package by Jessenger.

For More

Laravel site has a simple usage example for Eloquent Model Events for “Validation”. In real projects , we have to validate every input , when model “updating” and “creating” its very important. So, Model Events is amazingly useful for this job. You can check the JeffreyWay Model Validation package from github.  This package supports model based validation rules.

Generaly, we need to delete photos , avatars , attachments from FTP too or Logging Model actions We can add more usages examples depends on situation. Let’s see abilities of Model Events.

Categories
Laravel PHP

Laravel 4 Paylaşımlı Host Komut (Shared Host Command)

Merhaba Arkadaşlar ,

Laravel projenizi henüz paylaşımlı host’a yüklemediyseniz. Laravel Paylaşımlı Host’ta yayınlamak. ile ilgili yazımı okuyabilirsiniz.

Projemiz’i teknik olarak internete açtık. Ancak , şimdi içerikleri nasıl dolduracağız. Migration’ları seed’leri boşuna mı yazdık? ‘Hayat “http://localhost” da çok güzeldi.’ peki ya şimdi..

Bana göre Laravel’i üst seviyelere taşıyan ve önüzmüzdeki yıllarda daha popüler olmasını sağlayacak özellikleri  : Composer , Bundle , Eloquent , Migratin , Seed vs.. bunlar başta olmak üzere geliştirilen opensource kütüphaneleri entegre çalışması. Eloquent hariç tüm bu özellikler bildiğiniz üzere konsol bağlantısı gerektiriyor veya tutorial’dan öyle gördük.

VPS’imiz , SSH’ımız yok ölelim mi?

Tabi ki hayır.. Ozaman ‘Talk is easy show me the code!’ diyosunuz.. 😀

Categories
Laravel Linux

Laravel 4 Paylaşımlı Host Yayın(Shared Host Publish)

Merhaba Arkadaşlar ,

Bugün itibari ile ilk Laravel 4 projemi yayına hazırladım. Her proje için VPS ve SSH bağlantısı malum biraz lüks olabiliyor. Aşağıdaki adımları takip ederseniz. Projenizi paylaşımlı hostta ssh bağlantısı olmadan yayınlayabilirsiniz.

Öncelikle bu konuda birçok yöntem olduğunu belirteyim. Ben güvenli ve basit olanı tercih ediyorum. Bu işlem Rewreite Rule kullanılarak da elbette yapılabilir. Ancak bütün kodlarımızı sere serpe ziyaretçilere sunmak istemiyoruz..

Categories
Laravel PHP

Laravel 4 Migration Seed Faker Database

Merhaba Arkadaşlar ,

Bu yazımda Laravel 4  de proje şablonu oluşturuken kullanabileceğimiz , Migration , Seed ve Faker araçlarını birarada kullanarak yeni bir projenin temellerini oluşturacağım.

Henüz Laravel 4 kurulumunu yapmadıysanız. Hızlı kurulumu için bu yazıyı okuyun.

Laravel 4 ile ilgili basit ipuçları ve Faker hakkında ayrıntılı bilgi için bu yazıyı okuyabilirsiniz.

Migration

Migration aracının bize sağlıdığı en iyi özellik şema tasarımının kolayca oluşturulabilmesi , ORM yapasına uygun kolonları eklemesi timestamp( ‘created_at’ , ‘updated_at’) verileri ve proje içinde çalışırken artık bizi database’e bakma yükünden kurtarması. Migration dosyaları ‘app/database/migrations’ klasörü altında bulunuyor.

  • <?php
    
    use Illuminate\Database\Migrations\Migration;
    use Illuminate\Database\Schema\Blueprint;
    
    class CreateProduct extends Migration {
    
        /**
         * Run the migrations.
         *
         * @return void
         */
        public function up() {
            Schema::create('product', function(Blueprint $table) {
                $table->increments('pid');
                $table->string('title');
                $table->text('description');
                $table->timestamps();
            });
        }
    
        /**
         * Reverse the migrations.
         *
         * @return void
         */
        public function down() {
            Schema::drop('product');
        }
    
    }

    MySQL deki bütün veri tiplerini ve özelliklerini şema oluştururken kullanmak mümkün integer , bigint , text ,enum vs.. Ayrıntılı bilgi için buraya bakabilirsiniz.

  • php artisan migrate

    Yukarıdaki komut ile migrations klasörü altındaki dosyaları okuyrak database de tablolar ve alanları oluşturduk.

Seed ve Faker

Migration ile şemamızı oluşturduk ve database hazır ama boş 😀 Bize gerçek olmayan veriler(Dummy Data) lazım. Seed Class’ı bu konuda yardımımıza koşuyor. Buna ek olarak rastgele ve anlamlı yazı , resim , websitesi , email vs. ihtiyazcınız olabiliecek birçok veri tipini de ‘Faker’ ile üretebilirsiniz.

Faker kurulumu , desteklediği veriler için buraya bakınız.

  • Kullanım kolayladığı sağladığı için ben öncelikle modelin oluşturulması gerektiğini düşünüyorum. İsterseniz model olmadan da insert methodu ile database’i doldurabilirsiniz.
  • <?php
    
    /**
     * An Eloquent Model: 'Products'
     *
     * @property integer $pid
     * @property string $title
     * @property string $description
     * @property \Carbon\Carbon $created_at
     * @property \Carbon\Carbon $updated_at
     */
    class Product extends \Eloquent {
        protected $table = 'product';
        protected $fillable = [];
    }

    Yukarıdaki kodları ‘app/models’ altına Product ismi ile kaydedebilirsiniz.

  • <?php
    
    // Composer: "fzaninotto/faker": "v1.3.0"
    use Faker\Factory as Faker;
    
    class CompanyTableSeeder extends Seeder {
    
        public function run()
        {
            $faker = Faker::create();
            foreach(range(1, 100) as $index)
            {
                Product::create([  
                    'title' => $faker->title,
                    'description' => $faker->text(400),
                ]);
            }
    
            $this->command->info('Products table seeded!');
        }
    
    }

    Seeder dan 100 tane rastgele anlamlı veriyi database’e eklemesini istedik.

  • <?php
    
    class DatabaseSeeder extends Seeder {
    
    	/**
    	 * Run the database seeds.
    	 *
    	 * @return void
    	 */
    	public function run()
    	{
                 Eloquent::unguard();
                 $this->call('ProductTableSeeder');
    
    	}
    
    }

    ‘app/database//seeds/DatabaseSeeder.php’ yukarıdaki kodlara $this->call methodu ile yeni oluşturduğumuz seeder çağırdık.

  • php artisan db:seed

    Evettt tamamdır. Tam 100 tane anlamlı verimiz oldu. Bu şekilde projenize stres testi yapabilir ve optimizasyon sorunlarını çözebilirsiniz. Artık boş ve anlamsız verilerle web projesi oluşturmaya son!! 😀

Bir dahaki Laravel yazımızda görüşmek dileğiyle..

Muharrem Tığdemir

Categories
Laravel PHP

Laravel 4 Routing Resorce-Controller-Farkı

Merhaba Arkadaşlar ,

Laravel yazı dizilerime routing ile devam ediyorum. Daha önce bir php framework kullandıysanız routing size yabacı olmasa gerek. Benim değinmek istediğim nokta Resource ve Controller routing tasarım farkı ve neden tercih edilmesi hakkında olacak.

Temel routing ile ilgili daha ayrıntılı bilgiyi Laravel sitesinden alabilirsiniz.

Get Routing

  • Route::get('/', function()
    {
        return 'Hello World!! Muharrem Tigdemir';
    });

    Get methodu iki parametre alıyor. URI ve fonksiyon. http://localhost

    Routing Parametreler

  • Route::get('test/{id}', function($id)
    {
        return 'Test Value : '.$id;
    });

http://localhost/test/4

Post Routing

  • Route::post('post/test', function($id)
    {
        return 'Post'. $id;
    });

    Get ile aynı kullanıma sahip post yapısı.  http://localhost/post/test

Any Routing

Evet temel Routing öğrendik peki Route:controller ve Route:Resource farkı ne? Bunu anlayabilmek için öncelikle birer route tanımlayarak çıktılarını inceleyelim.

  • Route::controller('test' , 'TestController');
    
    Route::resource('photo', 'PhotoController');

    Ben yukarıdaki iki routing’i tanımladım.

  • php artisan route

    Konsoldan yukarıdaki komutu yazdığımızda

Laravel Route
Laravel Route Resource ve Controller

Yukarıdaki resimden görebileceğiniz gibi Laravel önceden tanımlı(pre-defined) fonksiyonları arıyor ve bazılarını missing olarak gösteriyor.

Resource  Methodları

  1. index
  2. create
  3. store
  4. show
  5. edit
  6. update
  7. destroy

Controller Methodları

  1. getIndex
  2. postSecond

Gerçekten lafı biraz uzattım sonuç olarak..

Controller Routing

Eğer standartlara uygun Routing yapmak istiyorsanız Controller seçiminiz olmalı. Yeni bir method tanımlarken dikkat etmeniz gereken. Get method için fonksyionun ismi get ile başlamalı ve devam eden ilk harf büyük olmalı. Post method için fonksyion post ile başlamalı ve devam eden ilk harf büyük olmalı. Örnek Routing ve sonucu..

  • class TestController extends BaseController {
    	public function getIndex()
    	{
    		// URL /test
    		echo "Index Sayfası";
    	}
    
    	public function getMy()
    	{
    		// URL /test/my
    		echo "My fonksyionu";
    	}
    
    	public function getMylist()
    	{
    		// URL /test/mylist
    		echo "My List fonksyionu";
    	}
    
    	public function postProfile()
    	{
    	    // URL /test/profile NOT : POST
    		echo "Post Method";
    	}
    
    }
  • Route::controller('test' , 'TestController');

Resource Routing

Eğer CRUD işlemleri yapacağınız bir senaryo var ise seçiminiz Resource Routing olmalı.

  • Route::resource('photo', 'PhotoController');

     

 

Muharrem Tığdemir

Categories
Laravel PHP

Laravel 4 Tavsiye ve İpucu

Merhaba Arkadaşlar ,

Bu yazımda genel olarak Laravel kullanmanın ipuçları ve geliştirme sürecinde yardımcı olabilecek tavsiyelerden bahsedeceğim. Muhtemelen bu yazı kısa başlayıp uzayacak :)) Bende olabildiğince yeni öğrendiklerimi paylaşmaya çalışacağım..

Laravel IDE AutoComplete-Helper

  • Github : Bu eklenti sayesinde Php Class’ları ve oluşturduğunuz Modeller IDE auto Complete özelliği ile hızınızı katlayabilirsiniz.
  • Php programcılarında benim büyük eksik olarak gördüğüm dökümantasyon sorunu da bu şekilde ortadan kalkmış oluyor.
    1. ide-helper:generate
    2. ide-helper:models

Laravel Generator

  • Github : Sizin için otomatik kod üreten bir eklenti başlangıç seviye iseniz kullanmamanızı öneririm. Yapılan işlemi output vermesine rağmen syntax’ı öğrenmekte fayda var :))
  • Bu eklenti ile gelen generate methodları özellikle resource deneyin “kod yazan kod”  tabirine uygun bir fonksiyon :))
    1. generate:model
    2. generate:controller
    3. generate:seed
    4. generate:view
    5. generate:migration
    6. generate:resource
    7. generate:scaffold
    8. generate:form
    9. generate:test
    10. generate:pivot

 Laravel Faker

  • Github : Bu eklenti sayesinde başlangıç aşamasındaki projelerde ki ‘dummy data’ sorununu kökten çözmüş. Rastgele anlamlı değerler ile database’imizi dolduruyor. Benim datalarım çok orjinal bana uymaz demeyin 😀 Aşağıdaki veri tiplerinin tamamı Faker tarafında destekleniyor.
    1. Kişi ( İsim , Soyad , Tam isim , Ünvan) = (Fİrstname , Surname , Name , Suffix , Prefix)
    2. Adres (Şehir , Sokak , Zip vs..)
    3.  Telefon
    4. Şirket
    5. Kredi Kartı
    6. Lorem
    7. Yazı
    8. User Agent
    9. Zaman
    10. Şifrelemeler(MD5 , SHA1 , SHA256 , Dil , Ülke)
    11. Rastgele (Sayı , yazı , değer , karakter)
    12. Internet (Web sitesi , email )
    13. Renkler
    14. Dosya
    15. Unique ID (UUID)
    16. Resim
    17. Barcode
  • Ve proje tamamen ORM ve ODM destekli Doctrine , Propel ve Mandango ile kullanılabiliyor.
  •  Sizcede mükemmel değil mi ? :))

Laravel URL Friendly SEO

  • Github : Malum işimiz web seo artık sorulmadan yapılıyor. Eğer biraz araştırırsanız  laravel için birçok seo eklentisi olduğunu göreceksiniz. Peki neden bunu tercih etmeliyiz?
    1. Static method’u model’e implement ettkiten sonra belirlediğiniz kolonlar arasında otomatik olarak Update ve Insert sırasında çalışıyor.
    2. Unique slug garantisi var.
    3. ORM ile tam uyumlu
    4. Vee tabiki eklemesi çok kolay 😀

 Laravel Sitemap

  • Github : Sitemap oluşturmak istiyorsanız , kullanılabiliecek en basit paket. Yukarıdaki seo paketinin yanında çok da güzel gidiyor. 😀

Laravel Sınırsız Kategori(Nested Category)

  • Github : Sınırsız kategorilendirme ile başınız dertte ise Baum aradığınız cevap. Açıkcası ben işin içine kategori giriyor ise direkt baum’u entegre ediyorum. Temel ihtiyacınız bütün kodlar model ile geliyor. Laravel 4 + ORM destekli diğer modeller ile kullanırken de hiç bir sorun oluşmuyor.

Yukarıda belirttiğim bütün kütüphaneleri tüm özellikleri ile kullanmaya başladığınız da ne kadar hızlandığınıza inanamayacaksınız. Özellikle kendinizi tekrarlama sınırına geldiyseniz. Laravel 4′ e geçme vaktiniz gelmiş demektir.

Kimlere Önermiyorum?

  • SQL bilginiz düşük ise ORM ilişkilerini anlamak size zor gelebilir.
  • Database şema oluşturma bilginiz düşük ise altyapı kurmak zor gelebilir.
  • Dökümantasyon okumayı sevmiyosanız size zor gelebilir.(Ozaman framework kullanmazdık zaten dediniz 😀 )
  • OOP bilginiz düşük ise Model yapılarını anlamak size zor gelebilir.
  • Öğrendiğiniz ilk Framework Laravel ise diğerleri size zor gelebilir.
  • Depency Injection ve Function Chaining tabirleri size zor gelebilir.
  • Konsola uzaksanız , .net tarzı bir dil kullanıyorsanız bunlar size uzak gelebilir.

 

NOT : Yukarıda belirttiğim maddeler kesinlikle sizi Laravel’den caydırmak amaçlı değildir. 1 haftalık bir süreçte öncelikle kendiniz bu noktalarda geliştirirseniz. Laravel’e çok daha hızlı adapte olabilirsiniz.

Muharrem Tığdemir

Categories
Laravel PHP

Laravel 4 Artisan ve Ayarlar

Merhaba Arkadaşlar  ,

 Bu yazımda Laravel konsol komutları ile ilk ayarlarının düzenlemesinden bahsedeceğim.  Eğer  Laravel kurulumunu henüz yapmadıysanız ilk yazımı okumanızı tavsiye ederim.

Laravel 4 Kurulumu

Yazının devamında hem artisan kullanarak hemde manuel düzenlemeyi aynı anda göstereceğim.

Laravel  .htacces SEO URL

  • Options +FollowSymLinks
    RewriteEngine On
    
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^ index.php [L]

    Yukarıdaki rewrite komutunu laravel proje klasörünüze .htaccess dosyası olarak ekleyin.

Artisan Key Generate

  • php artisan key:generate

    veya app/config/app.php dosyasından ‘key’ => ‘YourSecretKey!!!’ değiştirin.

Artisan Make Controller

  • php artisan make:controller CustomerController

    Otomatik Controller ekleyen bu komut bence çok kullanışlı. Manuel oluşturmak için , app/controller içine controller

Artisan Up Down

  • php artisan up
    php artisan down

    Yayındaki sitenizi bakıma aldığınızda veya update yapıyorsanız. Aradağınız komut kesinlike down ve up. Bakımda görünecek sayfanın ayarları için /app/start/global.php  App:down fonksiyonunu editleyebilirsiniz.

Artisan Routes

  • php artisan routes

    Routes komutu ile bütün belirlediğiniz yönlendirmeleri auth , action , filter durumları ile ayrıntılı olarak görebilirisniz.

Laravel Artisan routes
Laravel Artisan Routes

Artisan Serve Port

  •  php artisan serve --port=80

    Serve methodu ile laravel projemizi yayınladığımızı önceki yazıda test etmişttik. “–port” parametresi yayın portunu değiştirebiliriz.

 

 

Muharrem Tığdemir

Categories
Laravel PHP

Laravel 4 XAMPP Kurulum

Merhaba Arkadaşlar ,

Bu yazımda popüler php framework’leri arasında kendi yer edinen laravel kurulumundan bahsedeceğim localhost olarak da XAMPP kullanacağım. Öncelikle Composer bilgisayrınızda kurulu değil ise;

Composer Kurulumu için tıklayın.

Örnek Composer Kullanımı için tıklayın.

Composer kurulumunu tamamladıktan sonrası aslında oldukça basit composer bizim kurulum ve güncelleme gibi birçok işlemi yapacak.

Laravel sitesine giderek veya benim kullandığım son sürüm olan 4.1 versiyon laravel.phar dosyasını indirin ve c:\xampp\htdocs içine kopyalayın.