Teknomers | Dünyadan Güncel Teknoloji | Oyun | Müzik | Film | Spor HaberleriTeknomers | Dünyadan Güncel Teknoloji | Oyun | Müzik | Film | Spor HaberleriTeknomers | Dünyadan Güncel Teknoloji | Oyun | Müzik | Film | Spor Haberleri
Yazı Tipi BoyutlandırıcıAa
  • Anasayfa
  • Teknoloji
    • Siber Güvenlik
    • Yapay Zeka
    • Donanım
    • Bilim
  • Yazılım
  • Savunma & İstihbarat
  • Oyun
  • Yaşam
    • Finans
    • Sinema
    • Dünyadan Haberler
  • İş Birliği
Okuma: Laravel Kurulum Örneği – DEV Community
Paylaş
Yazı Tipi BoyutlandırıcıAa
Teknomers | Dünyadan Güncel Teknoloji | Oyun | Müzik | Film | Spor HaberleriTeknomers | Dünyadan Güncel Teknoloji | Oyun | Müzik | Film | Spor Haberleri
Ara
Bizi Takip Et
  • Hakkımızda
  • Gizlilik politikası
  • Tanıtım Yazısı ve Backlink Hizmeti
© 2026 Teknomers. All Rights Reserved.

Anasayfa » Laravel Kurulum Örneği – DEV Community

Yazılım

Laravel Kurulum Örneği – DEV Community

teknomers
Son güncelleme: 15 Mayıs 2026 20:31
teknomers
Paylaş
Paylaş

PART 1: Kurulum
bash
composer create-project laravel/laravel medicine-system
cd medicine-system

phpMyAdmin’de bir veritabanı oluşturun: medicine_db
.env dosyasını düzenleyin:
DB_DATABASE=medicine_db
DB_USERNAME=root
DB_PASSWORD=
Breeze’i kurun:
bash
composer require laravel/breeze --dev
php artisan breeze:install blade
php artisan migrate
npm install
npm run build
Yalnızca Bootstrap UI ve PDF’i kurun:
bash
npm uninstall tailwindcss postcss autoprefixer
composer require aldhix/breeze-bootstrap-ui
php artisan breeze-bootstrap-ui:install --force
composer require barryvdh/laravel-dompdf
npm install
npm run build
Dosyaları oluşturun:
bash
php artisan make:model Medicine -mcr
php artisan make:controller ReportController

PART 2: Migration

Veritabanı migration dosyasını açın: database/migrations/xxxx_create_medicines_table.php:

php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

return new class extends Migration {
public function up(): void {
Schema::create('medicines', function (Blueprint $table) {
$table->id();
$table->string('name');
$table->string('generic_name');
$table->string('category');
$table->integer('quantity');
$table->date('expiration_date');
$table->decimal('price', 8, 2);
$table->string('status')->default('available');
$table->timestamps();
});
}

public function down(): void
{
    Schema::dropIfExists('medicines');
}

};

Migrate işlemini yapın:
bash
php artisan migrate

PART 3: Model

Model dosyasını açın: app/Models/Medicine.php:

php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;

class Medicine extends Model {
protected $fillable = [
'name',
'generic_name',
'category',
'quantity',
'expiration_date',
'price',
'status',
];

protected $casts = [
    'expiration_date' => 'date',
];

public function isExpired(): bool
{
    return $this->expiration_date->isPast();
}

public function isLowStock(): bool
{
    return $this->quantity < 10; // Örneğin, 10'dan az ise düşük stok
}

}

PART 4: Route'lar

Route dosyasını açın: routes/web.php:

php
use App\Http\Controllers\MedicineController;
use App\Http\Controllers\ProfileController;
use App\Http\Controllers\ReportController;
use Illuminate\Support\Facades\Route;

Route::middleware('auth')->group(function () {
Route::get("https://dev.to/", function () {
return redirect()->route('medicines.index');
});

Route::get('/dashboard', function () {
    return view('dashboard');
})->name('dashboard');

Route::resource('medicines', MedicineController::class);

Route::get('/reports', [ReportController::class, 'index'])->name('reports.index');
Route::get('/reports/pdf', [ReportController::class, 'exportPdf'])->name('reports.pdf');
Route::get('/reports/csv', [ReportController::class, 'exportCsv'])->name('reports.csv');

Route::get('/profile', [ProfileController::class, 'edit'])->name('profile.edit');
Route::patch('/profile', [ProfileController::class, 'update'])->name('profile.update');
Route::delete('/profile', [ProfileController::class, 'destroy'])->name('profile.destroy');

});
require DIR.'/auth.php';

