Symfony 5 -İlk Sayfamız (Controller)

Furkan Hakan
2 min readJan 13, 2020

--

Bir önceki yazıda Symfony için gerekli şartları yerine getirip projemizi oluşturmuştuk. Bu yazıda ise projemize sayfa nasıl eklenir onu anlatacağım.

Başlamadan önce ide olarak PhpStorm kullanmanızı tavsiye ederim. Öğrenci iseniz okulun size verdiği mail adresi ile ücretsiz bir şekilde kullanabilirsiniz.

Terminalimizi açıp php bin/console make:controller ilksayfa komutunu çalıştırıyoruz.

ilksayfa’ yerine controller’ınıza vermek istediğiniz ismi yazın.

Komut çalıştıktan sonra 2 adet dosyamız oluşuyor. İlki templates klasörü altında ilksayfa klasörü. Bunun içinde bir index.html.twig adında bir twig dosyamız var.

ilksayfa\index.html.twig;

{% extends 'base.html.twig' %}

{% block title %}Hello IlksayfaController!{% endblock %}

{% block body %}
<style>
.example-wrapper { margin: 1em auto; max-width: 800px; width: 95%; font: 18px/1.5 sans-serif; }
.example-wrapper code { background: #F5F5F5; padding: 2px 6px; }
</style>

<div class="example-wrapper">
<h1>Hello {{ controller_name }}! ✅</h1>

This friendly message is coming from:
<ul>
<li>Your controller at <code><a href="{{ 'C:/AppServ/www/mediumcalisma/src/Controller/IlksayfaController.php'|file_link(0) }}">src/Controller/IlksayfaController.php</a></code></li>
<li>Your template at <code><a href="{{ 'C:/AppServ/www/mediumcalisma/templates/ilksayfa/index.html.twig'|file_link(0) }}">templates/ilksayfa/index.html.twig</a></code></li>
</ul>
</div>
{% endblock %}

Twig bir template engine dir. Template engine View katmanında çalışarak Controllerdan gelen verileri ilgili template’i kullanarak render eder. Daha fazla bilgi almak için google’dan araştırabilirsiniz.

İkincisi ise src\Controller altında ilksafyaController.php dosyası. Bu dosya ise bizim ilksayfa\index.html.twig dosyasını render eden php dosyamız.

src\Controller\IlksafyaController;

<?php

namespace App\Controller;

use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\Routing\Annotation\Route;

class IlksayfaController extends AbstractController
{
/**
*
@Route("/ilksayfa", name="ilksayfa")
*/
public function index()
{
return $this->render('ilksayfa/index.html.twig', [
'controller_name' => 'IlksayfaController',
]);
}
}

Komutu çalıştırınca yukarıdaki şekilde iki dosya oluştuğunu gördük.

Eskiden oluşturduğumuz sayfalara yol verirken config\routes.yaml dosyasına yol ataması yapardık. Fakat artık aynı php dosyası içerisinde

/**
*
@Route("/ilksayfa", name="ilksayfa")
*/

şeklinde yol ataması yapılıyor. Buna annotation deniyor. @ işaretinden sonra sınıfımızı belirtiyoruz.

Kodun en başına bakarsanız şu şekilde bir kod parçası görürsünüz.

use Symfony\Component\Routing\Annotation\Route;

Bu Annotation\Route sınıfını php dosyasına eklediğimiz anlamına geliyor. annotation da kullanacağımız sınıfı belirttikten sonra parametrelerini yazıyorum. Bizim annotationumuz 2 adet parametre almış. İlki web sitesindeki yolumuzu belirtiyor(/ilksayfa). İkincisi ise projede bu sayfayı çağıracağımız zaman kullanacağımız isimi belirtiyor. Route’un altında ise bir fonksiyon yazıyor. Bu fonksiyon ise web sitemizde belirtilen yola gittiğimizde çalışacak olan fonksiyon.

Fonksiyon içerisinde şöyle bir kod var;

return $this->render('ilksayfa/index.html.twig', [
'controller_name' => 'IlksayfaController',
]);

Bu kod ilksayfa/index.html.twig dosyasını render ediyor (Yani derliyor). Daha sonra ise virgül ile ayırarak 'contoller_name’ => ‘IlksayfaController’ şeklinde bir kod parçası var. Bu ise bildiğimiz atama işlemi. ‘controller_name’ değişkenine ‘IlksayfaController’ değeri atanıyor. Bu değişkeni twig dosyasında {{ … }} bu parantezler arasında yazabiliyoruz.

Bunu nasıl yaptığımızı diğer yazımda twigleri anlatırken daha detaylı yazacağım.

Tarayıcıdan \ilksayfa yoluna giderek oluşturduğumuz sayfayı görebilirsiniz. İsterseniz Route’de şöyle bir değişiklik yaparak açılış sayfası olarak ayarlayabiliriz.

/**
*
@Route("/", name="ilksayfa")
*/

--

--