Gelecekteki ziyaretçiler için burada neler olduğuna dair biraz açıklama yapmanın yararlı olacağını düşündüm.
Illuminate\Http\Requestsınıf
Laravel'in Illuminate\Http\Requestsınıfının adlandırılmış bir yöntemi vardır all(aslında allyöntem, Requestsınıfın kullandığı, çağrılan bir özellikte tanımlanmıştır Illuminate\Http\Concerns\InteractsWithInput). allYöntemin yazım sırasındaki imzası şu şekildedir:
public function all($keys = null)
Bu yöntem olarak tanımlanmamıştır staticve bu nedenle yöntemi statik bir bağlamda çağırmaya çalıştığınızda, yani Illuminate\Http\Request::all()OP'nin sorusunda görüntülenen hatayı alırsınız. allBir örnek metot ve bir örneği mevcuttur bilgilerle fırsatlar olduğunu Requesthiç mantıklı bu şekilde çağırmak yüzden, sınıf.
Cepheler
Laravel'deki bir cephe, geliştiricilere IoC konteynerindeki nesnelere erişmenin ve bu nesnelerdeki yöntemlerin çağrılmasının uygun bir yolunu sağlar. Bir geliştirici, benzer bir cephede bir yöntemi "durağan" olarak Request::all()çağırabilir, ancak gerçek Illuminate\Http\Request nesnedeki gerçek yöntem çağrısı statik değildir .
Bir cephe, bir proxy gibi çalışır - IoC konteynerindeki bir nesneyi ifade eder ve statik yöntem çağrısını bu nesneye (statik olmayan olarak) iletir. Örneğin Illuminate\Support\Facades\Requestcepheyi ele alalım, göründüğü gibi:
class Request extends Facade
{
protected static function getFacadeAccessor()
{
return 'request';
}
}
Temel olarak, temel Illuminate\Support\Facades\Facadesınıf bazı PHP sihrini kullanır, yani şu __callStaticyöntemi kullanır:
- Bu durumda
allparametre olmadan statik bir yöntem çağrısını dinleyin
getFacadeAccessorBu durumda bir Illuminate\Http\Requestnesne tarafından döndürülen anahtarı kullanarak IoC konteynerinden temeldeki nesneyi alın
- Geri getirdiği nesnede statik olarak aldığı yöntemi dinamik olarak çağırın, bu durumda
allbir örneğinde statik olmayan olarak çağrılır Illuminate\Http\Request.
Bu nedenle, @patricus'un yukarıdaki cevabında belirttiği gibi, use/ import ifadesini cepheye atıfta bulunacak şekilde değiştirerek, hata artık orada değildir, çünkü PHP söz konusu olduğunda, allbir örneğinde doğru şekilde çağrılmıştır Illuminate\Http\Request.
Aliasing
Aliasing, Laravel'in kolaylık sağladığı bir başka özelliktir. Kök ad alanında cephelere işaret eden takma ad sınıflarını etkili bir şekilde oluşturarak çalışır. config/app.phpDosyanıza bir göz atarsanız , aliasesanahtarın altında, cephe sınıfları için uzun bir dizi eşleştirmeleri bulacaksınız. Örneğin:
'aliases' => [
'App' => Illuminate\Support\Facades\App::class,
'Artisan' => Illuminate\Support\Facades\Artisan::class,
'Auth' => Illuminate\Support\Facades\Auth::class,
'Request' => Illuminate\Support\Facades\Request::class,
Laravel, yapılandırmanıza bağlı olarak bu takma ad sınıflarını sizin için oluşturur ve bu, kök ad alanında bulunan sınıfları ( aliasesyapılandırmanın dize anahtarları tarafından anılır ) cephenin kendisini kullanıyormuş gibi kullanmanıza olanak tanır :
use Request:
class YourController extends Controller
{
public function yourMethod()
{
$input = Request::all();
}
}
Bağımlılık ekleme hakkında bir not
Laravel'de cepheler ve örtüşme hala sağlansa da, bağımlılık enjeksiyon yoluna gitmek mümkündür ve genellikle teşvik edilir. Örneğin, aynı sonucu elde etmek için yapıcı enjeksiyonu kullanmak:
use Illuminate\Http\Request;
class YourController extends Controller
{
protected $request;
public function __construct(Request $request)
{
$this->request = $request;
}
public function yourMethod()
{
$input = $this->request->all();
}
}
Bu yaklaşımın birçok faydası vardır, ancak kişisel görüşüme göre bağımlılık enjeksiyonunun en büyük yanlısı, kodunuzun test edilmesini kolaylaştırmasıdır. Sınıflarınızın bağımlılıklarını yapıcı veya yöntem argümanları olarak bildirerek, bu bağımlılıkları alay etmek ve sınıfınızı tek başına test etmek çok kolay hale gelir.