Laravel Model CRUD PHP

 Laravel Model CRUD PHP

/*
bir tane model sayfası oluşturuyoruz.

console:php artisan make:model Bilgiler
*/

myProject\app\Models\Bilgiler.php
<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;

class Bilgiler extends Model
{
use HasFactory;

protected $table = "bilgiler"; //dbdeki tablo adımız.
public $timestamps = true; //created_at,updated_ad alanlarını otomatik eklmesi için true yaptık.

//Kullanıcağımız alanları burada belirlyoruz.
protected $fillable = [
"metin",
"created_at",
"updated_ad"
];
}
?>

/*
controller oluşturup buradan model işlemlerimizi gerçekleştiriyoruz.
console:php artisan make:controller ModelIslemleri

methodları route üzerinden çağırıp kullanabilirsiniz.

*/

<?php
namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Models\Bilgiler; //Modelimizi çağrıyoruz.
use DB;

class ModelIslemleri extends Controller
{
public function bilgiler(){
$bilgi = Bilgiler::get();

foreach($bilgi as $key =>$val){
echo $val->id ." - ".$val->metin ."<br>";
}
}

public function bilgilerID(){
$bilgi = Bilgiler::where("id",1)->first();
$bilgi = Bilgiler::whereId(1)->first(); //whereId baş harfini büyük olarak field adını yazarakda kullanabiliriz
$bilgi = Bilgiler::whereMetin("örnek")->first(); //whereMetin baş harfini büyük olarak field adını yazarakda kullanabiliriz
$bilgi = Bilgiler::find(1); //find kısa şekilde kullanabiliriz.

echo $bilgi->metin;


}

public function ekle(){
Bilgiler::create([
"metin" => "Örnek bir metin bilgisi girişi yapıldı",
//bir kayıtı belirtiğimizde modelde sonda bvirgül olması gerekir, bazı sunucularda hata almamak için
]);
}

public function guncelle(){
Bilgiler::whereId(1)->update([
"metin" => "metin update edildi",
//bir kayıtı belirtiğimizde modelde sonda bvirgül olması gerekir, bazı sunucularda hata almamak için
]);
}

public function sil(){
Bilgiler::whereId(1)->delete();
}

}

Laravel DB CRUD PHP

 laravel DB

Modele göre DB kütüphanesi yavaş olduğu için özel durumlarda kulanılabilir.

/*
ilk olarak bir controller oluşturup buradan veritabanı işlemlerimizi gerçekleştiriyoruz.
console:php artisan make:controller VeritabaniIslemleri

methodları route üzerinden çağırıp kullanabilirsiniz.

*/

<?php
namespace App\Http\Controllers;

use Illuminate\Http\Request;
use DB;

class VeritabaniIslemleri extends Controller
{
public function bilgiler(){
$veriler = DB::table('bilgiler')->get(); //get methodu tüm kayıtları çeker.

foreach($veriler as $key =>$val){
echo $val->id ." - ".$val->metin ."<br>";
}
}

public function bilgilerID(){
$veriler = DB::table('bilgiler')->get(); //get methodu tüm kayıtları çeker.

foreach($veriler as $key =>$val){
echo $val->id ." - ".$val->metin ."<br>";
}
}

public function bilgiler(){
$veriler = DB::table('bilgiler')->where("id",1)->first(); //first tek bir kayıttı getirir.
echo $veriler->id ." - ".$veriler->metin ."<br>";
}

public function ekle(){
DB::table('bilgiler')->insert([
"metin" => "Örnek bir metin bilgisi girişi yapıldı"
]);
}

public function guncelle(){
DB::table('bilgiler')->where('id',1)->update([
"metin" => "Örnek bir metin bilgisi güncellendi."
]);
}

public function sil(){
DB::table('bilgiler')->where('id',1)->delete();
}
}

Laravel Mıgration PHP

 Laravel Mıgration PHP

laravel mysql üzerinden tablo oluşturma işlemleri

İlk olarak myProject\.env dosyamızda bulunan mysql kullanıcı adımızı ve veribanamızı yazıyoruz.


DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=veritabani_1
DB_USERNAME=root
DB_PASSWORD=123
Daha sonra aşağıdaki işlemleri gerçekleştirebiliriz.

