"Gerçek dünyada" herhangi bir aracı kullanırken, o aracın nasıl çalıştığını anlarsanız kendinizi daha güvende hissedersiniz. Uygulama geliştirme de farklı değildir. Geliştirme araçlarınızın nasıl çalıştığını anladığınızda, onları kullanırken kendinizi daha rahat ve güvende hissedersiniz. Bu yazının amacı, Laravel çerçevesinin nasıl çalıştığına dair iyi ve üst düzey bir genel bakış sunmaktır. Genel çerçeveyi daha iyi tanıyarak, her şey daha az "sihirli" hissettirir ve uygulamalarınızı oluştururken daha fazla kendinize güvenirsiniz. Tüm terimleri hemen anlamazsanız, cesaretinizi kaybetmeyin! Sadece neler olup bittiğine dair temel bir kavrayış elde etmeye çalışın ve belgenin diğer bölümlerini keşfettikçe bilginiz artacaktır.
Yaşam Döngüsü Genel Bakışı - İlk Adımlar
Laravel uygulamasına gelen tüm isteklerin giriş noktası public/index.php dosyasıdır. Tüm istekler web sunucunuzun (Apache / Nginx) yapılandırması tarafından bu dosyaya yönlendirilir. index.php dosyası çok fazla kod içermez. Bunun yerine, çerçevenin geri kalanını yüklemek için bir başlangıç noktasıdır. index.php dosyası Composer tarafından oluşturulan otomatik yükleyici tanımını yükler ve ardından bootstrap/app.php'den Laravel uygulamasının bir örneğini alır. Laravel'in kendisi tarafından gerçekleştirilen ilk eylem, uygulama / servis konteynerinin bir örneğini oluşturmaktır.
HTTP / Konsol (Artisan) Çekirdekleri
Sonra, gelen istek, uygulamaya giren istek türüne bağlı olarak, uygulama örneğinin handleRequest veya handleCommand yöntemleri kullanılarak HTTP çekirdeğine veya konsol çekirdeğine gönderilir. Bu iki çekirdek, tüm isteklerin aktığı merkezi konum olarak hizmet eder. Şimdilik, IlluminateFoundationHttpKernel örneği olan HTTP çekirdeğine odaklanalım. HTTP çekirdeği, istek yürütülmeden önce çalıştırılacak bir önyükleyici dizisi tanımlar. Bu önyükleyiciler hata işlemeyi yapılandırır, günlük kaydını yapılandırır, uygulama ortamını algılar ve istek gerçekten işlenmeden önce yapılması gereken diğer görevleri gerçekleştirir. Genellikle, bu sınıflar endişelenmenize gerek olmayan dahili Laravel yapılandırmasını işler. HTTP çekirdeği ayrıca isteği uygulamanın ara yazılım yığınından geçirmekten de sorumludur. Bu ara yazılımlar HTTP oturumunu okuma ve yazma, uygulamanın bakım modunda olup olmadığını belirleme, CSRF belirtecini doğrulama ve daha fazlasını gerçekleştirir. Bunlar hakkında yakında daha fazla konuşacağız. HTTP çekirdeğinin handle yöntemi için yöntem imzası oldukça basittir: Bir İstek alır ve bir Yanıt döndürür. Çekirdeği tüm uygulamanızı temsil eden büyük bir kara kutu olarak düşünün. Ona HTTP istekleri besleyin ve HTTP yanıtları döndürecektir.
Servis Sağlayıcılar (Service Providers)
En önemli çekirdek önyükleme eylemlerinden biri uygulamanız için servis sağlayıcılarını yüklemektir. Servis sağlayıcıları, veritabanı, kuyruk, doğrulama ve yönlendirme bileşenleri gibi çerçevenin çeşitli bileşenlerinin tümünü önyüklemekten sorumludur. Laravel bu sağlayıcılar listesinde yineleme yapacak ve her birini örnekleyecektir. Sağlayıcıları örnekledikten sonra, kayıt yöntemi tüm sağlayıcılarda çağrılacaktır. Daha sonra, tüm sağlayıcılar kaydedildikten sonra, önyükleme yöntemi her sağlayıcıda çağrılacaktır. Bu, hizmet sağlayıcılarının önyükleme yöntemleri yürütüldüğünde her kapsayıcı bağlamasının kaydedilmesine ve kullanılabilir olmasına bağlı olabileceği anlamına gelir. Esasen Laravel tarafından sunulan her önemli özellik bir servis sağlayıcı tarafından önyüklenir ve yapılandırılır. Çerçeve tarafından sunulan birçok özelliği önyükledikleri ve yapılandırdıkları için, servis sağlayıcılar tüm Laravel önyükleme sürecinin en önemli yönüdür. Çerçeve dahili olarak düzinelerce hizmet sağlayıcı kullanırken, siz de kendinizinkini oluşturma seçeneğiniz var. Uygulamanızın kullandığı kullanıcı tanımlı veya üçüncü taraf hizmet sağlayıcılarının listesini bootstrap/providers.php dosyasında bulabilirsiniz.
Yönlendirme (Routing)
Uygulama başlatıldıktan ve tüm servis sağlayıcılar kaydedildikten sonra, İstek dağıtım için yönlendiriciye teslim edilecektir. Yönlendirici (Router), isteği bir rotaya veya denetleyiciye gönderecek ve ayrıca rotaya özgü herhangi bir ara yazılımı çalıştıracaktır. Middleware, uygulamanıza giren HTTP isteklerini filtrelemek veya incelemek için kullanışlı bir mekanizma sağlar. Örneğin, Laravel, uygulamanızın kullanıcısının kimliğinin doğrulanıp doğrulanmadığını doğrulayan bir middleware içerir. Kullanıcı kimliği doğrulanmamışsa, middleware kullanıcıyı oturum açma ekranına yönlendirir. Ancak, kullanıcı kimliği doğrulanmışsa, middleware isteğin uygulamaya daha fazla ilerlemesine izin verir. Bazı middleware'ler, PreventRequestsDuringMaintenance gibi uygulama içindeki tüm rotalara atanırken, bazıları yalnızca belirli rotalara veya rota gruplarına atanır. İstek eşleşen rotanın atanmış tüm ara yazılımlarından geçerse, rota veya denetleyici yöntemi yürütülür ve rota veya denetleyici yöntemi tarafından döndürülen yanıt, rotanın ara yazılım zinciri aracılığıyla geri gönderilir.
İstek Yaşam Döngüsünü Bitirme (Finishing)
Rota veya denetleyici yöntemi bir yanıt döndürdüğünde, yanıt rotanın ara yazılımı aracılığıyla dışarıya doğru geri döner ve uygulamaya giden yanıtı değiştirme veya inceleme şansı verir. Son olarak, yanıt ara yazılımdan geri döndüğünde, HTTP çekirdeğinin handle yöntemi yanıt nesnesini uygulama örneğinin handleRequest'ine döndürür ve bu yöntem döndürülen yanıtta send yöntemini çağırır. Send yöntemi yanıt içeriğini kullanıcının web tarayıcısına gönderir. Artık Laravel istek yaşam döngüsünün tamamındaki yolculuğumuzu tamamladık!
Servis Sağlayıcılara Odaklanma
Servis sağlayıcıları, bir Laravel uygulamasını önyüklemenin gerçek anahtarıdır. Uygulama örneği oluşturulur, hizmet sağlayıcıları kaydedilir ve istek önyüklemeli uygulamaya iletilir. Gerçekten bu kadar basit! Bir Laravel uygulamasının servis sağlayıcıları aracılığıyla nasıl oluşturulup önyüklendiğine dair sağlam bir kavrayışa sahip olmak çok değerlidir. Uygulamanızın kullanıcı tanımlı servis sağlayıcıları app/Providers dizininde saklanır. Varsayılan olarak, AppServiceProvider oldukça boştur. Bu sağlayıcı, uygulamanızın kendi önyüklemesini ve servis kapsayıcısı bağlamalarını eklemek için harika bir yerdir. Büyük uygulamalar için, her biri uygulamanız tarafından kullanılan belirli servisler için daha ayrıntılı önyüklemeye sahip birkaç servis sağlayıcı oluşturmak isteyebilirsiniz.