PART 5: Medicine Controller

Kontrolör dosyasını açın: app/Http/Controllers/MedicineController.php:

php
namespace App\Http\Controllers;
use App\Models\Medicine;
use Illuminate\Http\Request;

class MedicineController extends Controller {
public function index() {
$medicines = Medicine::latest()->paginate(10);
return view('medicines.index', compact('medicines'));
}

public function create()
{
    return view('medicines.create');
}

public function store(Request $request)
{
    $request->validate([
        'name'            => 'required|string|max:255',
        'generic_name'    => 'required|string|max:255',
        'category'        => 'required|string',
        'quantity'        => 'required|integer|min:0',
        'expiration_date' => 'required|date',
        'price'           => 'required|numeric|min:0',
        'status'          => 'required|string',
    ]);

    Medicine::create($request->all());

    return redirect()->route('medicines.index')
        ->with('success', 'Medicine added successfully!');
}

public function show(Medicine $medicine)
{
    return view('medicines.show', compact('medicine'));
}

public function edit(Medicine $medicine)
{
    return view('medicines.edit', compact('medicine'));
}

public function update(Request $request, Medicine $medicine)
{
    $request->validate([
        'name'            => 'required|string|max:255',
        'generic_name'    => 'required|string|max:255',
        'category'        => 'required|string',
        'quantity'        => 'required|integer|min:0',
        'expiration_date' => 'required|date',
        'price'           => 'required|numeric|min:0',
        'status'          => 'required|string',
    ]);

    $medicine->update($request->all());

    return redirect()->route('medicines.index')
        ->with('success', 'Medicine updated successfully!');
}

public function destroy(Medicine $medicine)
{
    $medicine->delete();

    return redirect()->route('medicines.index')
        ->with('success', 'Medicine deleted successfully!');
}

}

PART 6: Report Controller

Kontrolör dosyasını açın: app/Http/Controllers/ReportController.php:

php
namespace App\Http\Controllers;
use App\Models\Medicine;
use Barryvdh\DomPDF\Facade\Pdf;
use Illuminate\Http\Request;

class ReportController extends Controller {
public function index(Request $request) {
$query = Medicine::query();

if ($request->filled('category')) {
        $query->where('category', $request->category);
    }

    if ($request->filled('expiration_status')) {
        if ($request->expiration_status === 'expired') {
            $query->where('expiration_date', '<', now());
        } else if ($request->expiration_status === 'not_expired') {
            $query->where('expiration_date', '>=', now());
        }
    }

    $medicines = $query->get();
    $categories = Medicine::distinct()->orderBy('category')->pluck('category');

    return view('reports.index', compact('medicines', 'categories'));
}

public function exportPdf(Request $request)
{
    $query = Medicine::query();

    if ($request->filled('category')) {
        $query->where('category', $request->category);
    }

    if ($request->filled('expiration_status')) {
        if ($request->expiration_status === 'expired') {
            $query->where('expiration_date', '<', now());
        } else if ($request->expiration_status === 'not_expired') {
            $query->where('expiration_date', '>=', now());
        }
    }

    $medicines = $query->get();

    return Pdf::loadView('reports.pdf', compact('medicines'))
        ->download('medicine-report.pdf');
}

public function exportCsv(Request $request)
{
    $query = Medicine::query();

    if ($request->filled('category')) {
        $query->where('category', $request->category);
    }

    if ($request->filled('expiration_status')) {
        if ($request->expiration_status === 'expired') {
            $query->where('expiration_date', '<', now());
        } else if ($request->expiration_status === 'not_expired') {
            $query->where('expiration_date', '>=', now());
        }
    }

    $medicines = $query->get();

    $headers = [
        'Content-Type'        => 'text/csv',
        'Content-Disposition' => 'attachment; filename="medicine-report.csv"',
    ];

    $callback = function () use ($medicines) {
        $file = fopen('php://output', 'w');

        fputcsv($file, ['Name', 'Generic Name', 'Category', 'Quantity', 'Expiration Date', 'Price', 'Status']);

        foreach ($medicines as $medicine) {
            fputcsv($file, [
                $medicine->name,
                $medicine->generic_name,
                $medicine->category,
                $medicine->quantity,
                $medicine->expiration_date->format('Y-m-d'),
                $medicine->price,
                $medicine->status,
            ]);
        }

        fclose($file);
    };

    return response()->stream($callback, 200, $headers);
}

}

