2 min read

Laravel Autoloading Kullanımı

Laravel framework’ü kullanılan projelerde dışarıdan herhangi bir kütüphane yada sizin kendinize ait sınıflarınızı her sayfa yüklendiğinde dahil olmasını istiyorsanız Laravel’in Autoloading özelliğini kullanmanız gerekmektedir. Laravel, her sayfa yüklendiğinde projeye dahil edeceği kütüphaneleri, sınıfları projenin kök dizininde bulunan composer.json dosyasından alır ve autoloading işlemini gerçekleştirir.

Burada bir yanlış anlaşılma olmasın composer yapısı gereği içerisinde autoloading metotu bulundurur ve her yeni kütüphane yada sınıf eklendiğinde bu composer‘ü güncellemeniz gerekmektedir. Bu güncelleme sonucunda dahil edilecek sınıflar yada eksik olan paketler projeye indirilir.

Örneğe gelecek olursak bir Araba adında kütüphanemiz olsun ve bu kütüphanemiz app/lib dizinin altında yer alsın. Ortaya şöyle bir hiyerarşi çıkması lazım:

Project
	app
		config
		controller
		lib
			Araba
		.
		.
		.
	composer.json

Şimdi Araba kütüphanemizi oluşturalım. Araba dizinin altına ArabaInterface.php ve Araba.php adında iki php dosyası oluşturalım.

ArabaInterface.php:

<?php

namespace Araba;

interface ArabaInterface
{
	public function marka($marka);
	public function model($model,$yıl);
	public function fiyat($marka,$model);
}

Araba.php

<?php

namespace Araba;
class Araba implements ArabaInterface
{
	public function marka($marka)
	{

	}
	
	public function model($model,$yıl)
	{

	}
	
	public function fiyat($marka,$model)
	{
		
	}
}

Bu noktada dikkat edilmesi gerekilen nokta namespace‘dir. Kullanılan kütüphaneye ait namespace tanımlamaları yapılması gerekmektedir. Daha sonra kütüphanenin autoloading olması için composer’e tanıtmamız gerekiyor.

Composer.json:

{
	"name": "laravel/laravel",
	"description": "The Laravel Framework.",
	"keywords": ["framework", "laravel"],
	"license": "MIT",
	"require": {
		"laravel/framework": "4.2.*"
	},
	"autoload": {
		"classmap": [
			"app/commands",
			"app/controllers",
			"app/models",
			"app/database/migrations",
			"app/database/seeds",
			"app/tests/TestCase.php",
			"app/lib"
		]
	},
	"scripts": {
		"post-install-cmd": [
			"php artisan clear-compiled",
			"php artisan optimize"
		],
		"post-update-cmd": [
			"php artisan clear-compiled",
			"php artisan optimize"
		],
		"post-create-project-cmd": [
			"php artisan key:generate"
		]
	},
	"config": {
		"preferred-install": "dist"
	},
	"minimum-stability": "stable"
}

Autoload altında yer alan Classmap objesine kütüphanemizin bulunduğu yolu ekliyoruz. Yani app/lib dizinini ekliyoruz. Böylece bu klasör altına gelen tüm kütüphaneler otomatik olarak autoloading edilecektir.

Son olarak kütüphanelerin güncellenmesi ve autoloading metotuna sınıfın tanıtılması isin projenin kök dizininde aşağıdaki kodu terminalde çalıştırmanız gerekmektedir.

$ composer update

Artık Araba adlı sınıfımızı başlatıp kullanabiliriz.

<?php

// routes.php
Route::get('/', function()
{
    $araba = new Araba\Araba();

    return View::make('anasayfa');
});