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

Laravel için Basit Bir API İzleme Aracı Geliştirdim (Datadog Gerekmeden)
WhatsApp Medyasını Medya Kimliği Kullanarak İndirme ve Kaydetme (WhatsApp Cloud API) – Laravel ve Core PHP ile
Gerçek Projelerde Laravel Performansı Hakkında Zor Yoldan Öğrendiğimiz 6 Şey
Laravel’de Görüntü Yüklemelerini Temizleme: Resim Dosyaları Üzerinden PHP Yük Enjeksiyonunu Engelleme
Bir M1 Pro MacBook ile Parallels Desktop’ta tekrar oyun oynamayı deniyoruz
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

GameStop CEO’su: Sony’nin disksiz kararının önemi yok, yazılım sadece %12
Donanım
Apple Music Fiyatlarını Artırıyor mu?
Liste
Diablo 4 Sezon 14’teki Hayal Kırıklığı Yaratan Değişiklikler Kaldırıldı
Oyun
ICE, Veri Broker Araçları ile ‘Refakatsiz Çocukları’ ve Dolandırıcılığı Tespit Ediyor
Genel
Apple’ın davası OpenAI’nın halka arzını etkileyebilir mi?
Yapay Zeka
Kritik HollowByte DDoS Açığı: OpenSSL Sunucu Belleğini Patlatıyor
Siber Güvenlik
//

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?