Yii2 ile Nasıl Uygulama Yazılır : Genel Bakış
Russian (Pусский) translation by Michael Orlov (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:
curl -s http://getcomposer.org/installer | php 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:
cd ~/Sites composer global require "fxp/composer-asset-plugin:1.0.0-beta2" 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.
cd /Applications/MAMP/htdocs 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.
<?php // comment out the following two lines when deployed to production defined('YII_DEBUG') or define('YII_DEBUG', true); defined('YII_ENV') or define('YII_ENV', 'dev'); require(__DIR__ . '/../vendor/autoload.php'); require(__DIR__ . '/../vendor/yiisoft/yii2/Yii.php'); $config = require(__DIR__ . '/../config/web.php'); (new yii\web\Application($config))->run();
Varsayılan olarak, /controllers/SiteController.php
dosyasındaki index metodu şöyledir:
public function actionIndex() { return $this->render('index'); }
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:
<div class="container"> <?= Breadcrumbs::widget([ 'links' => isset($this->params['breadcrumbs']) ? $this->params['breadcrumbs'] : [], ]) ?> <?= $content ?> </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:
'components' => [ //... 'urlManager' => [ 'showScriptName' => false, 'enablePrettyUrl' => true ], //... 'request' => [
Sonra, index.php
dosyasının yer aldığı /web
dizini altında .htaccess
isminde bir dosya oluşturun
RewriteEngine on # If a directory or a file exists, use it directly RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d # Otherwise forward it to index.php 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:
public function actionSay($target = 'World') { return $this->render('say', ['target' => $target]); }
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.
<?php use yii\helpers\Html; ?> <h1>Hello <?= Html::encode($target) ?></h1> <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).
cd ~/Sites/hello git init git commit -m "first commit of hello world for yii2" git remote add origin git@github.com:youraccount/hello.git 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.
yourdomain.com A 192.161.234.17
Ardından, IP adresi veya alan adı üzerinden sunucunuza SSH yardımıyla giriş yapın:
ssh root@yourserver.com
Sunucu güncelleştirmelerini alın, Git hizmetini yükleyin, Apache mod_rewrite
ve PHP mcrypt
özelliklerini aktif edin:
sudo apt-get update sudo apt-get upgrade sudo a2enmod rewrite 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
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.
adduser github addgroup www adduser github www adduser www-data www chown -R :www /var/www chmod +s -R /var/www 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:
su github ssh-keygen -t rsa -C "yourgithubaccount@youremail.com" exit 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:
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 dosyası oluşturun:
nano /etc/apache2/sites-available/hello.conf
Alan adınıza (domain) uygun bu yapılandırmayı özelleştirin:
<VirtualHost *:80> ServerName yourdomain.com # Set document root to be "basic/web" DocumentRoot "/var/www/hello/web" <Directory "/var/www/hello/web"> # use mod_rewrite for pretty URL support RewriteEngine on # If a directory or a file exists, use the request directly RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d # Otherwise forward the request to index.php RewriteRule . index.php </Directory> </VirtualHost>
Sitenizi aktif edin:
a2ensite hello.conf a2dissite 000-default.conf 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.
Konuyla İlgili Diğer Bağlantılar


