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 Kurulumunu Kolaylaştırma
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 Kurulumunu Kolaylaştırma

Yazılım

Laravel Kurulumunu Kolaylaştırma

teknomers
Son güncelleme: 15 Mayıs 2026 02:13
teknomers
Paylaş
Paylaş

PART 1: Kurulum

Laravel projesini başlatmak için aşağıdaki komutları kullanın:

composer create-project laravel/laravel fruit-system
cd fruit-system

phpMyAdmin üzerinden bir veritabanı oluşturun:

fruit_db

.env dosyasını şu şekilde düzenleyin:

DB_DATABASE=fruit_db
DB_USERNAME=root
DB_PASSWORD=

Breeze’i yüklemek için:

composer require laravel/breeze --dev
php artisan breeze:install blade
php artisan migrate
npm install
npm run build

Bootstrap UI ve sadece PDF yüklemek için:

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

Model ve Controller oluşturun:

php artisan make:model Fruit -mcr
php artisan make:controller ReportController

PART 2: Migration

database/migrations/xxxx_create_fruits_table.php dosyasını açın:

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('fruits', function (Blueprint $table) {
            $table->id();
            $table->string('name');
            $table->string('category');
            $table->decimal('price', 8, 2);
            $table->integer('stock');
            $table->text('description')->nullable();
            $table->boolean('is_available')->default(true);
            $table->timestamps();
        });
    }

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

Migration’ı çalıştırmak için:

php artisan migrate

PART 3: Model

app/Models/Fruit.php dosyasını açın:

namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class Fruit extends Model
{
    protected $fillable = [
        'name',
        'category',
        'price',
        'stock',
        'description',
        'is_available',
    ];

    protected $casts = [
        'is_available' => 'boolean',
    ];
}

PART 4: Routes

routes/web.php dosyasını açın ve aşağıdaki kodu ekleyin:

use App\Http\Controllers\FruitController;
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('fruits.index');
    });

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

    Route::resource('fruits', FruitController::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’;

Önemli: reports.csv kullanın, reports.excel değil.

PART 5: Fruit Controller

app/Http/Controllers/FruitController.php dosyasını açın:

namespace App\Http\Controllers;

use App\Models\Fruit;
use Illuminate\Http\Request;

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

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

    public function store(Request $request)
    {
        $request->validate([
            'name' => 'required|string|max:255',
            'category' => 'required|string',
            'price' => 'required|numeric|min:0',
            'stock' => 'required|integer|min:0',
            'description' => 'nullable|string',
        ]);

        $data = $request->all();
        $data['is_available'] = $request->has('is_available') ? 1 : 0;

        Fruit::create($data);

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

    public function show(Fruit $fruit)
    {
        return view('fruits.show', compact('fruit'));
    }

    public function edit(Fruit $fruit)
    {
        return view('fruits.edit', compact('fruit'));
    }

    public function update(Request $request, Fruit $fruit)
    {
        $request->validate([
            'name' => 'required|string|max:255',
            'category' => 'required|string',
            'price' => 'required|numeric|min:0',
            'stock' => 'required|integer|min:0',
            'description' => 'nullable|string',
        ]);

        $data = $request->all();
        $data['is_available'] = $request->has('is_available') ? 1 : 0;

        $fruit->update($data);

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

    public function destroy(Fruit $fruit)
    {
        $fruit->delete();

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

PART 6: Report Controller

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

namespace App\Http\Controllers;

use App\Models\Fruit;
use Barryvdh\DomPDF\Facade\Pdf;
use Illuminate\Http\Request;

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

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

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

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

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

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

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

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

        $fruits = $query->get();

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

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

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

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

        $fruits = $query->get();

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

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

            fputcsv($file, ['Name', 'Category', 'Price/kg', 'Stock', 'Available', 'Description']);

            foreach ($fruits as $fruit) {
                fputcsv($file, [
                    $fruit->name,
                    $fruit->category,
                    $fruit->price,
                    $fruit->stock,
                    $fruit->is_available ? 'Yes' : 'No',
                    $fruit->description ?? 'N/A',
                ]);
            }

            fclose($file);
        };

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

Önemli Düzenleme Düzeltmeleri:

resources/views/layouts/app.blade.php dosyasını açın ve aşağıdaki satırı bulun:

{{ $slot }}

Ve bununla değiştirin:

@hasSection('content')
@yield('content')
@else
{{ $slot ?? '' }}
@endif

Navigation

resources/views/layouts/navigation.blade.php dosyasını açın. Sol taraftaki navigasyon alanına şu bağlantıları ekleyin veya düzeltin:

Fruits / Index – resources/views/fruits/index.blade.php

@extends('layouts.app')
@section('content')

Fruit Products

+ Add Fruit @if(session('success')) {{ session('success') }} @endif @forelse($fruits as $fruit) @empty @endforelse
Name Category Price/kg Stock Status Actions
{{ $fruit->name }} {{ $fruit->category }} ₱{{ number_format($fruit->price, 2) }} {{ $fruit->stock }} kg @if($fruit->is_available) Available @else Out of Stock @endif View Edit
@csrf @method('DELETE')
No fruits yet. Add one!
{{ $fruits->links() }} @endsection

Create – resources/views/fruits/create.blade.php

@extends('layouts.app')
@section('content')

Add New Fruit

@if($errors->any()) @foreach($errors->all() as $error) {{ $error }} @endforeach @endif
@csrf
Cancel
@endsection

Edit – resources/views/fruits/edit.blade.php

@extends('layouts.app')
@section('content')

Edit - {{ $fruit->name }}

@if($errors->any()) @foreach($errors->all() as $error) {{ $error }} @endforeach @endif
@csrf @method('PUT')
is_available) ? 'checked' : '' }}>
Cancel
@endsection

