{"id":37602,"date":"2026-01-10T13:30:40","date_gmt":"2026-01-10T10:30:40","guid":{"rendered":"https:\/\/fatihsoysal.com\/blog\/laravel-12-ve-filament-ile-zuora-is-akisi-yoneticisi-gelistirme-kapsamli-bir-rehber\/"},"modified":"2026-01-10T13:30:40","modified_gmt":"2026-01-10T10:30:40","slug":"laravel-12-ve-filament-ile-zuora-is-akisi-yoneticisi-gelistirme-kapsamli-bir-rehber","status":"publish","type":"post","link":"https:\/\/fatihsoysal.com\/blog\/laravel-12-ve-filament-ile-zuora-is-akisi-yoneticisi-gelistirme-kapsamli-bir-rehber\/","title":{"rendered":"Laravel 12 ve Filament ile Zuora \u0130\u015f Ak\u0131\u015f\u0131 Y\u00f6neticisi Geli\u015ftirme: Kapsaml\u0131 Bir Rehber"},"content":{"rendered":"<h2>Laravel 12 ve Filament ile Zuora \u0130\u015f Ak\u0131\u015f\u0131 Y\u00f6neticisi Geli\u015ftirme: Kapsaml\u0131 Bir Rehber<\/h2>\n<p>G\u00fcn\u00fcm\u00fcz\u00fcn abonelik tabanl\u0131 ekonomisinde, \u015firketlerin gelir modellerini ve m\u00fc\u015fteri ili\u015fkilerini y\u00f6netmek i\u00e7in g\u00fc\u00e7l\u00fc ara\u00e7lara ihtiyac\u0131 var. Zuora, bu alanda lider platformlardan biri olsa da, bazen karma\u015f\u0131k i\u015f s\u00fcre\u00e7lerini y\u00f6netmek i\u00e7in daha esnek ve \u00f6zelle\u015ftirilebilir \u00e7\u00f6z\u00fcmler gerekebilir. \u0130\u015fte tam bu noktada, Laravel 12 ve Filament kullanarak kendi Zuora \u0130\u015f Ak\u0131\u015f\u0131 Y\u00f6neticimizi in\u015fa etme fikri devreye giriyor. Bu makale, bu s\u00fcreci ba\u015ftan sona ele alarak, teknik y\u0131\u011f\u0131n se\u00e7iminden mimari tasar\u0131ma, entegrasyondan kullan\u0131c\u0131 aray\u00fcz\u00fcne kadar her ad\u0131m\u0131 detayl\u0131 bir \u015fekilde a\u00e7\u0131klayacakt\u0131r.<\/p>\n<h3>Neden \u00d6zel Bir Zuora \u0130\u015f Ak\u0131\u015f\u0131 Y\u00f6neticisine \u0130htiya\u00e7 Duyar\u0131z?<\/h3>\n<p>Zuora, abonelik y\u00f6netimi, faturaland\u0131rma ve gelir muhasebesi konular\u0131nda g\u00fc\u00e7l\u00fc bir platform sunar. Ancak, her i\u015fletmenin kendine \u00f6zg\u00fc operasyonel s\u00fcre\u00e7leri ve entegrasyon ihtiya\u00e7lar\u0131 vard\u0131r. Zuora&#8217;n\u0131n sundu\u011fu standart i\u015f ak\u0131\u015flar\u0131 veya Flow Builder baz\u0131 durumlarda yetersiz kalabilir.<\/p>\n<h4>Zuora&#8217;n\u0131n G\u00fcc\u00fc ve S\u0131n\u0131rl\u0131l\u0131klar\u0131<\/h4>\n<p>Zuora, karma\u015f\u0131k abonelik modellerini y\u00f6netme, otomatik faturaland\u0131rma ve raporlama yetenekleriyle \u00f6ne \u00e7\u0131kar. Ancak, bazen belirli i\u015f mant\u0131klar\u0131n\u0131, harici sistemlerle entegrasyonlar\u0131 veya \u00f6zel onay s\u00fcre\u00e7lerini Zuora&#8217;n\u0131n kendi aray\u00fcz\u00fc \u00fczerinden y\u00f6netmek zorlay\u0131c\u0131 olabilir. \u00d6zellikle \u00e7ok say\u0131da ko\u015fullu ad\u0131m i\u00e7eren, farkl\u0131 departmanlardan onay gerektiren veya \u00fc\u00e7\u00fcnc\u00fc taraf API&#8217;leriyle s\u0131k\u0131 entegrasyon gerektiren ak\u0131\u015flarda, esneklik eksikli\u011fi hissedilebilir.<\/p>\n<h4>\u0130\u015f Ak\u0131\u015f\u0131 Karma\u015f\u0131kl\u0131\u011f\u0131 ve Manuel S\u00fcre\u00e7ler<\/h4>\n<p>Bir aboneli\u011fin ba\u015flat\u0131lmas\u0131, y\u00fckseltilmesi, d\u00fc\u015f\u00fcr\u00fclmesi veya iptal edilmesi gibi s\u00fcre\u00e7ler genellikle birden fazla ad\u0131m\u0131 ve farkl\u0131 sistemler aras\u0131nda veri al\u0131\u015fveri\u015fini i\u00e7erir. Bu ad\u0131mlar manuel olarak y\u00f6netildi\u011finde, hata yapma olas\u0131l\u0131\u011f\u0131 artar, verimlilik d\u00fc\u015fer ve s\u00fcre\u00e7ler yava\u015flar. \u00d6zel bir i\u015f ak\u0131\u015f\u0131 y\u00f6neticisi, bu karma\u015f\u0131k s\u00fcre\u00e7leri otomatikle\u015ftirerek insan hatas\u0131n\u0131 en aza indirir ve operasyonel verimlili\u011fi art\u0131r\u0131r.<\/p>\n<h4>\u00d6zelle\u015ftirme ve Esneklik \u0130htiyac\u0131<\/h4>\n<p>Her i\u015fletmenin kendine \u00f6zg\u00fc i\u015f kurallar\u0131 ve onay mekanizmalar\u0131 vard\u0131r. Zuora&#8217;n\u0131n standart i\u015f ak\u0131\u015flar\u0131 bu \u00f6zelle\u015ftirme ihtiyac\u0131n\u0131 her zaman kar\u015f\u0131lamayabilir. Kendi \u00e7\u00f6z\u00fcm\u00fcm\u00fczle, i\u015f ak\u0131\u015flar\u0131n\u0131 tamamen \u015firketimizin \u00f6zel gereksinimlerine g\u00f6re tasarlayabilir, istedi\u011fimiz kadar ad\u0131m ekleyebilir, ko\u015fullu dallanmalar olu\u015fturabilir ve harici sistemlerle sorunsuz entegrasyonlar kurabiliriz. Bu, i\u015f s\u00fcre\u00e7lerimizi tam olarak kontrol etmemizi sa\u011flar.<\/p>\n<h4>Verimlilik ve Hata Azaltma<\/h4>\n<p>Otomatikle\u015ftirilmi\u015f i\u015f ak\u0131\u015flar\u0131, manuel g\u00f6revlerin ortadan kalkmas\u0131yla zaman tasarrufu sa\u011flar. \u00c7al\u0131\u015fanlar daha stratejik g\u00f6revlere odaklanabilir. Ayr\u0131ca, otomasyon sayesinde s\u00fcre\u00e7lerdeki tutars\u0131zl\u0131klar ve hatalar \u00f6nemli \u00f6l\u00e7\u00fcde azal\u0131r, bu da daha do\u011fru verilere ve daha g\u00fcvenilir operasyonlara yol a\u00e7ar.<\/p>\n<h3>Teknoloji Y\u0131\u011f\u0131n\u0131m\u0131z: Laravel 12 ve Filament&#8217;in G\u00fcc\u00fc<\/h3>\n<p>Bu projenin temelini sa\u011flam ve modern bir teknoloji y\u0131\u011f\u0131n\u0131 olu\u015fturuyor. Laravel 12 ve Filament kombinasyonu, h\u0131zl\u0131 geli\u015ftirme, g\u00fc\u00e7l\u00fc \u00f6zellikler ve harika bir kullan\u0131c\u0131 deneyimi sunar.<\/p>\n<h4>Laravel 12: Modern PHP Geli\u015ftirmenin Temeli<\/h4>\n<p>Laravel, modern PHP geli\u015ftirmenin en pop\u00fcler framework&#8217;lerinden biridir. MVC mimarisi, kapsaml\u0131 dok\u00fcmantasyonu, zengin ekosistemi ve geli\u015ftirici dostu yap\u0131s\u0131yla bilinir. Laravel 12, en son PHP standartlar\u0131n\u0131 desteklerken, geli\u015ftiricilere g\u00fc\u00e7l\u00fc ORM (Eloquent), kuyruk y\u00f6netimi, HTTP istemcisi, kimlik do\u011frulama gibi temel bile\u015fenleri haz\u0131r olarak sunar. Bu, Zuora API&#8217;si ile ileti\u015fim kurmak, veritaban\u0131 i\u015flemlerini y\u00f6netmek ve arka plan g\u00f6revlerini y\u00fcr\u00fctmek i\u00e7in ideal bir temel sa\u011flar.<\/p>\n<h4>Filament: Y\u00f6netim Paneli Geli\u015ftirmede Devrim<\/h4>\n<p>Filament, Laravel i\u00e7in h\u0131zl\u0131 bir \u015fekilde y\u00f6netim panelleri, formlar, tablolar ve raporlar olu\u015fturmaya yarayan, Livewire tabanl\u0131, a\u00e7\u0131k kaynakl\u0131 bir ara\u00e7t\u0131r. Geli\u015ftiricilerin saatler s\u00fcren aray\u00fcz geli\u015ftirme s\u00fcre\u00e7lerini dakikalara indirmesini sa\u011flar. Zuora \u0130\u015f Ak\u0131\u015f\u0131 Y\u00f6neticisi i\u00e7in bir aray\u00fcz olu\u015ftururken, Filament&#8217;in sundu\u011fu haz\u0131r bile\u015fenler ve kolay \u00f6zelle\u015ftirilebilirlik sayesinde, i\u015f ak\u0131\u015flar\u0131n\u0131 tan\u0131mlamak, ad\u0131mlar\u0131 y\u00f6netmek ve durumlar\u0131n\u0131 izlemek i\u00e7in sezgisel bir panel olu\u015fturabiliriz.<\/p>\n<h4>Di\u011fer Bile\u015fenler: Veritaban\u0131 ve Kuyruklar<\/h4>\n<p>Projemizde veri depolama i\u00e7in genellikle PostgreSQL veya MySQL gibi ili\u015fkisel veritabanlar\u0131 tercih edilir. \u0130\u015f ak\u0131\u015f\u0131 tan\u0131mlar\u0131n\u0131, ad\u0131mlar\u0131n\u0131, g\u00f6revlerini ve durumlar\u0131n\u0131 bu veritaban\u0131nda saklayaca\u011f\u0131z. Arka plan i\u015flemleri ve asenkron g\u00f6revler i\u00e7in ise Redis veya Beanstalkd gibi bir kuyruk sistemi kullanaca\u011f\u0131z. Bu, Zuora API&#8217;sine yap\u0131lan \u00e7a\u011fr\u0131lar\u0131n veya uzun s\u00fcren i\u015f ak\u0131\u015f\u0131 ad\u0131mlar\u0131n\u0131n ana uygulama performans\u0131n\u0131 etkilemeden paralel olarak y\u00fcr\u00fct\u00fclmesini sa\u011flar.<\/p>\n<h4>Neden Bu Kombinasyon?<\/h4>\n<p>Laravel&#8217;in sa\u011flam arka u\u00e7 yetenekleri ile Filament&#8217;in h\u0131zl\u0131 ve estetik \u00f6n u\u00e7 geli\u015ftirme g\u00fcc\u00fc birle\u015fti\u011finde, hem g\u00fc\u00e7l\u00fc hem de kullan\u0131m\u0131 kolay bir uygulama ortaya \u00e7\u0131kar. Bu kombinasyon, geli\u015ftirme s\u00fcresini k\u0131salt\u0131r, bak\u0131m maliyetlerini d\u00fc\u015f\u00fcr\u00fcr ve gelecekteki geni\u015flemeler i\u00e7in sa\u011flam bir temel sunar.<\/p>\n<h3>Mimari Tasar\u0131m ve Veritaban\u0131 Modelleri<\/h3>\n<p>\u0130\u015f ak\u0131\u015f\u0131 y\u00f6neticimizin kalbi, iyi d\u00fc\u015f\u00fcn\u00fclm\u00fc\u015f bir mimari tasar\u0131m ve veritaban\u0131 \u015femas\u0131d\u0131r. Bu, uygulaman\u0131n \u00f6l\u00e7eklenebilir, bak\u0131m\u0131 kolay ve esnek olmas\u0131n\u0131 sa\u011flar.<\/p>\n<h4>Temel Varl\u0131klar: \u0130\u015f Ak\u0131\u015flar\u0131, Ad\u0131mlar, G\u00f6revler<\/h4>\n<p>Projemizin temelini olu\u015fturan \u00fc\u00e7 ana varl\u0131k vard\u0131r:<br \/>\n*   <strong>\u0130\u015f Ak\u0131\u015f\u0131 (Workflow):<\/strong> Belirli bir i\u015f s\u00fcrecini temsil eden ana varl\u0131k (\u00f6rn: &#8220;Yeni Abonelik Aktivasyonu&#8221;).<br \/>\n*   <strong>Ad\u0131m (Step):<\/strong> Bir i\u015f ak\u0131\u015f\u0131 i\u00e7indeki tek bir eylem veya a\u015fama (\u00f6rn: &#8220;Zuora Hesap Olu\u015ftur&#8221;, &#8220;\u00d6deme Y\u00f6ntemi Do\u011frula&#8221;).<br \/>\n*   <strong>G\u00f6rev (Task):<\/strong> Bir ad\u0131m\u0131n somutla\u015fm\u0131\u015f hali, yani bir i\u015f ak\u0131\u015f\u0131 \u00f6rne\u011fi i\u00e7indeki belirli bir ad\u0131m\u0131n y\u00fcr\u00fct\u00fclmesi (\u00f6rn: &#8220;Abonelik ID 123 i\u00e7in Zuora Hesap Olu\u015fturma G\u00f6revi&#8221;).<\/p>\n<h4>Zuora Entegrasyonu i\u00e7in Modeller<\/h4>\n<p>Zuora ile entegrasyonu kolayla\u015ft\u0131rmak i\u00e7in, Zuora&#8217;dan gelen veya Zuora&#8217;ya g\u00f6nderilen verileri temsil eden modeller de tan\u0131mlayabiliriz. \u00d6rne\u011fin, <code>ZuoraAccount<\/code>, <code>ZuoraSubscription<\/code> gibi modeller, Zuora nesnelerinin yerel bir temsilini tutarak, API \u00e7a\u011fr\u0131lar\u0131n\u0131 ve veri senkronizasyonunu daha y\u00f6netilebilir hale getirebilir.<\/p>\n<h4>Veritaban\u0131 \u015eemas\u0131 Tasar\u0131m\u0131<\/h4>\n<p>A\u015fa\u011f\u0131da temel varl\u0131klar i\u00e7in basitle\u015ftirilmi\u015f bir veritaban\u0131 \u015femas\u0131 \u00f6rne\u011fi bulunmaktad\u0131r:<\/p>\n<pre><code class=\"language-html\"><pre><code>\nCREATE TABLE workflows (\n    id BIGINT PRIMARY KEY AUTO_INCREMENT,\n    name VARCHAR(255) NOT NULL,\n    description TEXT,\n    is_active BOOLEAN DEFAULT TRUE,\n    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,\n    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP\n);\n\nCREATE TABLE workflow_steps (\n    id BIGINT PRIMARY KEY AUTO_INCREMENT,\n    workflow_id BIGINT NOT NULL,\n    name VARCHAR(255) NOT NULL,\n    description TEXT,\n    order_index INT NOT NULL,\n    action_type VARCHAR(255), -- E.g., 'zuora_api_call', 'email_notification', 'manual_approval'\n    action_config JSON, -- API endpoint, email template, etc.\n    is_skippable BOOLEAN DEFAULT FALSE,\n    FOREIGN KEY (workflow_id) REFERENCES workflows(id) ON DELETE CASCADE,\n    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,\n    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP\n);\n\nCREATE TABLE workflow_tasks (\n    id BIGINT PRIMARY KEY AUTO_INCREMENT,\n    workflow_id BIGINT NOT NULL,\n    current_step_id BIGINT,\n    status VARCHAR(50) NOT NULL DEFAULT 'pending', -- E.g., 'pending', 'in_progress', 'completed', 'failed'\n    context JSON, -- Data relevant to the specific workflow instance\n    started_at TIMESTAMP,\n    completed_at TIMESTAMP,\n    FOREIGN KEY (workflow_id) REFERENCES workflows(id) ON DELETE CASCADE,\n    FOREIGN KEY (current_step_id) REFERENCES workflow_steps(id) ON DELETE SET NULL,\n    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,\n    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP\n);\n<\/code><\/pre>\n<h4>\u0130li\u015fkiler ve Veri B\u00fct\u00fcnl\u00fc\u011f\u00fc<\/h4>\n<p>Yukar\u0131daki \u015femada, <code>workflows<\/code> tablosu <code>workflow_steps<\/code> tablosu ile bire-\u00e7ok (one-to-many) ili\u015fkiye sahiptir. Her i\u015f ak\u0131\u015f\u0131n\u0131n birden fazla ad\u0131m\u0131 olabilir. <code>workflow_tasks<\/code> tablosu ise hem <code>workflows<\/code> hem de <code>workflow_steps<\/code> tablolar\u0131yla ili\u015fkilidir. Bu, her bir g\u00f6revin hangi i\u015f ak\u0131\u015f\u0131na ait oldu\u011funu ve o anda hangi ad\u0131mda oldu\u011funu izlememizi sa\u011flar. Laravel'in Eloquent ORM'i bu ili\u015fkileri kolayca y\u00f6netmemize olanak tan\u0131r.<\/p>\n<h3>Zuora Entegrasyonu: API \u0130leti\u015fimi<\/h3>\n<p>Zuora ile etkile\u015fim, uygulaman\u0131n temel i\u015flevselli\u011fini olu\u015fturur. Bu, Zuora'n\u0131n REST API'si arac\u0131l\u0131\u011f\u0131yla ger\u00e7ekle\u015ftirilir.<\/p>\n<h4>Zuora API'sini Anlamak<\/h4>\n<p>Zuora API'si, hesap olu\u015fturma, abonelikleri y\u00f6netme, faturaland\u0131rma ve \u00f6deme i\u015flemleri gibi bir\u00e7ok i\u015flemi programatik olarak yapmam\u0131z\u0131 sa\u011flar. API genellikle OAuth 2.0 veya Basit Kimlik Do\u011frulama (Client ID\/Secret) ile korunur. \u0130stekler genellikle JSON format\u0131nda g\u00f6nderilir ve yan\u0131tlar da JSON format\u0131nda al\u0131n\u0131r.<\/p>\n<h4>Laravel HTTP \u0130stemcisi ile \u0130stekler<\/h4>\n<p>Laravel, HTTP istemcisi sayesinde harici API'lerle kolayca ileti\u015fim kurmay\u0131 sa\u011flar. Zuora API'sine istek g\u00f6ndermek i\u00e7in bu istemciyi kullanabiliriz.<\/code>php<\/p>\n<pre><code>\nuse Illuminate\\Support\\Facades\\Http;\n\nclass ZuoraService\n{\n    protected $baseUrl;\n    protected $clientId;\n    protected $clientSecret;\n    protected $accessToken;\n\n    public function __construct()\n    {\n        $this->baseUrl = config('services.zuora.base_url');\n        $this->clientId = config('services.zuora.client_id');\n        $this->clientSecret = config('services.zuora.client_secret');\n    }\n\n    protected function getAccessToken()\n    {\n        if ($this->accessToken) {\n            return $this->accessToken;\n        }\n\n        $response = Http::asForm()->post($this->baseUrl . '\/oauth\/token', [\n            'client_id' => $this->clientId,\n            'client_secret' => $this->clientSecret,\n            'grant_type' => 'client_credentials',\n        ]);\n\n        $response->throw(); \/\/ Hata durumunda istisna f\u0131rlat\n\n        $this->accessToken = $response->json('access_token');\n        return $this->accessToken;\n    }\n\n    public function createAccount(array $data)\n    {\n        $token = $this->getAccessToken();\n        $response = Http::withToken($token)\n                        ->post($this->baseUrl . '\/v1\/accounts', $data);\n\n        $response->throw();\n        return $response->json();\n    }\n\n    \/\/ Di\u011fer Zuora API metotlar\u0131 (getSubscription, updateProduct, vb.)\n}\n<\/pre>\n<p><\/code><\/p>\n<h4>Kimlik Do\u011frulama ve G\u00fcvenlik<\/h4>\n<p>Zuora API'sine eri\u015fim i\u00e7in kimlik do\u011frulama kritik \u00f6neme sahiptir. Genellikle bir <code>client_id<\/code> ve <code>client_secret<\/code> kullanarak bir eri\u015fim belirteci (access token) al\u0131n\u0131r. Bu belirte\u00e7, sonraki t\u00fcm API \u00e7a\u011fr\u0131lar\u0131nda <code>Authorization<\/code> ba\u015fl\u0131\u011f\u0131nda kullan\u0131l\u0131r. Hassas verileri <code>.env<\/code> dosyas\u0131nda saklamak ve bunlar\u0131 <code>config\/services.php<\/code> \u00fczerinden eri\u015filebilir k\u0131lmak iyi bir uygulamad\u0131r.<\/p>\n<h4>Hata Y\u00f6netimi ve Yeniden Deneme Mekanizmalar\u0131<\/h4>\n<p>API \u00e7a\u011fr\u0131lar\u0131 s\u0131ras\u0131nda a\u011f sorunlar\u0131, Zuora taraf\u0131ndaki hatalar veya ge\u00e7ici aksakl\u0131klar ya\u015fanabilir. Bu durumlar i\u00e7in sa\u011flam hata y\u00f6netimi ve yeniden deneme (retry) mekanizmalar\u0131 uygulamak \u00f6nemlidir. Laravel'in HTTP istemcisi <code>retry()<\/code> metodunu sunar, bu sayede belirli bir hata kodu al\u0131nd\u0131\u011f\u0131nda veya ba\u011flant\u0131 kesildi\u011finde iste\u011fi otomatik olarak yeniden deneyebiliriz.<\/p>\n<h3>Filament ile Kullan\u0131c\u0131 Aray\u00fcz\u00fc ve Y\u00f6netim<\/h3>\n<p>Filament, y\u00f6netim panelimizi olu\u015fturmak i\u00e7in bize inan\u0131lmaz bir h\u0131z ve esneklik sa\u011flar. \u0130\u015f ak\u0131\u015flar\u0131n\u0131 tan\u0131mlamak, y\u00f6netmek ve izlemek i\u00e7in sezgisel bir aray\u00fcz olu\u015fturaca\u011f\u0131z.<\/p>\n<h4>\u0130\u015f Ak\u0131\u015f\u0131 Tan\u0131mlama Formlar\u0131<\/h4>\n<p>Filament'in <code>Forms<\/code> bile\u015feni sayesinde, yeni i\u015f ak\u0131\u015flar\u0131 olu\u015fturmak veya mevcutlar\u0131 d\u00fczenlemek i\u00e7in kolayca formlar tasarlayabiliriz. Kullan\u0131c\u0131lar, i\u015f ak\u0131\u015f\u0131n\u0131n ad\u0131n\u0131, a\u00e7\u0131klamas\u0131n\u0131 ve ba\u015flang\u0131\u00e7 ko\u015fullar\u0131n\u0131 belirleyebilir.<\/p>\n<pre><code class=\"language-php\"><pre><code>\nuse Filament\\Forms\\Components\\Card;\nuse Filament\\Forms\\Components\\TextInput;\nuse Filament\\Forms\\Components\\Textarea;\nuse Filament\\Forms\\Components\\Toggle;\n\nclass WorkflowResource extends Resource\n{\n    protected static ?string $model = Workflow::class;\n    protected static ?string $navigationIcon = 'heroicon-o-flow';\n\n    public static function form(Form $form): Form\n    {\n        return $form\n            ->schema([\n                Card::make()\n                    ->schema([\n                        TextInput::make('name')\n                            ->required()\n                            ->maxLength(255),\n                        Textarea::make('description')\n                            ->maxLength(65535),\n                        Toggle::make('is_active')\n                            ->label('Aktif Mi?')\n                            ->default(true),\n                    ])\n                    ->columns(1),\n            ]);\n    }\n\n    \/\/ ... di\u011fer resource metotlar\u0131 (table, pages, vb.)\n}\n<\/code><\/pre>\n<h4>Ad\u0131m ve G\u00f6rev Y\u00f6netimi<\/h4>\n<p>Her i\u015f ak\u0131\u015f\u0131 i\u00e7in ad\u0131mlar\u0131 (steps) tan\u0131mlamak ve bu ad\u0131mlar\u0131n s\u0131ras\u0131n\u0131, t\u00fcr\u00fcn\u00fc ve yap\u0131land\u0131rmas\u0131n\u0131 belirlemek i\u00e7in i\u00e7 i\u00e7e formlar veya ili\u015fkili kaynaklar kullanabiliriz. Filament'in <code>Repeater<\/code> veya <code>HasMany<\/code> ili\u015fkileri bu t\u00fcr senaryolar i\u00e7in idealdir. G\u00f6revlerin (tasks) durumunu izlemek i\u00e7in ise <code>Tables<\/code> bile\u015fenini kullanarak listeler ve filtreler olu\u015fturabiliriz.<\/p>\n<h4>\u0130\u015f Ak\u0131\u015f\u0131 Durum \u0130zleme Paneli<\/h4>\n<p>Filament'in <code>Widgets<\/code> ve <code>Pages<\/code> \u00f6zelliklerini kullanarak, aktif i\u015f ak\u0131\u015flar\u0131n\u0131n genel durumunu g\u00f6steren bir kontrol paneli olu\u015fturabiliriz. Bu panel, tamamlanm\u0131\u015f, devam eden veya ba\u015far\u0131s\u0131z olan g\u00f6revlerin say\u0131s\u0131n\u0131, belirli bir i\u015f ak\u0131\u015f\u0131n\u0131n ilerlemesini ve potansiyel sorunlar\u0131 h\u0131zl\u0131ca g\u00f6rmemizi sa\u011flar. Renkli g\u00f6stergeler ve grafikler, durumu daha anla\u015f\u0131l\u0131r hale getirebilir.<\/p>\n<h4>Kullan\u0131c\u0131 Yetkilendirme ve Rol Y\u00f6netimi<\/h4>\n<p>Filament, Laravel'in kendi yetkilendirme mekanizmas\u0131yla sorunsuz bir \u015fekilde entegre olur. Spatie'nin <code>laravel-permission<\/code> paketi ile birlikte kullan\u0131ld\u0131\u011f\u0131nda, farkl\u0131 kullan\u0131c\u0131 rollerine (\u00f6rn: \"Y\u00f6netici\", \"\u0130\u015f Ak\u0131\u015f\u0131 Tasar\u0131mc\u0131s\u0131\", \"\u0130zleyici\") farkl\u0131 eri\u015fim seviyeleri tan\u0131mlayabiliriz. Bu sayede, yaln\u0131zca yetkili kullan\u0131c\u0131lar\u0131n i\u015f ak\u0131\u015flar\u0131n\u0131 olu\u015fturmas\u0131na, d\u00fczenlemesine veya ba\u015flatmas\u0131na izin verebiliriz.<\/p>\n<h3>\u0130\u015f Ak\u0131\u015f\u0131 Motoru ve Arka Plan \u0130\u015flemleri<\/h3>\n<p>Uygulamam\u0131z\u0131n beyni, i\u015f ak\u0131\u015flar\u0131n\u0131 y\u00fcr\u00fcten ve Zuora ile etkile\u015fimi sa\u011flayan i\u015f ak\u0131\u015f\u0131 motorudur. Bu motor, arka plan i\u015flemleriyle desteklenir.<\/p>\n<h4>Kuyruk Sistemleri (Queues) ile Asenkron \u00c7al\u0131\u015fma<\/h4>\n<p>Zuora API \u00e7a\u011fr\u0131lar\u0131 veya karma\u015f\u0131k hesaplamalar gibi uzun s\u00fcren i\u015flemler, ana uygulama iste\u011fini bloke etmemelidir. Laravel'in kuyruk sistemi, bu t\u00fcr g\u00f6revleri arka plana atarak uygulaman\u0131n yan\u0131t verme s\u00fcresini art\u0131r\u0131r. Bir i\u015f ak\u0131\u015f\u0131 ad\u0131m\u0131 tetiklendi\u011finde, ilgili g\u00f6revi bir kuyru\u011fa atar\u0131z ve bir worker s\u00fcreci bu g\u00f6revi asenkron olarak i\u015fler.<\/code>php<\/p>\n<pre><code>\n\/\/ Bir i\u015f ak\u0131\u015f\u0131 ad\u0131m\u0131n\u0131 i\u015flemek i\u00e7in Job s\u0131n\u0131f\u0131\nclass ProcessWorkflowStep implements ShouldQueue\n{\n    use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;\n\n    public WorkflowTask $task;\n\n    public function __construct(WorkflowTask $task)\n    {\n        $this->task = $task;\n    }\n\n    public function handle(ZuoraService $zuoraService)\n    {\n        \/\/ G\u00f6revin mevcut ad\u0131m\u0131n\u0131 al\n        $step = $this->task->currentStep;\n\n        \/\/ Ad\u0131m\u0131n tipine g\u00f6re farkl\u0131 i\u015flemler yap\n        switch ($step->action_type) {\n            case 'zuora_api_call':\n                \/\/ Zuora API \u00e7a\u011fr\u0131s\u0131 yap\n                $response = $zuoraService->callApi($step->action_config['endpoint'], $this->task->context);\n                \/\/ Yan\u0131t\u0131 i\u015fle, g\u00f6revin durumunu g\u00fcncelle\n                $this->task->update(['status' => 'completed', 'context' => array_merge($this->task->context, ['zuora_response' => $response])]);\n                break;\n            case 'email_notification':\n                \/\/ E-posta g\u00f6nder\n                Mail::to($this->task->context['email'])->send(new WorkflowNotification($this->task));\n                $this->task->update(['status' => 'completed']);\n                break;\n            \/\/ ... di\u011fer ad\u0131m tipleri\n        }\n\n        \/\/ Bir sonraki ad\u0131m\u0131 tetikle (e\u011fer varsa)\n        \/\/ ...\n    }\n}\n<\/pre>\n<p><\/code><\/p>\n<h4>\u0130\u015f Ak\u0131\u015f\u0131 Tetikleyicileri ve Zamanlay\u0131c\u0131lar (Cron Jobs)<\/h4>\n<p>\u0130\u015f ak\u0131\u015flar\u0131 manuel olarak ba\u015flat\u0131labilece\u011fi gibi, belirli olaylar veya zamanlanm\u0131\u015f g\u00f6revler taraf\u0131ndan da tetiklenebilir.<br \/>\n*   <strong>Olay Tabanl\u0131 Tetikleyiciler:<\/strong> Zuora'dan gelen webhook'lar (\u00f6rn: \"yeni abonelik olu\u015fturuldu\") veya uygulaman\u0131n i\u00e7indeki belirli bir olay (\u00f6rn: \"kullan\u0131c\u0131 formu g\u00f6nderdi\") bir i\u015f ak\u0131\u015f\u0131n\u0131 ba\u015flatabilir.<br \/>\n*   <strong>Zamanlanm\u0131\u015f Tetikleyiciler:<\/strong> Laravel'in g\u00f6rev zamanlay\u0131c\u0131s\u0131 (Scheduler), belirli aral\u0131klarla (\u00f6rn: her gece, her saat ba\u015f\u0131) \u00e7al\u0131\u015fan cron i\u015fleri tan\u0131mlamam\u0131z\u0131 sa\u011flar. Bu, \u00f6rne\u011fin belirli bir durumda olan abonelikleri kontrol eden veya periyodik raporlar olu\u015fturan i\u015f ak\u0131\u015flar\u0131n\u0131 ba\u015flatmak i\u00e7in kullan\u0131labilir.<\/p>\n<h4>Durum Ge\u00e7i\u015fleri ve Mant\u0131k Katman\u0131<\/h4>\n<p>Her g\u00f6rev, bir dizi durumdan (pending, in_progress, completed, failed) ge\u00e7er. \u0130\u015f ak\u0131\u015f\u0131 motoru, bu durum ge\u00e7i\u015flerini y\u00f6netir ve her ad\u0131m tamamland\u0131\u011f\u0131nda veya ba\u015far\u0131s\u0131z oldu\u011funda ne olaca\u011f\u0131n\u0131 belirler. Ko\u015fullu mant\u0131k, bir ad\u0131m\u0131n sonucuna g\u00f6re farkl\u0131 yollar izlenmesini sa\u011flayabilir (\u00f6rn: \"\u00f6deme ba\u015far\u0131l\u0131ysa aboneli\u011fi aktifle\u015ftir, ba\u015far\u0131s\u0131zsa m\u00fc\u015fteri hizmetlerine bildirim g\u00f6nder\").<\/p>\n<h4>Loglama ve \u0130zleme<\/h4>\n<p>\u0130\u015f ak\u0131\u015flar\u0131n\u0131n sorunsuz \u00e7al\u0131\u015ft\u0131\u011f\u0131ndan emin olmak i\u00e7in kapsaml\u0131 loglama ve izleme hayati \u00f6neme sahiptir. Her ad\u0131m\u0131n ba\u015flang\u0131c\u0131, biti\u015fi, ba\u015far\u0131 durumu, ba\u015far\u0131s\u0131zl\u0131k nedeni ve ilgili hata mesajlar\u0131 loglanmal\u0131d\u0131r. Laravel'in yerle\u015fik loglama yetenekleri veya Monolog gibi k\u00fct\u00fcphaneler bu ama\u00e7la kullan\u0131labilir. Ayr\u0131ca, Filament \u00fczerinde bir log g\u00f6r\u00fcnt\u00fcleyici veya izleme paneli olu\u015fturarak, y\u00f6neticilerin i\u015f ak\u0131\u015flar\u0131n\u0131n durumunu ger\u00e7ek zamanl\u0131 olarak takip etmesini sa\u011flayabiliriz.<\/p>\n<h3>G\u00fcvenlik, Performans ve \u00d6l\u00e7eklenebilirlik<\/h3>\n<p>Herhangi bir kurumsal uygulama gibi, Zuora \u0130\u015f Ak\u0131\u015f\u0131 Y\u00f6neticisi de g\u00fcvenlik, performans ve \u00f6l\u00e7eklenebilirlik a\u00e7\u0131s\u0131ndan sa\u011flam olmal\u0131d\u0131r.<\/p>\n<h4>API Anahtarlar\u0131 ve Hassas Veri Y\u00f6netimi<\/h4>\n<p>Zuora API anahtarlar\u0131 ve di\u011fer hassas bilgiler asla kod taban\u0131nda a\u00e7\u0131k metin olarak saklanmamal\u0131d\u0131r. Bunlar <code>.env<\/code> dosyalar\u0131 arac\u0131l\u0131\u011f\u0131yla y\u00f6netilmeli ve sunucu ortam\u0131nda g\u00fcvenli bir \u015fekilde depolanmal\u0131d\u0131r. Ayr\u0131ca, uygulaman\u0131n kendisi i\u00e7in de g\u00fc\u00e7l\u00fc kimlik do\u011frulama ve yetkilendirme mekanizmalar\u0131 (Laravel Sanctum, Passport) kullan\u0131lmal\u0131d\u0131r.<\/p>\n<h4>Performans Optimizasyonlar\u0131<\/h4>\n<p>*   <strong>Veritaban\u0131 \u0130ndeksleri:<\/strong> S\u0131k\u00e7a sorgulanan tablolarda (\u00f6rn: <code>workflow_tasks<\/code> tablosundaki <code>status<\/code> veya <code>workflow_id<\/code> s\u00fctunlar\u0131) uygun indeksler olu\u015fturmak, sorgu performans\u0131n\u0131 \u00f6nemli \u00f6l\u00e7\u00fcde art\u0131r\u0131r.<br \/>\n*   <strong>\u00d6nbellekleme (Caching):<\/strong> S\u0131k\u00e7a eri\u015filen ancak nadiren de\u011fi\u015fen verileri (\u00f6rn: i\u015f ak\u0131\u015f\u0131 tan\u0131mlar\u0131) \u00f6nbelle\u011fe almak, veritaban\u0131 y\u00fck\u00fcn\u00fc azalt\u0131r ve yan\u0131t s\u00fcrelerini iyile\u015ftirir. Laravel'in Redis veya Memcached tabanl\u0131 \u00f6nbellekleme s\u00fcr\u00fcc\u00fcleri kullan\u0131labilir.<br \/>\n*   <strong>Kuyruklar:<\/strong> Uzun s\u00fcren i\u015flemleri kuyruklara atmak, ana uygulaman\u0131n h\u0131zl\u0131 kalmas\u0131n\u0131 sa\u011flar.<br \/>\n*   <strong>Lazy Loading:<\/strong> Eloquent ili\u015fkilerinde gereksiz veri y\u00fcklemelerini \u00f6nlemek i\u00e7in <code>with()<\/code> veya <code>load()<\/code> gibi eager loading y\u00f6ntemleri ak\u0131ll\u0131ca kullan\u0131lmal\u0131d\u0131r.<\/p>\n<h4>\u00d6l\u00e7eklenebilirlik Stratejileri<\/h4>\n<p>Uygulaman\u0131n gelecekteki b\u00fcy\u00fcme ve artan y\u00fck\u00fc kald\u0131rabilmesi i\u00e7in \u00f6l\u00e7eklenebilirlik \u00f6nemlidir.<br \/>\n*   <strong>Yatay \u00d6l\u00e7eklendirme (Horizontal Scaling):<\/strong> Uygulama sunucular\u0131n\u0131 ve kuyruk worker'lar\u0131n\u0131 birden fazla \u00f6rne\u011fe yayarak y\u00fck\u00fc da\u011f\u0131tabiliriz.<br \/>\n*   <strong>Veritaban\u0131 Optimizasyonu:<\/strong> Veritaban\u0131 okuma\/yazma i\u015flemlerini ay\u0131rmak (read replicas) veya sharding gibi ileri d\u00fczey veritaban\u0131 stratejileri, \u00e7ok y\u00fcksek y\u00fcklerde d\u00fc\u015f\u00fcn\u00fclebilir.<br \/>\n*   <strong>Mikroservis Mimarisi (Gelecekte):<\/strong> Ba\u015flang\u0131\u00e7ta monolitik bir yap\u0131 tercih edilse de, gelecekte belirli mod\u00fclleri (\u00f6rn: Zuora entegrasyon servisi, bildirim servisi) mikroservislere ay\u0131rmak, daha fazla \u00f6l\u00e7eklenebilirlik ve ba\u011f\u0131ms\u0131z geli\u015ftirme imkan\u0131 sunabilir.<\/p>\n<h4>Hata Tolerans\u0131 ve Yedeklilik<\/h4>\n<p>Uygulaman\u0131n kesintisiz \u00e7al\u0131\u015fmas\u0131 i\u00e7in hata tolerans\u0131 ve yedeklilik planlar\u0131 olmal\u0131d\u0131r. Veritaban\u0131 yedeklemeleri, sunucu yedeklili\u011fi (failover), kuyruk sistemlerinin y\u00fcksek eri\u015filebilirli\u011fi (HA) ve otomatik kurtarma mekanizmalar\u0131 bu kapsamda de\u011ferlendirilmelidir.<\/p>\n<h3>Sonu\u00e7<\/h3>\n<p>Laravel 12 ve Filament ile kendi Zuora \u0130\u015f Ak\u0131\u015f\u0131 Y\u00f6neticinizi olu\u015fturmak, i\u015fletmenizin Zuora kullan\u0131m\u0131n\u0131 bir \u00fcst seviyeye ta\u015f\u0131yacak g\u00fc\u00e7l\u00fc ve esnek bir \u00e7\u00f6z\u00fcmd\u00fcr. Bu yakla\u015f\u0131m, Zuora'n\u0131n temel yeteneklerini korurken, size \u00f6zel i\u015f s\u00fcre\u00e7lerini otomatikle\u015ftirme, karma\u015f\u0131k entegrasyonlar\u0131 y\u00f6netme ve operasyonel verimlili\u011fi art\u0131rma imkan\u0131 sunar. H\u0131zl\u0131 geli\u015ftirme, g\u00fc\u00e7l\u00fc arka u\u00e7 ve sezgisel bir y\u00f6netim paneli sayesinde, bu proje hem geli\u015ftiriciler hem de son kullan\u0131c\u0131lar i\u00e7in de\u011ferli bir yat\u0131r\u0131m olacakt\u0131r. Kendi i\u015f ak\u0131\u015flar\u0131n\u0131z\u0131 tam kontrol alt\u0131na alarak, daha ak\u0131ll\u0131, daha h\u0131zl\u0131 ve daha hatas\u0131z bir operasyonel yap\u0131ya kavu\u015fabilirsiniz.<\/p>\n<h3>SSS (S\u0131k Sorulan Sorular)<\/h3>\n<h4>1. Neden Zuora'n\u0131n kendi i\u015f ak\u0131\u015f\u0131 arac\u0131n\u0131 (Flow Builder) kullanmad\u0131k?<\/h4>\n<p>Zuora'n\u0131n Flow Builder'\u0131 bir\u00e7ok standart senaryo i\u00e7in harika bir ara\u00e7t\u0131r. Ancak, \u00e7ok \u00f6zel i\u015f mant\u0131klar\u0131, derinlemesine \u00fc\u00e7\u00fcnc\u00fc taraf entegrasyonlar\u0131, \u00f6zel onay s\u00fcre\u00e7leri veya \u00e7ok karma\u015f\u0131k ko\u015fullu dallanmalar gerekti\u011finde, esnekli\u011fi s\u0131n\u0131rl\u0131 kalabilir. Kendi \u00e7\u00f6z\u00fcm\u00fcm\u00fcz, tam \u00f6zelle\u015ftirme ve kontrol sa\u011flar.<\/p>\n<h4>2. Bu \u00e7\u00f6z\u00fcm k\u00fc\u00e7\u00fck \u015firketler i\u00e7in uygun mu?<\/h4>\n<p>Bu \u00e7\u00f6z\u00fcm, ba\u015flang\u0131\u00e7ta biraz daha fazla geli\u015ftirme \u00e7abas\u0131 gerektirse de, uzun vadede karma\u015f\u0131k ve tekrarlayan i\u015f s\u00fcre\u00e7lerine sahip her b\u00fcy\u00fckl\u00fckteki \u015firket i\u00e7in de\u011ferlidir. \u00d6zellikle b\u00fcy\u00fcyen ve operasyonlar\u0131n\u0131 otomatikle\u015ftirmek isteyen k\u00fc\u00e7\u00fck ve orta \u00f6l\u00e7ekli i\u015fletmeler, Laravel ve Filament'in h\u0131zl\u0131 geli\u015ftirme avantajlar\u0131ndan faydalanabilir.<\/p>\n<h4>3. Geli\u015ftirme s\u00fcresi ne kadar s\u00fcrer?<\/h4>\n<p>Geli\u015ftirme s\u00fcresi, i\u015f ak\u0131\u015flar\u0131n\u0131n karma\u015f\u0131kl\u0131\u011f\u0131na, entegrasyon say\u0131s\u0131na ve geli\u015ftirme ekibinin deneyimine ba\u011fl\u0131d\u0131r. Filament sayesinde y\u00f6netim paneli olu\u015fturma s\u00fcresi \u00f6nemli \u00f6l\u00e7\u00fcde k\u0131sal\u0131rken, Zuora API entegrasyonu ve i\u015f ak\u0131\u015f\u0131 mant\u0131\u011f\u0131n\u0131n geli\u015ftirilmesi zaman alabilir. Basit bir MVP (Minimum Viable Product) birka\u00e7 hafta i\u00e7inde tamamlanabilirken, tam \u00f6zellikli bir sistem birka\u00e7 ay s\u00fcrebilir.<\/p>\n<h4>4. G\u00fcvenlik nas\u0131l sa\u011flan\u0131yor?<\/h4>\n<p>G\u00fcvenlik, API anahtarlar\u0131n\u0131n g\u00fcvenli bir \u015fekilde saklanmas\u0131, Laravel'in yerle\u015fik kimlik do\u011frulama ve yetkilendirme mekanizmalar\u0131, d\u00fczenli g\u00fcvenlik g\u00fcncellemeleri, HTTPS kullan\u0131m\u0131 ve hassas verilerin \u015fifrelenmesi gibi y\u00f6ntemlerle sa\u011flan\u0131r. Ayr\u0131ca, Zuora API'sine eri\u015fim i\u00e7in en az ayr\u0131cal\u0131k prensibi uygulanmal\u0131d\u0131r.<\/p>\n<h4>5. Bu \u00e7\u00f6z\u00fcm Zuora'n\u0131n gelecekteki API de\u011fi\u015fikliklerine nas\u0131l uyum sa\u011flar?<\/h4>\n<p>Zuora API'sindeki de\u011fi\u015fikliklere uyum sa\u011flamak i\u00e7in, Zuora entegrasyon mant\u0131\u011f\u0131n\u0131 ayr\u0131 bir servis katman\u0131nda (\u00f6rne\u011fin <code>ZuoraService<\/code> s\u0131n\u0131f\u0131) tutmak en iyisidir. Bu sayede, API de\u011fi\u015fiklikleri oldu\u011funda sadece bu servis katman\u0131n\u0131 g\u00fcncellemek yeterli olur, uygulaman\u0131n geri kalan\u0131 etkilenmez. Ayr\u0131ca, Zuora'n\u0131n API versiyonlama politikalar\u0131n\u0131 takip etmek ve g\u00fcncellemeleri d\u00fczenli olarak kontrol etmek \u00f6nemlidir.<\/p>\n","protected":false},"excerpt":{"rendered":"Laravel 12 ve Filament ile Zuora \u0130\u015f Ak\u0131\u015f\u0131 Y\u00f6neticisi Geli\u015ftirme: Kapsaml\u0131 Bir Rehber\nG\u00fcn\u00fcm\u00fcz\u00fcn abonelik tabanl\u0131 ekonomisinde, \u015firketlerin geli&#8230;","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"csco_page_header_type":"","csco_page_load_nextpost":"","csco_page_subscribe_form":"","csco_page_contact_form":"","footnotes":""},"categories":[133],"tags":[],"class_list":{"0":"post-37602","1":"post","2":"type-post","3":"status-publish","4":"format-standard","6":"category-php","7":"cs-entry","8":"cs-video-wrap"},"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v20.5 (Yoast SEO v25.3.1) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Laravel 12 ve Filament ile Zuora \u0130\u015f Ak\u0131\u015f\u0131 Y\u00f6neticisi Geli\u015ftirme: Kapsaml\u0131 Bir Rehber - Kodlar\u0131n Gizemli D\u00fcnyas\u0131<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/fatihsoysal.com\/blog\/laravel-12-ve-filament-ile-zuora-is-akisi-yoneticisi-gelistirme-kapsamli-bir-rehber\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Laravel 12 ve Filament ile Zuora \u0130\u015f Ak\u0131\u015f\u0131 Y\u00f6neticisi Geli\u015ftirme: Kapsaml\u0131 Bir Rehber\" \/>\n<meta property=\"og:description\" content=\"Laravel 12 ve Filament ile Zuora \u0130\u015f Ak\u0131\u015f\u0131 Y\u00f6neticisi Geli\u015ftirme: Kapsaml\u0131 Bir Rehber G\u00fcn\u00fcm\u00fcz\u00fcn abonelik tabanl\u0131 ekonomisinde, \u015firketlerin geli...\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fatihsoysal.com\/blog\/laravel-12-ve-filament-ile-zuora-is-akisi-yoneticisi-gelistirme-kapsamli-bir-rehber\/\" \/>\n<meta property=\"og:site_name\" content=\"Kodlar\u0131n Gizemli D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2026-01-10T10:30:40+00:00\" \/>\n<meta name=\"author\" content=\"Fatih Soysal\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Yazan:\" \/>\n\t<meta name=\"twitter:data1\" content=\"Fatih Soysal\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tahmini okuma s\u00fcresi\" \/>\n\t<meta name=\"twitter:data2\" content=\"18 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/laravel-12-ve-filament-ile-zuora-is-akisi-yoneticisi-gelistirme-kapsamli-bir-rehber\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/laravel-12-ve-filament-ile-zuora-is-akisi-yoneticisi-gelistirme-kapsamli-bir-rehber\/\"},\"author\":{\"name\":\"Fatih Soysal\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"headline\":\"Laravel 12 ve Filament ile Zuora \u0130\u015f Ak\u0131\u015f\u0131 Y\u00f6neticisi Geli\u015ftirme: Kapsaml\u0131 Bir Rehber\",\"datePublished\":\"2026-01-10T10:30:40+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/laravel-12-ve-filament-ile-zuora-is-akisi-yoneticisi-gelistirme-kapsamli-bir-rehber\/\"},\"wordCount\":2936,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"articleSection\":[\"PHP\"],\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/laravel-12-ve-filament-ile-zuora-is-akisi-yoneticisi-gelistirme-kapsamli-bir-rehber\/#respond\"]}],\"copyrightYear\":\"2026\",\"copyrightHolder\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/laravel-12-ve-filament-ile-zuora-is-akisi-yoneticisi-gelistirme-kapsamli-bir-rehber\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/laravel-12-ve-filament-ile-zuora-is-akisi-yoneticisi-gelistirme-kapsamli-bir-rehber\/\",\"name\":\"Laravel 12 ve Filament ile Zuora \u0130\u015f Ak\u0131\u015f\u0131 Y\u00f6neticisi Geli\u015ftirme: Kapsaml\u0131 Bir Rehber - Kodlar\u0131n Gizemli D\u00fcnyas\u0131\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\"},\"datePublished\":\"2026-01-10T10:30:40+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/laravel-12-ve-filament-ile-zuora-is-akisi-yoneticisi-gelistirme-kapsamli-bir-rehber\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/laravel-12-ve-filament-ile-zuora-is-akisi-yoneticisi-gelistirme-kapsamli-bir-rehber\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/laravel-12-ve-filament-ile-zuora-is-akisi-yoneticisi-gelistirme-kapsamli-bir-rehber\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Anasayfa\",\"item\":\"https:\/\/fatihsoysal.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Laravel 12 ve Filament ile Zuora \u0130\u015f Ak\u0131\u015f\u0131 Y\u00f6neticisi Geli\u015ftirme: Kapsaml\u0131 Bir Rehber\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/\",\"name\":\"Fatihsoysal.com\",\"description\":\"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim\",\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"tr\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\",\"name\":\"Fatih Soysal\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"tr\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"contentUrl\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"width\":512,\"height\":512,\"caption\":\"Fatih Soysal\"},\"logo\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\"},\"description\":\"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Laravel 12 ve Filament ile Zuora \u0130\u015f Ak\u0131\u015f\u0131 Y\u00f6neticisi Geli\u015ftirme: Kapsaml\u0131 Bir Rehber - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/fatihsoysal.com\/blog\/laravel-12-ve-filament-ile-zuora-is-akisi-yoneticisi-gelistirme-kapsamli-bir-rehber\/","og_locale":"tr_TR","og_type":"article","og_title":"Laravel 12 ve Filament ile Zuora \u0130\u015f Ak\u0131\u015f\u0131 Y\u00f6neticisi Geli\u015ftirme: Kapsaml\u0131 Bir Rehber","og_description":"Laravel 12 ve Filament ile Zuora \u0130\u015f Ak\u0131\u015f\u0131 Y\u00f6neticisi Geli\u015ftirme: Kapsaml\u0131 Bir Rehber G\u00fcn\u00fcm\u00fcz\u00fcn abonelik tabanl\u0131 ekonomisinde, \u015firketlerin geli...","og_url":"https:\/\/fatihsoysal.com\/blog\/laravel-12-ve-filament-ile-zuora-is-akisi-yoneticisi-gelistirme-kapsamli-bir-rehber\/","og_site_name":"Kodlar\u0131n Gizemli D\u00fcnyas\u0131","article_published_time":"2026-01-10T10:30:40+00:00","author":"Fatih Soysal","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"Fatih Soysal","Tahmini okuma s\u00fcresi":"18 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fatihsoysal.com\/blog\/laravel-12-ve-filament-ile-zuora-is-akisi-yoneticisi-gelistirme-kapsamli-bir-rehber\/#article","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/laravel-12-ve-filament-ile-zuora-is-akisi-yoneticisi-gelistirme-kapsamli-bir-rehber\/"},"author":{"name":"Fatih Soysal","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"headline":"Laravel 12 ve Filament ile Zuora \u0130\u015f Ak\u0131\u015f\u0131 Y\u00f6neticisi Geli\u015ftirme: Kapsaml\u0131 Bir Rehber","datePublished":"2026-01-10T10:30:40+00:00","mainEntityOfPage":{"@id":"https:\/\/fatihsoysal.com\/blog\/laravel-12-ve-filament-ile-zuora-is-akisi-yoneticisi-gelistirme-kapsamli-bir-rehber\/"},"wordCount":2936,"commentCount":0,"publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"articleSection":["PHP"],"inLanguage":"tr","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/fatihsoysal.com\/blog\/laravel-12-ve-filament-ile-zuora-is-akisi-yoneticisi-gelistirme-kapsamli-bir-rehber\/#respond"]}],"copyrightYear":"2026","copyrightHolder":{"@id":"https:\/\/fatihsoysal.com\/blog\/#organization"}},{"@type":"WebPage","@id":"https:\/\/fatihsoysal.com\/blog\/laravel-12-ve-filament-ile-zuora-is-akisi-yoneticisi-gelistirme-kapsamli-bir-rehber\/","url":"https:\/\/fatihsoysal.com\/blog\/laravel-12-ve-filament-ile-zuora-is-akisi-yoneticisi-gelistirme-kapsamli-bir-rehber\/","name":"Laravel 12 ve Filament ile Zuora \u0130\u015f Ak\u0131\u015f\u0131 Y\u00f6neticisi Geli\u015ftirme: Kapsaml\u0131 Bir Rehber - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/#website"},"datePublished":"2026-01-10T10:30:40+00:00","breadcrumb":{"@id":"https:\/\/fatihsoysal.com\/blog\/laravel-12-ve-filament-ile-zuora-is-akisi-yoneticisi-gelistirme-kapsamli-bir-rehber\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fatihsoysal.com\/blog\/laravel-12-ve-filament-ile-zuora-is-akisi-yoneticisi-gelistirme-kapsamli-bir-rehber\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/fatihsoysal.com\/blog\/laravel-12-ve-filament-ile-zuora-is-akisi-yoneticisi-gelistirme-kapsamli-bir-rehber\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Anasayfa","item":"https:\/\/fatihsoysal.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Laravel 12 ve Filament ile Zuora \u0130\u015f Ak\u0131\u015f\u0131 Y\u00f6neticisi Geli\u015ftirme: Kapsaml\u0131 Bir Rehber"}]},{"@type":"WebSite","@id":"https:\/\/fatihsoysal.com\/blog\/#website","url":"https:\/\/fatihsoysal.com\/blog\/","name":"Fatihsoysal.com","description":"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim","publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"tr"},{"@type":["Person","Organization"],"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1","name":"Fatih Soysal","image":{"@type":"ImageObject","inLanguage":"tr","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","contentUrl":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","width":512,"height":512,"caption":"Fatih Soysal"},"logo":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/"},"description":"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.","url":"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/"}]}},"yoast_meta":{"yoast_wpseo_title":"","yoast_wpseo_metadesc":"","yoast_wpseo_canonical":""},"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/37602","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/comments?post=37602"}],"version-history":[{"count":0,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/37602\/revisions"}],"wp:attachment":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/media?parent=37602"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/categories?post=37602"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/tags?post=37602"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}