Advertisement
  1. Code
  2. Yii

Yii2 ile Nasıl Uygulama Yazılır : Genel Bakış

Scroll to top
Read Time: 8 min
This post is part of a series called How to Program With Yii2.
How to Program With Yii2: Exploring MVC, Forms and Layouts

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

Final product imageFinal product imageFinal product image
What You'll Be Creating

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

Yii2 Newly Installed Basic Application TemplateYii2 Newly Installed Basic Application TemplateYii2 Newly Installed Basic Application Template

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:

Hello Tuts ReadersHello Tuts ReadersHello Tuts Readers

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:

Create a New Repository at GithubCreate a New Repository at GithubCreate a New Repository at Github

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:

Your Github KeyYour Github KeyYour Github Key

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

Git CloneGit CloneGit Clone

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

Production Server Hello World ApplicationProduction Server Hello World ApplicationProduction Server Hello World Application

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

Advertisement
Did you find this post useful?
Want a weekly email summary?
Subscribe below and we’ll send you a weekly email summary of all new Code tutorials. Never miss out on learning about the next big thing.
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.