Show – resources/views/fruits/show.blade.php

@extends('layouts.app')
@section('content')

{{ $fruit->name }}

Category: {{ $fruit->category }}

Price per kg: ₱{{ number_format($fruit->price, 2) }}

Stock: {{ $fruit->stock }} kg

Description: {{ $fruit->description ?? 'No description provided.' }}

Status: @if($fruit->is_available) Available @else Out of Stock @endif

Added: {{ $fruit->created_at->format('F d, Y') }}

Edit Back @endsection

Reports – resources/views/reports/index.blade.php

@extends('layouts.app')
@section('content')

Fruit Reports

Reset
Export PDF Export CSV

Showing {{ $fruits->count() }} result(s)

@forelse($fruits as $fruit) @empty @endforelse
Name Category Price/kg Stock Status
{{ $fruit->name }} {{ $fruit->category }} ₱{{ number_format($fruit->price, 2) }} {{ $fruit->stock }} kg @if($fruit->is_available) Available @else Out of Stock @endif
No results found.
@endsection

PDF Layout – resources/views/reports/pdf.blade.php

Fruit Report

Fruit Sales Report

Generated: {{ now()->format('F d, Y - h:i A') }}

@forelse($fruits as $fruit) @empty @endforelse
Name Category Price/kg Stock Status
{{ $fruit->name }} {{ $fruit->category }} ₱{{ number_format($fruit->price, 2) }} {{ $fruit->stock }} kg {{ $fruit->is_available ? 'Available' : 'Out of Stock' }}
No fruits found.

Kaynak: Orijinal Makale

Contents
  • PART 1: Kurulum
  • PART 2: Migration
  • PART 3: Model
  • PART 4: Routes
  • PART 5: Fruit Controller
  • PART 6: Report Controller
  • Navigation
  • Fruits / Index – resources/views/fruits/index.blade.php
  • Fruit Products
  • Create – resources/views/fruits/create.blade.php
  • Add New Fruit
  • Edit – resources/views/fruits/edit.blade.php
  • Edit - {{ $fruit->name }}
  • Show – resources/views/fruits/show.blade.php
  • {{ $fruit->name }}
  • Reports – resources/views/reports/index.blade.php
  • Fruit Reports
  • PDF Layout – resources/views/reports/pdf.blade.php
    • Fruit Sales Report
Laravel Uygulamanızı Anlık Hissettirmek: Kuyruklar ve Horizon için Nihai Rehber
Tablodan Satır Silmeyi Tetiklemenin Dört Yolu
Laravel’ı Paylaşımlı Barındırmada Dağıtma (SSH Gerektirmeden)
Sessiz Bir API Güncellemesinin Faturalandırmamızı Nasıl Bozdu (Ve Bunu Nasıl Önleyebiliriz)
Microsoft, Siri’nin Yapımcısı Nuance’ı Satın Almak için 20 Milyar Dolar Teklif Etti
Bu Makaleyi Paylaş
Facebook Bağlantıyı Kopyala Yazdır
Paylaş
Önceki Makale YouTube Kısa Videoları Ayda 2 Milyar Saat İzleniyor
Sonraki Makale Kritik: TeamPCP Hackerları Mistral AI Kodlarını Satışa Çıkardı

Sanal Medya

FacebookBeğen
452Takip Et
PinterestSabitle
237Takip Et

Son Eklenenler

Acil: Cisco Catalyst SD-WAN Yöneticisi CVE-2026-20245 Açıkları Tehdit Ediyor
Siber Güvenlik
N++ Sonrası Yeni Oyun İçin Beklentiler ve Heyecan Durumu
Oyun
Laufey’in Savaş Taktiği Eski Yunan Üçlemesinden İlham Aldı
Oyun
Şimşek, coaxial kablodan apartmana girip PC’yi patlattı
Donanım
Outlook’un yıllardır güvenlik açığı, Fedora ve Dovecot güncellemesiyle ortaya çıktı
Donanım
Yaz Geliştirici Festivali 2026: Tüm Yenilikler Ortaya Çıkıyor
Oyun
//

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?