Skip to content

Tahaknd/symfony-state-machine-workflow-demo

Repository files navigation

Symfony ile Görev Yönetim Sistemi

Bu proje, Symfony framework'ü kullanılarak geliştirilmiş, state machine ve workflow özelliklerini içeren bir görev yönetim sistemidir.

🤔 State Machine ve Workflow Nedir?

State Machine

State Machine, bir nesnenin belirli durumlar arasında geçiş yapmasını yöneten ve kontrol eden bir tasarım modelidir. Temel özellikleri:

  • Her zaman tek bir durumda bulunur
  • Önceden tanımlanmış geçiş kurallarına göre hareket eder
  • Geçişler kesin ve belirlidir
  • Basit ve doğrusal süreçler için idealdir

Bu projede görev durumları (draft → in_progress → completed) bir state machine ile yönetilmektedir. Örneğin:

// Görev durumu değiştirme örneği
if ($workflow->can($task, 'start')) {
    $workflow->apply($task, 'start'); // draft → in_progress
}

Workflow

Workflow, daha karmaşık süreçleri ve durumlar arası geçişleri yönetmek için kullanılan bir modeldir. Özellikleri:

  • Birden fazla durumda bulunabilir
  • Dallanma ve birleşme noktaları içerebilir
  • Karmaşık iş süreçlerini modelleyebilir
  • Esnek ve ölçeklenebilir yapıdadır

Bu projede inceleme süreci (pending → under_review → approved/rejected) bir workflow ile yönetilmektedir. Örneğin:

// İnceleme durumu değiştirme örneği
if ($workflow->can($task, 'submit_for_review')) {
    $workflow->apply($task, 'submit_for_review'); // pending → under_review
}

Projede Kullanımı

1. Yapılandırma

config/packages/workflow.yaml dosyasında her iki süreç için ayrı tanımlamalar yapılmıştır:

framework:
    workflows:
        task_status:
            type: 'state_machine'
            # ... durum geçişleri
        task_review:
            type: 'workflow'
            # ... inceleme süreçleri

2. Entity Entegrasyonu

Task entity'si her iki süreci de destekleyecek şekilde tasarlanmıştır:

class Task
{
    private string $status;         // State Machine durumu
    private string $reviewState;    // Workflow durumu
}

3. Controller Kullanımı

Controller'larda her iki süreç de ayrı servisler üzerinden yönetilmektedir:

class TaskController
{
    public function __construct(
        private WorkflowInterface $taskStatusStateMachine,
        private WorkflowInterface $taskReviewStateMachine
    ) {}
}

🚀 Özellikler

Görev Durumu (State Machine)

  • draft → Taslak (başlangıç durumu)
  • in_progress → Devam ediyor
  • completed → Tamamlandı
  • cancelled → İptal edildi

İnceleme Durumu (Workflow)

  • pending → Beklemede (başlangıç durumu)
  • under_review → İnceleniyor
  • approved → Onaylandı
  • rejected → Reddedildi
  • changes_requested → Değişiklik istendi

🛠 Teknik Altyapı

  • Symfony Framework
  • Doctrine ORM
  • Symfony Workflow Component
  • Bootstrap & Font Awesome
  • Twig Template Engine

💻 Kurulum

  1. Projeyi klonlayın:
git clone [proje-url]
cd [proje-dizini]
  1. Bağımlılıkları yükleyin:
composer install
  1. Veritabanını oluşturun:
php bin/console doctrine:database:create
php bin/console doctrine:migrations:migrate
  1. Symfony development sunucusunu başlatın:
symfony server:start

🎯 Kullanım

Web Arayüzü

  • / - Görev listesi
  • /task/new - Yeni görev oluşturma
  • /task/{id} - Görev detayları ve durum değiştirme

Durum Geçişleri

Görev Durumu

  • draftin_progress (Görevi başlat)
  • in_progresscompleted (Görevi tamamla)
  • draft/in_progresscancelled (Görevi iptal et)

İnceleme Durumu

  • pendingunder_review (İncelemeye gönder)
  • under_reviewapproved/rejected/changes_requested (İnceleme sonucu)
  • rejected/changes_requestedunder_review (Tekrar incelemeye gönder)

🔧 Yapılandırma

State machine ve workflow yapılandırmaları config/packages/workflow.yaml dosyasında bulunmaktadır. Bu yapılandırmalar:

  • Durum geçişlerini
  • Başlangıç durumlarını
  • İzin verilen geçişleri
  • Audit trail özelliklerini

tanımlar.

📁 Proje Yapısı

src/
├── Controller/
│   ├── TaskWebController.php    # Web arayüzü controller'ı
│   └── TaskApiController.php    # API controller'ı
├── Entity/
│   └── Task.php                 # Görev entity'si
└── Repository/
    └── TaskRepository.php       # Görev repository'si

templates/
└── task/
    ├── list.html.twig          # Görev listesi şablonu
    ├── new.html.twig           # Yeni görev şablonu
    └── show.html.twig          # Görev detay şablonu

📝 Lisans

Bu proje MIT lisansı altında lisanslanmıştır. Daha fazla bilgi için LICENSE dosyasına bakın.

About

State Machine & Workflow Demo For Symfony

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published