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
Flutter Uygulamanızın 4G’de Yavaş Olmasının Nedeni (API Yük Tuzağı)
laravel-permissions-redis v4.0.0 artık kararlı sürümde
Laravel SaaS Uygulamam için 6 Kimlik Doğrulama Yöntemi Geliştirdim – İşte Tam Mimarisi
Laravel E-posta Tercih Merkezi: Laravel için entegre e-posta abonelik yönetimi
Laravel Personel Takviyesi: Bu Yıl Dikkate Alınması Gereken En İyi 5 Ajans
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

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?