Soyut bir sınıf tanımlamanıza gerek yok direkt Controller sınıfına ekleyin zaten her kontrolcü onunla genişliyor.
Yalnız burada eksik olan şu.Bu tür şeyleri kullandığınızda illa son çıktıda vermek zorunda kalıyorsunuz bu uyarıyı.
Halbuki kod bölündüğünde bu tür bir süreci dahil etmek zorlaşıyor.
protected $maps = [];
public function testController()
{
$this->divide();
//olabilecek senaryo
if(!isset($this->maps['foo'])){
return response()->json();
}
return response()->json();
}
private function divide()
{
if(...) {
//burada exception isteniyor
//ama void işlem olduğu için ana methodda bir şey döndüremezseniz.
//böyle de formata uymuyor.
throw new Runtime('blabla');
}
$this->maps['foo'] = 'bar';
}
hiç hoş görünmüyor kontrolcü..kirli kod.
yani çözüm olarak çıktı yönteminizi exception formatına uyarlamalısınız.
throw new \foo();
procesin herhangi bir yerinde bu şekil bir exception fırlatatarakta aynı modellemenizi yakalayabilmeniz gerekir.
Örneğin; biz kendi apilerimizde bu formata uygun bir şey yazıyoruz.
public function index()
{
asa;
return ...
}
normalde bu kodun hata vermesi gerekmektedir.Ancak istediğimiz şey formata uygun dönmesi.yani son kullanıcıya html donmemesi gerekiyor.
{
"meta": {
"success": false,
"status": 500
},
"resource": {
"errorFile": "/var/www/html/UsersController.php",
"errorLine": 18,
"errorType": "Undefined",
"errorMessage": "Use of undefined constant asa - assumed 'asa' (this will throw an Error in a future version of PHP)",
"errorNo": 2
}
}
hiç bir şey yapmadıgım halde bu kodun cıktısı bu şekil..Net konuşmamakla beraber,eksik olan budur php dünyasında.
Api frameworklere bakmak lazım bunlar için.Yani ben kodun belirli bir bölgesinde işlemi kesmek istiyorum.
bunun icin gereksinimlerim.
1- formata uygun dönmesi şart
2- hangi dosyada (logda görebileceğim şekilde.testte gerçek çıktıda-prodda logta)
3- dosyanın hangi satırında
4- Kesinlikle http status code (http_response_code()) ile birlikte
5- mesaj acıklayıcı ve net ve dil yapısına uygun.
eğer apinizde bunlar varsa.Apiniz kaliteli olur.
Yoksa uğraşır durursunuz..