/*
console:php artisan make:migration bilgiler --create=bilgiler

"bilgiler" adında bir migration dosyası oluşturuyoruz.
--create="bilgiler" tabloumuz adı.

up methodu dosya çalıştırıldığında yapılacak işlemlerin bulunduğu method.
down tabloda düzeneme veya kaldırma işleminde yapılacak işlemler için kullanılır.

*/

file:myProject\database\migrations\ 2022_08_08_163637_bilgiler

<?php

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

class Bilgiler extends Migration
{

public function up()
{
Schema::create('bilgiler', function (Blueprint $table) {
$table->id(); //tabloda otomatik artar olarak, AUTO_INCREMNT olarak tanımlı gelir.
$table->string('metin')->nullable(); //tabloda varchar olarak açar. "nullable" bu alan boş bırakılabilir.
$table->timestamps(); //tabloda created_at updated_at olarak iki alan açar otomatik olarak.
});
}

public function down()
{
Schema::dropIfExists('bilgiler');
}
}
?>

/*
oluşturduğumuz migrationı mysql aktarması için aşağıdaki komutu console ekranına yazıyoruz.
migrations klasorundeki tüm migrationları mysql aktrarır.

console: php artisan migrate

*/

Laravel Middleware PHP

 Laravel Middleware (Arakontrol)



/*
Yeni bir tane middleware oluşturmak için console aşağıdaki parametreleri giriyoruz.
console:php artisan make:middleware FormControl
   file:myProject\app\Http\Middleware\FormControl.php
*/

<?php
namespace App\Http\Middleware;
use Closure;
use Illuminate\Http\Request;

class FormControl
{
//handle -> tek fonksiyon üzerinden yönetebiliyoruz işlemlerimizi
public function handle(Request $request, Closure $next)
{
if($request->metin == "test"){
return redirect()->back();
}

return $next(request);
}
}

?>

/*
Middleware'imizin route işlemlerinde çalışması için bir tanımla yapıyoruz.
"'formcontrol'=>app\Http\Middleware\FormControl::class"
file:/Applications/Ampps/www/restapi_v1/app/Http/Middleware/Kernel.php
*/

<?php
protected $routeMiddleware = [
'auth' => \App\Http\Middleware\Authenticate::class,
'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
'cache.headers' => \Illuminate\Http\Middleware\SetCacheHeaders::class,
'can' => \Illuminate\Auth\Middleware\Authorize::class,
'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
'password.confirm' => \Illuminate\Auth\Middleware\RequirePassword::class,
'signed' => \Illuminate\Routing\Middleware\ValidateSignature::class,
'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class,
'formcontrol'=>app\Http\Middleware\FormControl::class
];
?>

/*
Route dosyamız içinde middlewareimizi çağrıyoruz.
file:myProject/routes/web.php
*/

<?php
//formController classını çağırmadan önce middlewaredeki kontrolümüze bakıyor eğer orayı geçemezse formController gitmiyor.
Route::middleware('formcontrol')->post("form",['formController::class','add'])->name('form_post');
?>

Laravel API_KEY PHP

 Laravel ile api key oluşturma



//ilk önce console üzerinden bir tane Authkey adlı middleware oluşturuyoruz.
console:php artisan make:middleware Authkey

/*
file:myProject/app/Http/Middleware/Authkey.php
oluşan middleware de request header içinden gelen APP_KEY değişkene aktarıp kontrolünü sağlıyoruz.
*/
public function handle(Request $request, Closure $next)
{
$token = $request->header('APP_KEY');
if($token != 'ABCD'){
return response()->json(['message'=>'App key not fount'],401);
}
return $next($request);
}

/*
file:/Applications/Ampps/www/restapi_v1/app/Http/Middleware/Kernel.php
Daha sonra Kernel.php dosyamızda api modelimizi kullanıcağımız zaman
Authkey middleware 'ımıza çağırıp handle methodumuzu laravelde tanımlı oldugu için otomatik çağırmış oluyoruz

*/
'api' => [
// \Laravel\Sanct'm\Http\Middleware\EnsureFrontendRequestsAreStateful::class,
'throttle:api',
\Illuminate\Routing\Middleware\SubstituteBindings::class,
\App\Http\Middleware\Authkey::class,
],
//yapacağımız request isteğinde header bölümüne "APP_KEY = ABCD" ekliyoruz.

