Dışsal Kod Ekleme (Snippet Injection)
Kaynak kod üreteçleri tarafından üretilen kod içine bazı durumlarda özel kodlar eklemek isteyebilirsiniz. Ya da üreteçler tarafından üretilen bir kod bloğunu etkisiz hale getirerek kendi kod bloğunuzu kaynak koda eklemek isteyebilirsiniz. Bu gibi durumlarda, Dışsal Kod Ekleme (Snippet Injection) yöntemi pratik bir çözüm sunmaktadır.
Pyronome kaynak kod üreteçleri tarafından kaynak kod üretim sürecinin hemen ardından otomatik olarak Dışsal Kod Ekleme (Snippet Injection) işlemi çalıştırılmakta; gerekli yerlere dışsal kodlar eklenmektedir.
Dışsal kod ekleme sistemi iki bölümden oluşur:
- Dışsal Kod Belirteci
snippets
Dizin Yapısı
Dışsal Kod Belirteci, kalıp şablonları ya da statik dosyalar içine yerleştirilen {{@snippet:
ile başlayan belirteçlerdir. Bu belirteçlerin bulunduğu alanlara, dizin yapısı göz önünde bulundurularak, kod ekleme işlemi yapılmaktadır. snippets
Dizin Yapısı, Dışsal Kod Belirteci ile belirtilen bölümlere kaynak kodun nasıl ekleneceğini belirleyen özel isimlendirmeye ve içeriğe sahip dosya ve dizinlerdir.
Dışsal Kod Belirteci
Dışsal kodun, kaynak kod dosyası içinde tam olarak nereye ekleneceğini dışsal kod belirteçleri belirlemektedir. Üretilen dosyalar ya da statik dosyalar içerisine bu dosyayı oluşturan kullanıcılar tarafından dışsal kod eklenebilecek bölümler belirlenir ve bu bölümlere {{@snippet:
ile başlayan belirteçler eklenir. Böylelikle kaynak kod üretim işlemi sonrasında çalıştırılan dışsal kod ekleme işlemi hangi kodun nereye ekleneceğini bulup; kod ekleme işlemini gerçekleştirir.
Örneğin;
<?php
namespace App\Providers;
use Illuminate\Foundation\Support\Providers\RouteServiceProvider as ServiceProvider;
use Illuminate\Support\Facades\Route;
use App\Http\Middleware\HTMLDBMiddleware;
use App\Http\Middleware\AdminLTEMiddleware;
class RouteServiceProvider extends ServiceProvider
{
/* {{@snippet:begin_methods}} */
/**
* This namespace is applied to your controller routes.
*
* In addition, it is set as the URL generator's root namespace.
*
* @var string
*/
protected $namespace = 'App\Http\Controllers';
Yukarıdaki kaynak kod içinde, dışsal kod belirteci, {{@snippet:begin_methods}}
şeklinde kullanılmıştır. Burada begin_methods
dışsal kod bloğunun adını belirtmektedir.
Not:
Kaynak kod dosyasının türüne göre, dışsal kod belirtecinin başına ve/veya sonuna yorum bloğu açma/kapama karakterleri eklenebilir. Dışsal kaynak kod ekleme sürecinde, dışsal kod belirteci geçen satır TAMAMEN SİLİNİR, dışsal kod bloğu bu satıra yazılır.
snippets
Dizin Yapısı
Pyronome kaynak kod üreteçleri tarafından üretilen kaynak kodun aşağıdakine benzer bir dizin yapısı bulunmaktadır:
├── pyronome
├── snippets *
└── source
Oluşturulan kaynak kod içindeki snippets
dizininin içinde de system
ve user
isimli iki dizin daha bulunmaktadır:
├── pyronome ├── snippets │ ├── system * │ └── user * └── source
snippets
dizininin içinde bulunan system
dizini bir proje için kullanılacak kalıplar tarafından kullanılmak üzere oluşturulmuştur. user
dizini de proje kullanıcısı tarafından eklenecek dışsal kodlar için oluşturulmuştur. snippets
dizini içinde öncelikle system
dizini içindeki kaynak kodlar; daha sonra da user
dizini içindeki kaynak kodlar eklenir.
Örneğin; Aşağıdaki kaynak kod dosyasının RouteServiceProvider.php
dosya adıyla source/app/Providers/
dizini içinde yer aldığını varsayalım.
<?php
namespace App\Providers;
use Illuminate\Foundation\Support\Providers\RouteServiceProvider as ServiceProvider;
use Illuminate\Support\Facades\Route;
use App\Http\Middleware\HTMLDBMiddleware;
use App\Http\Middleware\AdminLTEMiddleware;
class RouteServiceProvider extends ServiceProvider
{
/* {{@snippet:begin_methods}} */
/**
* This namespace is applied to your controller routes.
*
* In addition, it is set as the URL generator's root namespace.
*
* @var string
*/
protected $namespace = 'App\Http\Controllers';
Yukarıdaki RouteServiceProvider.php
dosyasının içinde bulunan /* {{@snippet:begin_methods}} */
kod satırı yerine aşağıdaki yorum satırını eklemek istersek:
/* THIS COMMENT ADDED USING SNIPPET INJECTION */
Aşağıdaki user
dizini içine ilk olarak source/app/Providers/
dizinini daha sonra da bu dizin içine RouteServiceProvider.php
DİZİNİNİ oluşturmamız gerekmektedir.
├── pyronome
├── snippets
│ ├── system
│ └── user *
└── source
Dizinler oluşturulduktan sonra aşağıdaki gibi bir görüntüye sahip olur.
├── pyronome ├── snippets │ ├── system │ └── user │ └── source │ └── app │ └── Providers │ └── RouteServiceProvider.php └── source
Oluşturulan RouteServiceProvider.php
dizini içine dışsal kod belirtecinin adı olan begin_methods
isimli bir dizin oluşturulmalıdır. Bu dizin içine de örneğin 0000.php
isimli bir dosya oluşturulmalı ve yukarıda belirtilen yorum satırları oluşturulan dosyaya eklenmelidir.
├── pyronome ├── snippets │ ├── system │ └── user │ └── source │ └── app │ └── Providers │ └── RouteServiceProvider.php │ └── begin_methods │ └── 0000.php └── source
Yukarıda oluşturulan 0000.php
isimli dosyanın içine aşağıdaki yorum satırları eklenmelidir.
/* THIS COMMENT ADDED USING SNIPPET INJECTION */
Kaynak kod üretim işlemi sonrasında çalıştırılan dışsal kod ekleme işlemi sonucunda source/app/Providers/RouteServiceProvider.php
dosya içeriği aşağıdaki şekilde güncellenecektir.
<?php
namespace App\Providers;
use Illuminate\Foundation\Support\Providers\RouteServiceProvider as ServiceProvider;
use Illuminate\Support\Facades\Route;
use App\Http\Middleware\HTMLDBMiddleware;
use App\Http\Middleware\AdminLTEMiddleware;
class RouteServiceProvider extends ServiceProvider
{
/* THIS COMMENT ADDED USING SNIPPET INJECTION */
/**
* This namespace is applied to your controller routes.
*
* In addition, it is set as the URL generator's root namespace.
*
* @var string
*/
protected $namespace = 'App\Http\Controllers';
Burada snippets/user/source/app/Providers/RouteServiceProvider.php/begin_methods
dizini içinde istediğimiz isimle dosya oluşturabiliriz. Oluşturulan dosya isimleri doğal sıralamaya göre artan sırada sıralanarak işlenecektir.
snippets
dizinleri içine birçok farklı kaynaktan dosya eklenebileceği için, eklenen dosyaların düzenlenmesi için bazı yardımcı dosyalar eklenebilmektedir.
Yardımcı Dosya | Açıklama |
---|---|
__glue__ | İlgili snippets dizini içinde bulunan farklı dosyaları birleştirmek için kullanılan örneğin , ya da ; vb. birleştirme karakterlerini içeren dosyadır. Bu dosya içeriğinin herhangi bir uzunluk ya da karakter sayısı sınırı bulunmamaktadır. snippets dizini içinde hiçbir dosya bulunmazsa; bu dosya görmezden gelinir. |
__header__ | İlgili snippets dizini içinde bulunan farklı dosyaları birleştirirken en başa yazılacak içeriği içeren dosyadır. Bütün dosyalar birleştirildikten sonra en başa __header__ dosya içeriği eklenmektedir. snippets dizini içinde hiçbir dosya bulunmazsa; bu dosya görmezden gelinir. |
__footer__ | İlgili snippets dizini içinde bulunan farklı dosyaları birleştirirken en sona yazılacak içeriği içeren dosyadır. Bütün dosyalar birleştirildikten sonra en sona __footer__ dosya içeriği eklenmektedir. snippets dizini içinde hiçbir dosya bulunmazsa; bu dosya görmezden gelinir. |
__default__ | İlgili snippets dizini içinde hiçbir dosya bulunmazsa varsayılan olarak eklenecek içeriği içeren dosyadır. snippets dizini içinde dosya bulunuyorsa; bu dosya görmezden gelinir. |
Örneğin; snippets/user/source/app/Providers/RouteServiceProvider.php/begin_methods
dizini içine 0000.php
dosyasını eklediğimiz gibi 0010.php
ve 0020.php
isimli iki tane daha dosya eklemek istiyoruz.
Aşağıdaki şekilde 0010.php
isimli dosyayı ekleyelim:
├── pyronome ├── snippets │ ├── system │ └── user │ └── source │ └── app │ └── Providers │ └── RouteServiceProvider.php │ └── begin_methods │ ├── 0000.php │ └── 0010.php └── source
0010.php
dosyası içine aşağıdaki yorum satırlarını ekleyelim:
/* THIS COMMENT ADDED USING SNIPPET INJECTION FILE 0010.php */
Aynı şekilde, 0020.php
isimli dosyayı ekleyelim:
├── pyronome ├── snippets │ ├── system │ └── user │ └── source │ └── app │ └── Providers │ └── RouteServiceProvider.php │ └── begin_methods │ ├── 0000.php │ ├── 0010.php │ └── 0020.php └── source
0020.php
dosyası içine aşağıdaki yorum satırlarını ekleyelim:
/* THIS COMMENT ADDED USING SNIPPET INJECTION FILE 0020.php */
__header__
, __footer__
ve __glue__
dosyalarını da aşağıdaki şekilde ekleyelim:
├── pyronome ├── snippets │ ├── system │ └── user │ └── source │ └── app │ └── Providers │ └── RouteServiceProvider.php │ └── begin_methods │ ├── __footer__ │ ├── __glue__ │ ├── __header__ │ ├── 0000.php │ ├── 0010.php │ └── 0020.php └── source
__header__
dosya içeriğine aşağıdaki satırları ekleyelim:
/* --- HEADER --- */
__footer__
dosya içeriğine aşağıdaki satırları ekleyelim:
/* --- FOOTER --- */
__glue__
dosya içeriğine aşağıdaki satırları ekleyelim:
/* --- GLUE --- */
Kaynak kod üretim işlemi sonrasında çalıştırılan dışsal kod ekleme işlemi sonucunda source/app/Providers/RouteServiceProvider.php
dosya içeriği aşağıdaki şekilde güncellenecektir.
<?php
namespace App\Providers;
use Illuminate\Foundation\Support\Providers\RouteServiceProvider as ServiceProvider;
use Illuminate\Support\Facades\Route;
use App\Http\Middleware\HTMLDBMiddleware;
use App\Http\Middleware\AdminLTEMiddleware;
class RouteServiceProvider extends ServiceProvider
{
/* --- HEADER --- */
/* THIS COMMENT ADDED USING SNIPPET INJECTION */
/* --- GLUE --- */
/* THIS COMMENT ADDED USING SNIPPET INJECTION FILE 0010.php */
/* --- GLUE --- */
/* THIS COMMENT ADDED USING SNIPPET INJECTION FILE 0020.php */
/* --- FOOTER --- */
/**
* This namespace is applied to your controller routes.
*
* In addition, it is set as the URL generator's root namespace.
*
* @var string
*/
protected $namespace = 'App\Http\Controllers';