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

API’lerinizi Duraklatmayın: WebSocket ile Gerçek Zamanlı SaaS Mimarisi Tasarımı
Bu Hafta İşte Geliştirdiğim Bir İş Akışı Motoru Hakkında Düşüncelerim
AI Ajanının Laravel Uygulamanızı Yok Etmesini Nasıl Önlersiniz
Laravel için OPcache Yapılandırması: Göz Ardı Ettiğiniz Ücretsiz Performans Artışı
Laravel 11’de defer() Kullanarak API Cevaplarımızı Tek Bir Kuyruğa Dokunmadan 3 Kat Hızlandırmak
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

2026’nın En İyi 2 Bluetooth Takip Cihazı ve Öne Çıkanlar
Genel
G.Skill, AMD EXPO ULL ile performans artışını nasıl sağlıyor?
Donanım
Yaz aylarında oyun dünyasının merkezi PC olmaya devam ediyor
Oyun
Dijital Sirk Büyüleyici: YouTube Fenomeni Sinemaya Geliyor
Liste
Tifa Street Fighter 6’nın Dördüncü Sezonuna Katılıyor
Oyun
Antivaksin Tanışma Uygulamaları Gerçek Hayata Taşınıyor: Tepkiler Artıyor!
Genel
//

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?