Laravel Router PHP

 Laravel Route İşlemleri



Basit Route
  • get
  • post
  • view çağırma
  • controller çağırma
 
myProject/routes/web.php
<?php
use Illuminate\Support\Facades\Route;
use App\Http\Controllers\Ornek;

/* 1.)
localhost:8000/deneme
url get methodu ile açıldığında ekrana 'bu bir deneme sayfasıdır' yazdırır.
*/
Route::get('deneme', function(){
echo 'bu bir deneme sayfasıdır';
});


/* 2.)
localhost:8000/deneme2
url get methodu ile açıldığında ekrana myProject\resources\views\
içinde oluşturulan deneme2.blade.php sayfası açılacaktır.
view() komutu views klasoru içinde bulunan blade şablonlarını açar.
*/
Route::get('deneme2', function(){
return view('deneme2');
});


/* 3.)
localhost:8000/testsayfasi
Laravel controller dosyası oluşturmak console ekranına aşağıdaki komutu yazıyoruz.
console:php artisan make:controller Ornek
myproject\app\Http\Controllers\Ornek
Ornek.php içine public bir "test" adında method tanımlıyoruz.

url post methodu ile açıldığında Ornek.php içindeki test methoduna çağırır.

*/
Route::post('/testsayfasi',[Ornek::class,test]); //laravel 8 ile gelen routelama yöntemi.


/* 3.)
localhost:8000/testsayfasi
myproject\app\Http\Controllers\Ornek
Ornek.php içine public bir "test2" adında method tanımlıyoruz.
methodun içine $isim değişkenini tanımlıyoruz. public test2($test){ view('deneme2',['ad'=>$isim]); }

url get methodu ile açıldığında Ornek.php içindeki test2 methoduna çağırır.

*/
Route::get('/testsayfasi/{isim}',[Ornek::class,test2]); //laravel 8 ile gelen routelama yöntemi. ?>

Detaylı Route
  • Route get methodu
  • Route post methodu
  • Route put methodu
  • Route delete methodu
  • Route match methodu
  • Route any methodu
  • Route prefix methodu.

//*basit get route çağrımı
//Route::get('test',function(){
// dd('test');
//});

//*Birden fazla request methodunu çağırmak için.
Route::match(['get','post'],'test','HomeController@test');

//*Put ve Delete methodunun kullanımı örnek
Route::put('/test','Homecontroller@update')->name('update');
Route::get('/delete','Homecontroller@getdelete')->name('delete');
Route::delete('/delete','Homecontroller@delete')->name('delete');

//*Tüm istekleri karşılıyan method
Route::any('test-any','HomeController@anyTest')->name('test-any');


//*consoledan bu şekilde oluşturunca bize hem methodları hemde routeları da oluşturuyor
//*only diyerek index ve create rotları kullanabiliriz.
//*except yapınca index ve create hariç diğerlerini kullan diye biliriz.
//Route::resource('posts','PostController')->only('index','create');
//php artisan make:controller PostController --resource

//* Urlden parametre almak
//id nin yanındaki soru işareti parametre gelebilir gelmeyede bilir demek.
Route::get('/post/{lang}/{id?}','PostController@getPost');


//*Grouplama prefix işlemleri
Route::prefix('admin')->middleware('auth')->group(function(){
Route::get('/','AdminController@index')->name('admin.index');
});
//* Gelen değeri hem request den alabiliriz hemde route belirtiğimiz değişken adı ilede alabiliriz., sırasının bir önemi var route daki sıra ile aynı olmaldır.
//* eğer route id soru işareti verirsek static bir değer vermemiz lazım.
public function getPost(Request $request,$lang,$id=null)
{
dd($request->lang);
dd($id);
}

<form action="{{route('update')}}" method="POST">
@csrf
//formdan put olarak gönderme yöntemleri.<br>
@method('PUT')
{{method_field('PUT')}}
<input type="hidden" name="_method" value="PUT">
<input type="text" name="name" value="TEST">

<input type="submit" class="submit" value="g">
</form>