PART 7: Layout Düzeltmesi

Dosyayı açın: resources/views/layouts/app.blade.php.
Şunu bulun:
{{ $slot }}

Bunu ile değiştirin:
@hasSection('content')
@yield('content')
@else
{{ $slot ?? '' }}
@endif

PART 8: Navigasyon

Dosyayı açın: resources/views/layouts/navigation.blade.php.
Sol taraftaki navigasyon alanına şunları ekleyin veya düzeltin:

Geri kalan kısmı, view dosyalarında oluşturacaksınız.

Kaynak: Orijinal Makale

Uzak VPS üzerinde Vite HMR Laravel çalıştıramayacağını düşündüm. Yanıldım.
N+1 Çökmelerini Durdur: Laravel Katı Modunu Zorla
API’nizi Bozmaktan Kaçının: Laravel’de URL Versiyonlamasını Ustaca Yapın
Self-hizmet Güvenlik Denetimi ve Sistem Sağlığı Araç Seti Oluşturdum: Filament PHP v3 için
Laravel’in Gözlemci Desenini Sütun İzleyicileri ile Yeniden Düşünmek
Bu Makaleyi Paylaş
Facebook Bağlantıyı Kopyala Yazdır
Paylaş
Önceki Makale TP-Link Archer BE770 İncelemesi: Kablosuz Performansa Odaklanıyor
Sonraki Makale Grok ve Gemini’ye Güvenmemek İçin Andon Labs’ın AI Radyo İstasyonları Nedenini Gösteriyor

Sanal Medya

FacebookBeğen
452Takip Et
PinterestSabitle
237Takip Et

Son Eklenenler

Bu video kuş yemliği Prime Day’in sürpriz yıldızı oldu
Liste
OpenAI, Uber Hindistan liderini ABD dışındaki en büyük pazara atadı
Yapay Zeka
Oyun Konsollarında Beklenen Performans Gerçekleşmedi
Oyun
Gigabyte Aero X16 oyun laptopu: RTX 5060, 32GB RAM, %21 indirimli
Donanım
OpenAI Hükümet Talebiyle GPT-5.6 Dağıtımını Sınırladı
Genel
Dünya Kupası Vizesi Redleri ABD’nin Korkunç Göç Politikalarını Gözler Önüne Seriyor
Liste
//

Siber güvenlik, yapay zeka ve savunma sanayiinden; finans ve sinema dünyasına uzanan geniş bir yelpaze. Teknomers; teknoloji, strateji ve yazılım dünyasını sade bir dille sizlerle buluşturuyor.

Kurumsal

  • Hakkımızda
  • Gizlilik politikası
  • Tanıtım Yazısı ve Backlink Hizmeti

Kategoriler

  • Teknoloji
  • Oyun
  • Sinema
  • Siber Güvenlik
  • Bilim
  • Finans
  • Dünyadan Güncel Haberler

Populer

  • TV'de Ücretsiz İzlenebilen Şifresiz Erotik Kanallar (2025 Güncel Frekans Listesi)

  • The Last of Us PC Kontrolleri: Hızlı Silah Değiştirme ve Tüm Tuşlar (2025)

  • Hogwarts Legacy'de Odaklanma İksiri Nasıl Yapılır?

Teknomers | Dünyadan Güncel Teknoloji | Oyun | Müzik | Film | Spor HaberleriTeknomers | Dünyadan Güncel Teknoloji | Oyun | Müzik | Film | Spor Haberleri
Bizi Takip Et
© 2026 Teknomers. All Rights Reserved.
Welcome Back!

Sign in to your account

Kullanıcı Adı veya E-posta Adresi
Şifre

Şifrenizi mi unuttunuz?