Php ile Komut Satırından Dosya Oluşturma

Kodla Büyü

soncizgi

Aktif Üye
Mesajlar
163
Laravel framework’unu kullanan arkadaşlar bilirler. Laravel’de artisan ile komut satırında otomatik dosya oluşturma yöntemi var.
Bende kendime göre böyle bir işlemi yapan kodu oluşturdum. Komut satırında
Kod:
php cli.php --c=kitap
yazıldığında controllers dizini içinde otomatik olarak controller dosyasını oluşturur.

Benim çok işime yaradı. Belki başka arkadaşlarında işine yarar diye kodu paylaşıyorum.
PHP:
<?php
// cli.php

// Komut satırından gelen argümanları alalım
$options = getopt("", ["c:", "m:", "v:"]);

// Dizinlerin tanımlanması
$controllerDir = 'app/controllers/';
$modelDir = 'app/models/';
$viewDir = 'app/views/';

// Dizinlerin var olup olmadığını kontrol edip oluşturalım
if (!is_dir($controllerDir)) {
    mkdir($controllerDir, 0777, true);
}
if (!is_dir($modelDir)) {
    mkdir($modelDir, 0777, true);
}
if (!is_dir($viewDir)) {
    mkdir($viewDir, 0777, true);
}


#Controller Sınıfı Oluşturma
if (isset($options['c'])) {
    $className = ucfirst($options['c']) . '.php'; // Örn: controllers/Okul.php kontrol dosyası
    $classNameUc = ucfirst($options['c']);
    $content = <<<'EOT'
<?php
namespace App\Controllers;

class CLASS_NAME extends \Core\Controller
{
    public function main()
    {
         $this->blade->render('{home}.index');
    }

    public function flex() {
        // Örnek metod
    }
}
EOT;

    // Dosya içeriğinde sınıf adını dinamik olarak değiştirelim
    $content = str_replace('CLASS_NAME', $classNameUc, $content);
    $content = str_replace('{home}', $options['c'], $content);

    file_put_contents($controllerDir .$className, $content);
    echo "Dosya oluşturuldu: $className [controller]\n";
}

#Model Sınıfı Oluşturma
if (isset($options['m'])) {
    $className = ucfirst($options['m']) . '.php'; // Örn: models/Okul.php
    $classNameUc = ucfirst($options['m']);
    $content = <<<'EOT'
<?php
namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class CLASS_NAME extends Model {
    protected $table = '{model}';
    protected $primaryKey = '{model}_id';
    public $timestamps = false;
}
EOT;

    // Dosya içeriğinde sınıf adını dinamik olarak değiştirelim
    $content = str_replace('CLASS_NAME', $classNameUc, $content);
    $content = str_replace('{model}', $options['m'], $content);

    file_put_contents($modelDir .$className, $content);
    echo "Dosya oluşturuldu: $className [model]\n";
}

#View Oluşturma
if (isset($options['v'])) {
$input = $options['v'];
    [$folderName, $fileName] = explode('.', $input);

    // Eğer dosya adı yoksa varsayılan dosya adını kullan
    if (!$fileName) {
        $fileName = 'index'; // Örneğin varsayılan dosya adı 'index' olabilir
    }

    $viewPath = $viewDir .  $folderName; // Klasör yolu
    $viewFile = $fileName . '.blade.php'; // Dosya adı

    // HTML içerik şablonu
    $content = <<<'EOT'
<!DOCTYPE html>
<html lang="tr">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>HOME</title>
</head>
<body>
    <h1>HOME view</h1>
</body>
</html>
EOT;

    // Dinamik olarak içerikteki HOME ifadesini dosya adına göre değiştir
    $content = str_replace('HOME', ucfirst($fileName), $content);

    // Klasör yoksa oluştur
    if (!is_dir($viewPath)) {
        mkdir($viewPath, 0777, true);
        echo "Klasör oluşturuldu: $viewPath\n";
    }

    // Dosya yolu
    $filePath = $viewPath . '/' . $viewFile;
    file_put_contents($filePath, $content); // Dosyayı oluştur
    echo "Dosya oluşturuldu: $filePath\n";
}
sizde kodu kendinize göre güncelleyebilirsiniz. Kolay gelsin.
 
Geri
Üst