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

Categories
PHP

Composer PHP Kullanımı

Merhaba Arkadaşlar ,

Bu yazımda “Composer” kullanımından bahsedeceğim.  Amaç olarak, geliştirilmiş bir projenin updatelerini sağlamak ve kurulumunu kolaylaştırmak olduğunu söyleyebiliriz. Örneğin basit bir framework geliştridik bu tabiki kendi kütüphaneniz bile olabilir. Şimdiye kadar kullandığınız bütün kütüphaneleri yoplayıp bir paket yapma imkanı sağlıyor ve en avantajlı yanı da  başka kütüpnalere bağımlı bir projeniz var ise 1 satır kod ile update yapmanızı sağlıyor.  Bana oldukça “Maven” i çağrıştırdı temel farklar dışında belirli standart oluşturmayı hedefleyen güzel bir opensource proje olmuş.  Sözü fazla uzatmadan kuruluma geçelim.

Not: yazının buradan sonrasını windows üzerine kurulum ile devam edeceğim linux kullanıcıları için kurulumu siteden takip edebilirsiniz.

 

Kuruluma başlamadan önce Apache PHP Server’a sahip olmalısınız.  Google da arama ile “XAMPP”  veya “WAMP” kurulumunu kolayca bulabilirsiniz. Sanırım artık Apache’miz hazır.

http://getcomposer.org/download/   –> Bu linkten Composer-setup.exe dosyasını indirin.

 

Kurulumu yaparken “php.exe” nin bulunduğu dosya yolunu bulun. Benim bilgisayarımda xampp kurulu  ve dosya yolum “C:\xampp\php\php.exe”

 

composer

 

Categories
Hatalar PHP

‘No input file specified’ .htaccess FCGId Hatası

Merhaba Arkadaşlar,

 

VPS Apache server üzerinde Codeigniter kurduktan sonra yazıda belirttiğim. “No input file specified” hatasını aldım. Çözümü aslında oldukça basit sadece biraz googlelamak gerekti. Bende çözümü paylaşmak  istedim. Sorunun aslında sebebi .htaccess dosyası ,

Benim .htaccess dosyam

 

RewriteEngine On
RewriteBase /local/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond $1 !^(templates|plugins)
RewriteRule ^(.*)$ index.php/$1 [L]

Eklemeniz gereken sadece index.php dosyasının sonuna ‘?’

Sonuç olarak

RewriteEngine On
  RewriteBase /baattin/
  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteCond $1 !^(templates|plugins)
  RewriteRule ^(.*)$ index.php?/$1 [L]

Peki hatanın sebebi neydi?  Ben serverda Virtualmin kullanıyorum.  Benim bildiğim bütün server arayüzleri default olarak ‘index.php’ vs türevlerini kullanıyor.  htaccess dosyasında index.php ye soru işareti tanımladığımızda klasör içindeki index.php ye RewriteEngine sonucunu göndererek işleme giriyor.

Yanlış olan halinde ise root işlemine göre index.php yi döndürüyor. Umarım sizede yardımcı olur..

 

Muharrem Tığdemir

Categories
Javascript PHP

Codeigniter Datatables Kullanımı Sakila DB Örnek Example

Merhaba Arkadaşlar  ,

Bu yazımda PHP Frameworklerinden CodeIgniter ile JS Datatables nasıl kullanacağımız hakkında bir örnek ile bilgi vereceğim.

Hiç bir kurulum gerektirmeden CodeIgniter Framework’ünü kullanabilirsiniz. Son sürümü indirmek için tıklayın. (localhost’unuzun dizinine kopyalayın.)

  • GNU Lisansı olan Datatables kütüphanesini buradan indirin ve codeigniter’ın ana dizine kopyalayın. (applications/libraries)
  • Örnek Database olarakta standart olan ‘sakila.db’ yi kullanacağım. buradan indirebilirsiniz. (sakila.sql)
  • Son olarakda Datatables Javascript Kütüphanesini buradan indirebilirsiniz.(js/jquery.dataTables.min.js)

 

CONTROLLER 

class Welcome extends CI_Controller {

    public function __construct() {
        parent::__construct();
        $this->load->library('datatables');
        $this->load->library('table');
        $this->load->database();   
    }

