Giriş yapmadınız.

#1 08.07.2019 20:26:16

neri
Üye
Kayıtlı: 24.07.2018
Mesajlar: 206

Kontrolcülerdeki ajax cevaplarını dinamikleştirmek

Selamlar,

Bununla ilgili araştırma yaptım abstract klası oluşturulan örnekler gördüm ama tam olarak nasıl yapıldığını size sormak istedim. Kodlar şu şekilde:

Base AjaxController

 abstract class AjaxController extends Controller
    {
        protected function respondSuccess($message = 'Done!', $code = 200)
        {
            return response()->json([
                'success' => true,
                'message' => $message
            ], $code);
        }

        protected function respondWithError($message = 'Server error', $code = 500)
        {
            return response()->json([
                'success' => false,
                'message' => $message
            ], $code);
        }

Ajax işleminin yapıldığı Controller

class TestController extends AjaxController
{
  public function delete(Request $request, $id)
  {
   $destroy = Article::destroy($id);

    if ($destroy) {
            return $this->respondSuccess();
        }
    
    return $this->respondWithError();

Bu yöntem doğru olur mu ? Eğer olursa abstract sınıfı hazırlamanın doğru yolu nedir ?

Çevrimdışı

#2 08.07.2019 22:59:17

mgsmus
Moderatör
Yer: Mersin
Kayıtlı: 17.08.2013
Mesajlar: 1,703
Website

Yanıt: Kontrolcülerdeki ajax cevaplarını dinamikleştirmek

Bu yöntemleri abstract bir sınıf oluşturmadan direkt Controller sınıfına da ekleyebilirsiniz, bir trait oluşturup direkt TestController'a da ekleyebilirsiniz ya da hiç kullanmayabilirsiniz de. Ben bir katkısını göremedim.

Ama illa bu şekilde bir şeyler yapmak istiyorsanız:

\App\Providers\AppServiceProvider::boot() içerisine:

Response::macro('success', function ($message = 'Done!') {
    return Response::json([
        'success' => true,
        'message' => $message
    ]);
});

Daha sonra controller içerisinde

return response()->success()

Yani dediğim gibi, bu tür bir kullanımda ben bir katkısını göremiyorum. Öğrenmek için bakabilirsiniz.

Çevrimdışı

#3 09.07.2019 08:43:51

neri
Üye
Kayıtlı: 24.07.2018
Mesajlar: 206

Yanıt: Kontrolcülerdeki ajax cevaplarını dinamikleştirmek

@mgsmus hocam cevap icin tesekkur ederim

Çevrimdışı

#4 09.07.2019 08:47:31

deathisonitsway
Üye
Kayıtlı: 01.02.2016
Mesajlar: 476

Yanıt: Kontrolcülerdeki ajax cevaplarını dinamikleştirmek

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..

Son düzenleyen deathisonitsway (09.07.2019 09:01:57)


Laravel does not save you. Php knowledge only save you. Do not become a Laravel programmer, just the opposite,become php developer.

Çevrimdışı

#5 09.07.2019 10:11:11

neri
Üye
Kayıtlı: 24.07.2018
Mesajlar: 206

Yanıt: Kontrolcülerdeki ajax cevaplarını dinamikleştirmek

Tamam hocam vazgectim bu sekilde tasarlamaktan mgsmus da gerek gormedi anladigim kadariyla sorun yasamaya gebe bi yontem altindan da kalkamayabilirim cevaplar icin tesekkur ederim.

Çevrimdışı

Forum alt kısmı