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
PHP Version Control

Bitbucket Repository with Composer

Hi all,

In this article , you will find a tutorial about , how to use github or bitbucket repositories with composer.

Create Your Repository

Most important thing in this step, we will use the repository name in composer.json. I used “blog/tutorial” as a package name. I prefer to use bitbucket and at the below code copied from bitbucket repository page, following commands will init git repository to your local folder.

mkdir /path/to/your/project
cd /path/to/your/project
git init
git remote add origin [email protected]:yourname/blog-tutorial.git

Create Composer.json

Now, i defined a composer properties like , package name , description , authors , requirements etc.. For more information about composer.json please check Composer Basic Usage

Note: When you finished to edit “composer.json”  , dont forget to run

composer validate
{
    "name": "mtigdemir/blog-tutorial",
    "description": "Muharrem Tigdemir Blog Tutorial Package",
    "authors": [
        {
            "name": "Muharrem Tığdemir",
            "email": "[email protected]"
        }
    ],
    "require": {
        "php": ">=5.4",
    },
    "require-dev": {
        "phpunit/phpunit": "~4.6"
    },
    "autoload": {
        "psr-4": {
            "Mtigdemir\\Blog\\": "src/"
        }
    }
}

As you can see, I’ve defined autoload psr-4 property with namespace “Mtigdemir\\Blog\\”

!IMPORTANT! PSR-0 is deprecated , and PSR-4 standarts show us where to place files that will be autoloaded according to the specification. For more information about PSR-4 please check PHP Framework Interop Group

<?php namespace Mtigdemir\Blog;
// File must be under src directory
class User
{
	private $username; 
	private $email; 

	public function __constructor($username , $email){
		$this->username = $username;
		$this->email = $email;
	}

	public function getEmail(){
		return $this->email;
	}

	public function getUsername(){
		return $this->username;
	}
}

Let’s create a User.class in src/ directory with Mtigdemir\Blog namespace. Your package is ready to use with User class lets push it !

It’s time to include our package into the project

First of all, we have to include our repository to new project at the below composer.json definition is my new project and I included “[email protected]:mtigdemir/blog-tutorial.git” to my repositories.

Note : if you are using private repository. You have add your ssh-key to bitbucket!

{
   "name" : "mtigdemir/blog-tutorial-project",
   "description" : "Blog Tutorial Project",
   "repositories": [
   {
     "type": "vcs",
     "url":  "[email protected]:mtigdemir/blog-tutorial.git"
   }
   ],
   "require": {
       "php": ">=5.4",
    }
  }
composer search mtigdemir

This composer command will find “mtigdemir” packages including my private repository , as a result composer will find our package name and description if everything is cool you will see this kind of result in command line about your package definition: “mtigdemir/blog-tutorial Blog tutorial Package”

composer info mtigdemir/blog-tutorial

What about version ! I didn’t release any version , in that case if you pushed develop or master branch your requirement version will change that’s why composer info is very useful. My package version is “dev-master”

name     : mtigdemir/blog-tutorial                       
descrip. : Blog tutorial Package
keywords : 
versions : dev-master
type     : library
source   : [git] [email protected]:mtigdemir/blog-tutorial.git f37affd9a2f1500a4ff956aa727304ce66af951b
dist     : []  
names    : mtigdemir/blog-tutorial

autoload
psr-4
Bumin\Psp\Account\ => src/

requires
php >=5.4

requires (dev)
phpunit/phpunit ~4.6

Now , you can add your package like at the below or add package to composer.json and update it !

composer require mtigdemir/blog-tutorial:dev-master

Finally, I’m able to use my class in project — Yea only User Class user.php :((

Your package will be under vendor/ directory like other packages from packagist.org.

<?php
	
require "vendor/autoload.php";

$user = new \Mtigdemir\Blog\User("muharrem" , "[email protected]");

echo $user->getUserName().'__'.$user->getEmail();

I’m able to use my User Class with namespace ,

I want to thank to my team-mate Aykut Aras for share with me all about this know-how..

Muharrem Tığdemir

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
PHP

PDFlib – TET PHP Install and Example

INSTALL PDFLib

I have Xampp Server on Windows your paths can be change depends on your server application.

Let’s download Latest Pdflib from this url.

  • If you are using Linux , OS X , Oracle , IBM etc.. visit the page and download latest.
  • Extract files..
  • You’ll see under this path ‘/bind/php/’   php-530_VS9 , php-540_VS9 , php-550_VS11  Pdflib support 5.3+
  • Select the correct php version library with your own. If you dont know
<?php 
   echo phpinfo();
?>
  •  Copy php_pdlib.dll to under your “php/ext”
  •  Open your php.ini your file and add “extension=php_pdlib.dll”
  • Restart your Apache and try phpinfo again..
  • You’ll see picture at the below
Pdflib install info
Pdflib Install Info

You can read this tutorial from original web site..

You’ll be able to add someting to exist’s pdf file draw images etc.. This is amazingly easy to use library..

What About TET ??

I’ve only used this library with Php but , this library supports all most everything 😀

Download Tet from this url which OS are you using it.. 

This won’t be the similar with PdfLib because there is no example in TET.

When you setup  it. Check your User folder  “C:\Users\PC\Documents\PDFlib\TET(Version)\bind\php”

  • From Now you can follow the similar steps with installing PdfLib
  • When you completed check your phpinfo() you’ll see this extesnsion at the below
Tet install
Tet install Info
<?php 
$p = new PDFlib();
$tet = new TET();
?>

 

 

 

Muharrem Tığdemir

Categories
Gearman PHP

Laravel4 Queue with Gearman

Hi all , this article about Laravel4 Queue component.

Before,  start reading this article please check these pages and get basic knowledge about it.

  1. Laravel 4.2 Queue Documentation
  2. What’s main idea of Queue system and why do we need this?
  3. What is Gearman Job Server?

If you are interested in Laravel 4 Queue component , you’ll have good options for Job Server like;

These are supported in Laravel Default Framework..

What should I pay attention while choosing  Job Server Platform?

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