Giriş yapmadınız.

#1 06.03.2018 09:07:25

mgsmus
Moderatör
Yer: Mersin
Kayıtlı: 17.08.2013
Mesajlar: 1,634
Website

Konsol yardımı ile tablo alanları için insancıl etiketler oluşturma

Merhaba

Tablolarımızda alanlar oluyor, name, phone vs ve biz bunları projelerimizde  Adı, Telefon gibi Türkçe ya da başka dillerde kullanıyoruz. Bunları bazen Türkçeleştirmek, elle sisteme yazmak iyice sıkıyor, zaman alıyor. Bunun için şöyle bir konsol komutu yazdım. Sadece Türkçe için ama aynı mantıkla yola çıkarak çok dilli hale getirilebilir.

<?php

namespace App\Console\Commands;

use Schema;
use Illuminate\Console\Command;

class GenerateLabels extends Command
{
    /**
     * The name and signature of the console command.
     *
     * @var string
     */
    protected $signature = 'label:generate {table}';

    /**
     * The console command description.
     *
     * @var string
     */
    protected $description = 'Generate labels from given table';

    /**
     * Create a new command instance.
     *
     * @return void
     */
    public function __construct()
    {
        parent::__construct();
    }

    /**
     * Execute the console command.
     *
     * @return mixed
     */
    public function handle()
    {
        $columns = Schema::getColumnListing($this->argument('table'));

        $known = [
            'active' => 'Aktif',
            'email' => 'Email',
            'gsm' => 'GSM',
            'password' => 'Şifre',
            'photo' => 'Resim',
            'title' => 'Başlık',
            'name' => 'Adı',
            'surname' => 'Soyadı',
            'description' => 'Açıklama',
            'created_at' => 'Oluşturulma Tarihi',
            'updated_at' => 'Güncellenme Tarihi',
            'deleted_at' => 'Silinme Tarihi',
            'locked_at' => 'Kilitlenme Tarihi',
        ];

        $normalizedColumns = array_combine(array_values($columns), $columns);

        $paired = $known + $normalizedColumns;

        $output = '/**
 * The labels of table columns
 * Generated via php artisan label:generate '.$this->argument('table').'
 *
 * @var array
 */' . PHP_EOL;

        $output .= 'public static $labels = [' . PHP_EOL;
        foreach ($paired as $key => $value) {
            $output .= "\t" . "'{$key}' => '{$value}'," . PHP_EOL;
        }
        $output .= '];';

        $this->info($output);

    }
}

Daha sonra komut satırında

$ php artisan label:generate users

şeklinde çalıştırdığımda bana şöyle bir çıktı veriyor ve bunu User modeline ekliyorum:

/**
* The labels of table columns
* Generated via php artisan label:generate users
*
* @var array
*/
public static $labels = [
	'id' => 'id',
	'active' => 'Aktif',
	'name' => 'Adı',
	'email' => 'Email',
	'gsm' => 'GSM',
	'password' => 'Şifre',
	'remember_token' => 'remember_token',
	'created_at' => 'Oluşturulma Tarihi',
	'updated_at' => 'Güncellenme Tarihi',
];

FormRequest ile validation yaptığımda ise FormRequest sınıfıma şunu ekliyorum.

public function attributes()
{
    return User::$labels;
}

Bu sadece basit bir iş için kullandığım sistem, üzerine konuşacak çok şey vardır ama anlatmak istediğim bunun gibi siz de kendi yardımcı konsol komutlarınızı yazarak işlerinizi kolaylaştırabilirsiniz. Konsol komutu illa sistemde bir iş yapacak diye bir şart yok.

Son düzenleyen mgsmus (06.03.2018 09:08:49)

Çevrimdışı

#2 06.03.2018 10:14:29

sineld
Yönetici
Yer: Bursa
Kayıtlı: 26.12.2012
Mesajlar: 1,478
Website

Yanıt: Konsol yardımı ile tablo alanları için insancıl etiketler oluşturma

Ellerine sağlık Mustafa, harika bir iş çıkarmışsın. Birçok farklı kullanım için fikir verebilir.

Çevrimdışı

Forum alt kısmı