1 2 |
$b = 0; $a = ($b == 0) ? true : false; |
işe yarar kod blokları
1 2 |
$b = 0; $a = ($b == 0) ? true : false; |
users tablosuna git api_token diye bir kolon oluştur. 70-80 karakter sınırı belirle. kolon unique, null olsun.
sonra buna üye kayıt sırasında random 60 karakterli bir string ver.
1 |
Str::random(60) |
sonra sorgu esnasında api_token=xxx diye sorguya ekle olsun bitsin. hepsi bu kadar.
route’da link oluştururken auth:api yazmayı unutmayın.
laravel 6 ile gelen özellikle beraber auth kısmını bootstrap, react vs vs içinde ayrı ayrı kullanmak için ui metodu geldi. başka bişi için de gelmiş olabilir ama benim için auth.
ilk önce ui aktif ediyoruz.
1 |
composer require laravel/ui |
eğer react veya vue kullanacaksak vue ama ben şu an giriş viewleri bootstrap olsun diyorum ve aşağıdaki kodu yazıyorum. hepsi bu kadar.
1 |
php artisan ui bootstrap --auth |
veya
1 |
php artisan ui:auth |
en son bootstrap dosyaları için
1 |
npm install && npm run dev |
app/exceptions/handler.php içinde en alttaki render kısmına geliyoruz.
1 2 3 4 5 6 |
if ($exception instanceof ModelNotFoundException) return (new ApiController)->apiResponse(ResultType::Error, null, 'kayıt bulunamadı',JsonResponse::HTTP_NOT_FOUND); else if($exception instanceof NotFoundHttpException) return (new ApiController)->apiResponse(ResultType::Error, null, 'sayfa bulunamadı',JsonResponse::HTTP_NOT_FOUND); return parent::render($request,$exception); |
bir tane responseapi diye bir kontroller oluşturalım aşağıdaki kodu yazalım.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
public function apiResponse($resultType,$data,$message = null, $code = 200) { $response = []; $response['success'] = $resultType == ResultType::Success ? true : false; if(isset($data)) { if($resultType != ResultType::Error) { $response['data'] = $data; } if($resultType == ResultType::Error) { $response['errors'] = $data; } } if(isset($message)) { $response['message'] = $message; } return response()->json($response,$code); } //en alta bir class oluşturup class ResultType { const Success =1; const Information = 2; const Warning = 3; const Error = 4; } |
sonra hangi controllerda kullanacak isek onun fonksiyonların başlamadan class tanımının yapıldığı yerde (class contollerismi extends Controller) sonu controller diye biten kısma yukarıda oluşturduğumuz controller ismini verin. şimdi kullanıcağımız controllera gelip;
örneğin bir veri ekleme yapıyoruz
1 2 3 4 5 6 |
$validator = Validator::make($request->all(),[ 'email' => 'required|email' ]); if($validator->fails()) return $this->apiResponse(ResultType::Error,$validator->errors(),'Kontrol Hataları',422); |
bu rest apinin kaynağı ve yukarıdaki kodların yaratıcı olan cem abimizin rest api videosunda daha fazlasını bulabilirsiniz : https://www.udemy.com/course/laravel-ile-sifirdan-restful-api-uygulamalari-gelistirme/
ilk önce controllerimiza ürünleri çekelim;
1 |
$urun = Urun::paginate(10); /* ürün tablomuzdan verileri çektik. |
sonra api resource oluşturmamız gerekiyor hemen oluşturalım;
1 |
php artisan resource UrunKategorileriResource |
Şimdi kategorileri çekeceğimiz için kategoriler için de bir resource oluşturalım.
1 |
php artisan resource KategoriResource |
Kategoriresource içine
1 |
return [ id => $this->id, kategori_ad => $this->ad ]; |
Urunkategorileri resource’a;
1 2 3 4 5 |
return [ id => $this->id, ad => $this->ad, kategoriler => Kategoriresource::collection($this->kategorimodel); ]; |
şimdi bu kategorimodel nerden çıktı derseniz o Ürün tablomuzun modelinden çıktı. Ürün tablomuzun modelinde kategori ile ürünleri bağladığımız fonksiyonu direk buraya bağlayarak kategorileri listeleyebiliriz.
en son kendi tekrar kendi controllerımıza gelelim ve tekrar ekleme yapalım
1 2 |
$urun = Urun::paginate(10); /* ürün tablomuzdan verileri çektik. return UrunKategorileriResource:collection($urun); |
yine bir önceki telegram bot yazımdaki şeyleri başını kopyalıyorum:
ilk önce telegram uygulamasını indirin ve webden giriş yapın.
https://web.telegram.org/
daha sonra https://web.telegram.org/#/im?p=@BotFather botfathera bağlanıyoruz. adamlar bizim bot yapacağımızı bildiğinden bize bot yapma botu yapmışlar. evet bunu da yaptılar.
bu çocuğa ilk diyoruz /newbot sonra o bize diyor isim ver veriyoruz sonra bi daha isim istiyor fakat sonunda _bot olacak şekilde veriyoruz ve bize bir anahtar key veriyor.
he işte o anahtar keyi al şimdi kalsın o.
şimdi birisi mesaj yazdığında senin cevap vereceğin php dosyan nerede ise onu sisteme kaydet. örneğin alicancanpolat.com/telegram/ içinde benim.
1 2 3 |
https://api.telegram.org/bot{anahtarini buraya yapıştır}/setWebhook?url={linki buraya koy} örn: https://api.telegram.org/bot22132:23hasdgjaksdas/setWebhook?url=https://www.alicancanpolat.com/telegram/ |
webhook was set diyecek buranın sonucu. artık bota biri bir şey yazdığı zaman benim belirlediğim alicancanpolat.com/telegram’a yazılan şey gidecek. tabi ana dizini verdiğim için index.php’ye gidecek. şimdi oradan o veriyi okumamız gerekecek.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
$token = "1012347263:AAGEsg9tY2PiXKbKxb1yuk1d-nbD9gs_g98"; //Tokenimiz $api = "https://api.telegram.org/bot".$token; //api bağlantısı $up = file_get_contents("php://input"); //Çıktıyı alıyoruz $upary = json_decode($up, TRUE); //Json formatındaki veriyi deşifre edip arrya çeviriyoruz $cid = $upary["message"]["chat"]["id"]; //Chat idsini alıyoruz $mesaj = $upary["message"]["text"]; //Mesajı alıyoruz if($mesaj == "selam"){ $msj = "aleyküm selam"; $request_params = [ 'chat_id' => $user_id, 'text' => $msj ]; $request_url = 'https://api.telegram.org/bot'.$token.'/sendMessage?'.http_build_query($request_params); } |
ilgili modele gidiyoruz ve casts yoksa kendimiz
1 2 3 |
protected $casts = [ 'created_at' => 'date:d-m-Y h:i:s' ] |
kullanıcılar tablosunda ad ve soyad diye ayrı kolonumuz var. biz bunu otomatik birleştirmek istiyor ve veritabanına dokunmak istemiyorsak modelimize
1 2 3 4 5 |
protected $appends = ['full_name']; public function getFullNameAttribute(){ return $this->ad." ".$this->soyad; } |
eğer ben bunu tüm sorgularda değil sadece kendi belirleyeceğim yerde full name diye bir kolon gelsin derseniz modeldeki protected ile başlayan kısmı siliyoruz ve kullanacağımız controllera gelip
1 |
$data->each->setAppends(['full_name']); |
model içerisine;
1 |
protected $hidden = ['kolonadi']; |
yok ben direk bir controller yaptım onun sonucunda çıkmasın diyorsan
1 |
$data = $data->makeHidden('kolonadi'); |