Laravel Controller’ını Laravel Dışından Çalıştırmak

Merhaba bu makalede laravel ile geliştirme yaparken işinize olukça yarayacağını düşündüğüm bir konudan bahsedeceğim.

Bazen laravel dışındaki bazı bileşenleri kullanırken bileşenin back-and tarafında kullanıcının üye olup olmadığını veya yetkisinin ne olduğunu öğrenmem gerekiyor. Bu durumlarda aşağıdaki adımları izleyerek kendinize ait bit kod oluşturabilirsiniz.

Bu işlemi gerçekleştirebilmek için 1 controller ve içerisinde 1 metod ve bunları dışarı açmak için bir route oluşturmak gerekiyor.

Route dosyamızın içerisine aşağıdaki veya sizin adını değiştirmeyi isteyeceğiniz şekilde bir tanımlama yapıyoruz.

Route::get('sonucual','[email protected]');

Şimdi sırada bu route için bir Controller ve içine işlem yapmak istediğimiz fonksiyonu ekliyoruz.

Ben ziyaretçinin üye olup olmadığını kontrol ettirdim ve buna göre bir sonuç döndürdüm. Siz istediğiniz kodlamayı yapabilirsiniz.

use Illuminate\Support\Facades\Auth; // eklemediyseniz controller'in en başına php etiketin'den sonra bu namespace'yi ekleyin


//controller'in içine işimize yarayan fonksiyonu koyuyoruz
function sonuc(){
    return Auth::check() ? 'uye':'ziyaretci';
}

Bu kodları ekledikten sonra taratıcınıza siteadi.com/sonucal yazdığınızda ekranda üye olduğunuz veya üye olmadığınız yazmalı.

Şimdi sırada bu fonksiyonu laravel dışından çağırmak var. Bunun için laravel projemizin public klasöründeki index.php dosyasının yapısını incelediğimizde laravel’in requestleri nasıl yakaladığını görüyoruz. Biz’de kendi request’imizi oluşturarak laravel içinde istediğimiz fonksiyonu çalıştırabiliriz.

default index.php şu veya benzer şekilde olacakdır

<?php
define('LARAVEL_START', microtime(true));

require __DIR__.'/../vendor/autoload.php';

$app = require_once __DIR__.'/../bootstrap/app.php';


$kernel = $app->make(Illuminate\Contracts\Http\Kernel::class);

$response = $kernel->handle(
    $request = Illuminate\Http\Request::capture()
);

$response->send();

$kernel->terminate($request, $response);

Öncelikle kodları açıklayalım require metodu ile otomatik class yükleyiciyi başlatıyor ve sonrasında laravel’in kernel’ini başlatıyor. Buraya kadar sabit kalıcak. Sonrasında bir request oluşturuyor ve bunu handle metodu ile işliyor. Burada request’i capture metodu ile tarayıcıdan alıyor, biz ise create metodu ile kendimize göre aşağıdaki gibi oluşturucaz ve sonrasında cevabı send metodu ile ekrana yazdırmak gerine getContent metodu ile değişkene atayıp controller’dan aldığımız sonucu istediğimiz şekilde kullanacağız.

<?php

function islemyap(){
    define('LARAVEL_START', microtime(true));

    require __DIR__.'/../vendor/autoload.php';

    $app = require_once __DIR__.'/../bootstrap/app.php';

    $kernel = $app->make(Illuminate\Contracts\Http\Kernel::class);

    $response = $kernel->handle(
        // burada capture fonksiyonu yerine create kullanarak kendi çalışmasını istediğimiz request'i yazıyoruz
        $request = Illuminate\Http\Request::create('/sonucual','GET',[],$_COOKIE)
    );
    
    //send fonksiyonu ile sonucu ekrana yazmak yerine getContent ile değişkene atıyoruz
    $sonuc = $response->getContent();
  
    $kernel->terminate($request, $response);

    return $sonuc;//sonucu döndürüyoruz
}

bu fonksiyondaki dosya yollarını projenize göre düzenleyerek çok rahat bir şekilde laravel de istediğiniz controller’i dışarıdan çalıştırarak sayfayı açan kullanıcının üye olup olmadığını öğrenebilirsiniz. Örneğin ben kcfinder’de kullanıcının üye bilgilerini almak için kullanmıştım.Kcfinder kendi php config dosyasına sahip ve laravel içinden değilde ayrı bir sayfa üzerinden çalışıyor.

Eğer bu konuda daha fazla şey öğrenmek isterseniz örnekteki Request sınıfını incelemenizi öneririm.

Benim çok işime yaradı umarım sizin de yarar.

Görüşmek üzere.

C# Dosya Oluşturma, Okuma, Yazma Örneği

string fileName = @"C:\Temp\Mahesh.txt";    
    
try    
{    
    // Check if file already exists. If yes, delete it.     
    if (File.Exists(fileName))    
    {    
        File.Delete(fileName);    
    }    
    
    // Create a new file     
    using (FileStream fs = File.Create(fileName))     
    {    
        // Add some text to file    
        Byte[] title = new UTF8Encoding(true).GetBytes("New Text File");    
        fs.Write(title, 0, title.Length);    
        byte[] author = new UTF8Encoding(true).GetBytes("Mahesh Chand");    
        fs.Write(author, 0, author.Length);    
    }    
    
    // Open the stream and read it back.    
    using (StreamReader sr = File.OpenText(fileName))    
    {    
        string s = "";    
        while ((s = sr.ReadLine()) != null)    
        {    
            Console.WriteLine(s);    
        }    
    }    
}    
catch (Exception Ex)    
{    
    Console.WriteLine(Ex.ToString());    
}