() translation by (you can also view the original English article)



"Yii de ne?" diye soruyorsan, Yii' nin faydalarını ve Yii 2.0 sürümüne ait yeniliklere genel bir bakışı içeren 12 Ekim 2014 tarihli Yii Framework'e Giriş eğitimimi gözden geçirmeni tavsiye ederim.
Bu eğitim, uygulama geliştirme ortamınızı kurmayı, Yii 2.0 sürümünü yüklemeyi, basit bir Merhaba Dünya uygulaması oluşturmayı, uygulamanızı barındıracağınız sunucu ortamını ayarlamayı ve kodunuzu Github üzerinden nasıl dağıtacağınıza dair yol gösteren bilgiler içerir.
Yii 2.0 Sürümünü Yükleme
Belgeler
Ayrıntılı yükleme talimatlarına buradan erişebilirsiniz. Ben sizlere, tipik bir Mac OS X geliştirme ortamının kurulumunu anlatacağım. Yii 2.0' ın eksiksiz bir rehberi (PDF formatı) ve tüm detayları kapsayan bir Sınıf Referansı vardır.
Composer' ı Yükleme
Yii2' de PHP için popüler bağımlılık yöneticisi olan Composer gereklidir. Bilgisayarınızda Composer yüklü değilse, aşağıdaki işlemleri komut satırından yapın:
1 |
curl -s http://getcomposer.org/installer | php
|
2 |
mv composer.phar /usr/local/bin/composer
|
Yii2' yi Yükleme
Ardından, Yii2' yi kurmak için Composer' ı kullanın. Yükleme işlemi kurulum için sizden Github kimlik bilgilerinizi talep eder; yok ise Github üzerinden bir tane oluşturun.
Bu ilk projeyi "hello" olarak adlandıralım:
1 |
cd ~/Sites
|
2 |
composer global require "fxp/composer-asset-plugin:1.0.0-beta2"
|
3 |
composer create-project --prefer-dist yiisoft/yii2-app-basic hello
|
Yii2, geliştirdiğiniz uygulamanın türüne bağlı olarak iki farklı yükleme şablonu sunar: temel ve gelişmiş. Bu eğitimde, varsayılan olarak yüklenen temel uygulama şablonunu kullanacağız. Gelişmiş uygulama şablonu, bir WordPress bloğunun yönetim paneli ve arka plan görevlerine benzer, ileri düzey bir web uygulaması için gerekli olan sunucu tarafını, istemci tarafını ve erişim noktasını sunar.
Uygulama Geliştirme Ortamının Kurulumu
Ben OS X üzerinde, LAMP (Linux, Apache, MySQL, PHP) tipinde bir uygulama geliştirme ortamı için, ücretsiz ve açık kaynak kodlu MAMP uygulamasını kullanıyorum. MAMP' ın çalışır durumda ve web sunucusu ile veritabanının aktif olduğundan emin olun. Ardından, Sites
uygulama dizininden MAMP' a bir sembolik link (symlink) oluşturun.
1 |
cd /Applications/MAMP/htdocs
|
2 |
ln -s ~/Sites/hello/ /Applications/MAMP/htdocs/hello |
Sonra, tarayıcınızdan http://localhost:8888/hello/web adresini ziyaret edin. Artık ekranda Yii2' nin Bootstrap 3.x tabanlı temel uygulama şablonunu görmelisiniz.
Bu sayfa büyük olasılıkla, cihaz çözünürlüklerine duyarlı açık kaynak CSS frameworkü Bootstrap'ın son sürümünü ön tanımlı olarak desteklemeyen Yii 1.1 geliştiricilerini heyecanlandıracaktır.
Yii Uygulama Mimarisi
Yii Framework' ünün en önemli özelliklerinden biri de PHP için Model View Controller yapısını sunmasıdır. Bu özellik, daha iyi yapılandırılmış bir uygulama ortamı ve daha anlaşılır kod sunmanın yanısıra, PHP' de yapılması zor olan güvenlik ve otomatik kod oluşturma gibi birtakım şeyleri basitleştirmektedir. Ayrıca, kodumuzu yeniden kullanılabilir ve daha kolay genişletilebilir hale getirir.
Bir Yii uygulamasında, tüm trafiği tek bir dosya üzerinden yönlendiririz : /web/index.php
. Bu yerleşik dosya Yii' yi ve tüm bağımlılıkları yükler ardından da uygulamanızı çalıştırır.
1 |
<?php
|
2 |
|
3 |
// comment out the following two lines when deployed to production
|
4 |
defined('YII_DEBUG') or define('YII_DEBUG', true); |
5 |
defined('YII_ENV') or define('YII_ENV', 'dev'); |
6 |
|
7 |
require(__DIR__ . '/../vendor/autoload.php'); |
8 |
require(__DIR__ . '/../vendor/yiisoft/yii2/Yii.php'); |
9 |
|
10 |
$config = require(__DIR__ . '/../config/web.php'); |
11 |
|
12 |
(new yii\web\Application($config))->run(); |
Varsayılan olarak, /controllers/SiteController.php
dosyasındaki index metodu şöyledir:
1 |
public function actionIndex() |
2 |
{
|
3 |
return $this->render('index'); |
4 |
}
|
Genel olarak, controller' lar metodlarla dolu olurlar fakat yukardaki gibi asgari düzeyde koddan da oluşurlar. Controller' lar erişimi yönetir, model' leri kullanır ve görünümü oluşturur. İş mantığının büyük kısmı modellere yerleştirilmeli, görünümler de nispeten basit şablon işlemlerini yapmalıdır.
Varsayılan olarak Yii, /views/site/index.php
dosyasındaki index görünümü için /views/layouts/main.php
dosyasını kullanır. main.php
tasarım planı (layout), araç çubuğu, içerik alanı gibi sayfanın HTML ve CSS yapısını sunar. main.php
içerisinde, içeriğe kısa ve öz bir çağrı görürsünüz:
1 |
<div class="container"> |
2 |
<?= Breadcrumbs::widget([ |
3 |
'links' => isset($this->params['breadcrumbs']) ? $this->params['breadcrumbs'] : [], |
4 |
]) ?> |
5 |
<?= $content ?> |
6 |
</div>
|
Şu anda HTML kodundan ibaret yukarda gördüğünüz Congratulations! sayfasındaki $content
değişkeni, /views/site/index.php
tarafından oluşturulan kod ile yer değiştirir.
Hello World Uygulaması!
Pretty URL Aktivasyonu
İlk olarak, Yii2' nin pretty URL (mantıklı ve bağlı olduğu sayfayı tanımlayıcı) mantığını mod_rewrite
yardımıyla aktif edelim. Yii uygulamanızın ana sayfasındaki About menüsüne tıkladığınızda, tarayıcınızın adres satırındaki URL http://localhost:8888/hello/web/index.php?r=site%2Fabout şeklinde olacaktır. Bunu http://localhost:8888/hello/web/site/about olarak değiştireceğiz.
config
alt dizini ilerde yapacağımız veritabanı ayarlarının yanısıra, web ve konsol uygulamalarınız için ortam yapılandırmalarını da içerir. Geçerli web uygulamanıza urlManager
parametresini eklemek için /config/web.php
dosyasını editörünüzde açın. Aşağıdaki urlManager
kısmını components dizisinin içine ekleyin:
1 |
'components' => [ |
2 |
//...
|
3 |
'urlManager' => [ |
4 |
'showScriptName' => false, |
5 |
'enablePrettyUrl' => true |
6 |
],
|
7 |
//...
|
8 |
'request' => [ |
Sonra, index.php
dosyasının yer aldığı /web
dizini altında .htaccess
isminde bir dosya oluşturun
1 |
RewriteEngine on |
2 |
|
3 |
# If a directory or a file exists, use it directly
|
4 |
RewriteCond %{REQUEST_FILENAME} !-f |
5 |
RewriteCond %{REQUEST_FILENAME} !-d |
6 |
# Otherwise forward it to index.php
|
7 |
RewriteRule . index.php |
MAMP üzerinde Apache mod_rewrite
özelliğinin aktif olduğundan emin olun; değilse şu Stack Overflow rehberine göz atın.
Tarayıcınızdan http://localhost:8888/hello/web/site/about adresini ziyaret edin.Yii uygulamanızın About sayfasını görebilmeli ve diğer menü seçeneklerine tıkladığınızda mantıklı ve bağlı olduğu sayfayı tanımlayan (Pretty) URL' ler görmelisiniz.
Hello World Diyen Uygulama! Aksiyon
Sıradaki adım, controller' a Say
adında istediğimiz mesajı tekrarlayan bir eylem eklemek. Aşağıdaki eylemi /controllers/SiteController.php
dosyasına ekleyin:
1 |
public function actionSay($target = 'World') |
2 |
{ |
3 |
return $this->render('say', ['target' => $target]); |
4 |
} |
5 |
Bu kod bloğu, ekrana yansıtılacak target adlı bir URL parametresi arayacak. Target parametresi yoksa eğer, tekrar "World" diyecek. Yii' de eylemler, "action" ön eki ve ardından metod adının yer aldığı bir yöntemle tanımlanır. SiteController
sınıfında bu public function actionSay
metodudur. Yii aksiyon metodlarını diğer metodlardan ayırmak için "action" ön ekini kullanır.
Render metodunun varsayılan davranışı views/ControllerID/ViewName.php
şeklinde bir dosyanın var olup olmadığına bakmaktır. Bu yüzden, /views/site/
dizininde say.php
isimli bir görünüm dosyası oluşturun.
1 |
<?php
|
2 |
use yii\helpers\Html; |
3 |
?>
|
4 |
<h1>Hello <?= Html::encode($target) ?></h1> |
5 |
<p>Welcome to your Yii2 demonstration application.</p> |
Bu görünüm şablonu h1
HTML etiketini Hello ve onu takip eden target değişkeni ile yineler. Not: Kötü amaçlı kod saldırısından korunmak adına URL parametresindeki target değişkenini şifreliyoruz (encode işlemi).
http://localhost:8888/hello/web/site/say?target=Tuts%20Readers adresini ziyaret ederseniz ekranda şunu görebilmelisiniz:



Burada anlatılan Yii2' nin Model View Controller yapısına ait çok basit bir örnektir. Daha kapsamlı bir Hello World ve Yii2 MVC sunumuna buradan erişebilirsiniz.
Artık uygulamamızın Github ayarlarını yapıp canlı ortamın yer aldığı sunucuya gönderelim.
Uzak Sunucu Ortamının Kurulumu
Temel Yii uygulaması sorunsuz bir şekilde Apache veya Nginx ile çalışır, ben Apache üzerine bilgi vereceğim, Nginx yönergelerini buradan bulabilirsiniz.
Github' da Repository Oluşturma
Bir Yii uygulamasına başladığımda birde Github repository' si oluştururum:



Not: Başlangıçta siteyi uzak sunucuda oluşturup yerel makinaya indirmek yerine Yii2 .gitignore dosyasını Github' tan yerel ~/Sites/hello/.gitignore dosyasına kopyalayıp yapıştırmak daha kolay bir yöntemdir fakat her iki yaklaşımda kabul edilir.
Ben repository oluştururken çoğunlukla Github' ın Mac OS X uygulamasını kullanıyorum fakat dilerseniz komut satırını da kullanabilirsiniz. Aşağıda, komut satırından var olan bir projeyi Github' a nasıl eklendiğine dair yönergeleri takip ediyorum ("youraccount" yazan kısmı kendi Github kullanıcı bilginizle değiştirin).
1 |
cd ~/Sites/hello |
2 |
git init |
3 |
git commit -m "first commit of hello world for yii2" |
4 |
git remote add origin git@github.com:youraccount/hello.git |
5 |
git push -u origin master |
Sunucunuzda bir Apache Sitesi Yapılandırma
Halihazırda bir LAMP veya bulut sunucunuz yoksa başlangıç olarak genel Ubuntu kurulumunun anlatıldığı belgeme göz atabilirsiniz. IP adresinizi aldıktan sonra, DNS kayıtlarınızı, sunucunuzun A tipi erişim kaydını içerecek şekilde değiştirin.
1 |
yourdomain.com A 192.161.234.17 |
Ardından, IP adresi veya alan adı üzerinden sunucunuza SSH yardımıyla giriş yapın:
1 |
ssh root@yourserver.com |
Sunucu güncelleştirmelerini alın, Git hizmetini yükleyin, Apache mod_rewrite
ve PHP mcrypt
özelliklerini aktif edin:
1 |
sudo apt-get update
|
2 |
sudo apt-get upgrade
|
3 |
sudo a2enmod rewrite
|
4 |
php5enmod mcrypt |
Sunucuda Github Erişimini Yapılandırma
Şimdi, Apache' nin yayınlayacağı sitenin kodunu Github' tan çekmeye yönelik bir kullanıcı oluşturacağız. Sunucunuza önce git' i yükleyin
1 |
sudo apt-get install git |
Ardından, www isminde bir grup oluşturup www-data ile Github kullanıcılarını bu gruba dahil edip web dizinlerinin yetkilerini verelim.
1 |
adduser github |
2 |
addgroup www |
3 |
adduser github www |
4 |
adduser www-data www |
5 |
chown -R :www /var/www |
6 |
chmod +s -R /var/www |
7 |
chmod -vR g+w /var/www/ |
Sonraki adım sunucu ile Github kodlarını senkronize etmede kullanılan kullanıcı için bir RSA anahtarı oluşturmak:
1 |
su github |
2 |
ssh-keygen -t rsa -C "yourgithubaccount@youremail.com" |
3 |
exit
|
4 |
cat /home/github/.ssh/id_rsa.pub
|
Github.com' a kopyalayıp yapıştırmanız gereken şöyle birşey göreceksiniz:



Github' ta oluşturduğunuz repository' nin Settings (Ayarlar) sayfasındaki "Deploy keys" sekmesine tıklayın ve kopyaladığınız anahtarı buraya yapıştırın:



Ekledikten sonra burada listelendiğini göreceksiniz:



Son olarak, oluşturduğunuz repository' nin bir kopyasını makinanıza çekin:
1 |
git clone git@github.com:youraccount/hello.git /var/www/hello |
Github erişimini düzgün bir şekilde yapılandırdıysanız, yukardaki komutun çıktısı şöyle görünmeli (değilse buraya göz atın):



Bu eğitim serisiyle, kodunuzu, yerel makinenizde geliştirip güncellemeleri Github' a gönderip uzaktaki sunucunuzla git pull aracılığıyla eşitleyebileceksiniz. Bu, kodunuzu, manuel yada bir tar (sıkıştırma tekniği) dosyası olarak indirip senkronize etmekten daha kolaydır ve bu eğitim serisinin devamındaki modüller de daha da kullanışlı hale gelecektir.
Apache Site Yapılandırmasını Oluşturma
Apache site yapılandırmasına ait dosyayı oluşturun:
1 |
nano /etc/apache2/sites-available/hello.conf |
Aşağıdaki yapılandırmayı alan adınıza (domain) göre özelleştirin:
1 |
<VirtualHost *:80>
|
2 |
ServerName yourdomain.com |
3 |
# Set document root to be "basic/web"
|
4 |
DocumentRoot "/var/www/hello/web"
|
5 |
<Directory "/var/www/hello/web"> |
6 |
# use mod_rewrite for pretty URL support
|
7 |
RewriteEngine on |
8 |
# If a directory or a file exists, use the request directly
|
9 |
RewriteCond %{REQUEST_FILENAME} !-f |
10 |
RewriteCond %{REQUEST_FILENAME} !-d |
11 |
# Otherwise forward the request to index.php
|
12 |
RewriteRule . index.php
|
13 |
</Directory> |
14 |
</VirtualHost> |
Sitenizi aktif edin:
1 |
a2ensite hello.conf |
2 |
a2dissite 000-default.conf |
3 |
service apache2 reload |
Ve http://yourdomain.com/site/say?target=World! adresini ziyaret edin. Artık uygulamanıza ait sayfanın altında Yii2 hata ayıklama araç çubuğu yer almamalı:



Tebrikler! Artık Yii2' nin daha gelişmiş özelliklerini keşfetmeye hazırız. Bir sonraki Yii2 eğitiminden haberdar olmak istiyorsanız, @tutspluscode veya @reifman twitter hesaplarını yada yazar sayfamı takip edebilirsiniz. Yazar sayfamda bu seriye ait tüm eğitimler yayınlanır yayınlanmaz yer alıcak.
Bu eğitimle ilgili sorunuz veya düzeltme talebiniz olursa lütfen bunları yorum alanında belirtiniz.