	public function index()
	{   
        $tmpl = array ( 'table_open'  => '<table id="table" border="1" cellpadding="2" cellspacing="1" class="table table-striped table-bordered">' );
        $this->table->set_template($tmpl); 

        $this->table->set_heading('Actor ID','Full Name ','Last Update' , 'Let Show It!!');

        $this->load->view('datatables_view');
	}

    public function ajax_pull()
    {
        $this->datatables->select('actor_id ,  fullname , last_update')
        ->from('actor');

        $this->datatables->where('actor_id > 100');
        $this->datatables->add_column('go', '<a href="javascript:alert(\'Actor ID :$1-- Actor Name : $2 \');">Go Go!! </a>', 'actor_id , fullname');
        $this->datatables->add_column('link', '<a href="#">Örnek Link : $1 </a>', 'site_url(actor_id)');
        echo $this->datatables->generate();
    }
}

Constructorda kullanılan kütüpnaleri config/autoload.php içine yazılarak çağırabilirsiniz.

Index fonksiyonunda tablomuzun header larını ayarlıyoruz .

Ajax_pull fonksyionu Datatables tarafından her değişiklikte Javascript Ajax sorgu gönderilecek. Buradaki kullanımları açıklayalım

Değerlerini istediğimiz tablonun kolanları

$this->datatables->select('actor_id ,  fullname , last_update')
        ->from('actor');

Kullanışlı bulduğum özellik ekstra Where bloğu ekleyebilirsiniz.

$this->datatables->where('actor_id > 100');

En kullanışlı özellik match replace ile Select ile gelen değerlerden yeni bir kolon oluşturabilirsiniz veya değiştirebilirsiniz.

$this->datatables->add_column('go', '<a href="javascript:alert(\'Actor ID :$1-- Actor Name : $2 \');">Go Go!! </a>', 'actor_id , fullname');

Önceden tanımlamış olduğunuz PHP fonksiyonlarını yeni kolon oluştururken kullanabilirsiniz. (site_url tanımlı bir codeIgniter fonksiyonudur).

$this->datatables->add_column('link', '<a href="#">Örnek Link : $1 </a>', 'site_url(actor_id)');

VIEW

      <script type="text/javascript">
        $(document).ready(function() {
	var oTable = $('#table').dataTable( {
	     "sWrapper": "dataTables_wrapper form-inline",
		"bProcessing": true,
		"bServerSide": true,
		"sAjaxSource": '<?php echo base_url(); ?>index.php/welcome/ajax_pull',
                //"bJQueryUI": true,
                "sPaginationType": "full_numbers",
                "iDisplayStart ":20,
                "oLanguage": {
            "sProcessing": "<img src='<?php echo base_url(); ?>assets/images/ajax-loader_dark.gif'>"
        },  
        "fnInitComplete": function() {
                //oTable.fnAdjustColumnSizing();
         },
                'fnServerData': function(sSource, aoData, fnCallback)
            {
              $.ajax
              ({
                'dataType': 'json',
                'type'    : 'POST',
                'url'     : sSource,
                'data'    : aoData,
                'success' : fnCallback
              });
            }
	} );
} );
</script>

View ayarlarında dikkat etmeniz gereken en önemli nokta elbette aJaxSource

"sAjaxSource": '<?php echo base_url(); ?>index.php/welcome/ajax_pull',

 

NOT : Template olarak Bootstrap kullandım. Tasarımdan çok anlamıyosanız ve  arayüzde  işleri hızlı çözmek istiyorsanız tavsiye ederim tabiki de kendi çözümünüzü üretebilrisiniz. Datatables template editlemek için buraya ,  bootstrap template içinde buraya bakabilrsiniz.

NOT  : Github’dan indirmiş olduğunuz kütüphane gerçekten hayat kurtarıyor. Çok dinamik ve neredeyse bütün taleplerinize cevap veerecek kadar da genişletilebilir.   Ayrıntılı fonksiyonların kullanımı için buraya bakabilirsiniz.

Github Contact Info : 

Yusuf Ozdemir <[email protected]>

Vincent Bambico <[email protected]>

 

 

Projenin son halini buradan indirebilirsiniz

Projenin demosunu görüntelemek için buraya bakabilirsiniz.

 

 

Muharrem Tığdemir