Laravel Eğitim
Merhabalar…
Bu yazımızda şu an dünyanın en çok kullanılan frameworkü olan Laravel in bazı kodlarını ve kullanımlarını örnekleyeğim. Bu yazı Laravel kullanmaya devam ettiğim müddetçe güncellenecektir. Yazıda belli bir mantık ve sıra gözetmeden kullandığım kodları dönüp bakabilmek amacıyla buraya aktaracağım. Bütün örnekler sadece laravel üzerine olmayabilir. Not almaya değer bulduğum bilgiler burada yer alacaktır.
Faydalı olması dileğiyle
Sıfırdan laravel kurmak için bir çok yol vardır.
Bana göre en kolayı: wamp server kurmanızdır.
indirmek için wamp sayfasını kullanabilirsiniz. İNDİRMEK İÇİN TIKLAYINIZ
Bu yazılımı kurduktan sonra git ve github kurmanız gerekmektedir.
Windows’ta Kurulum
Git’i Windows’da kurmak oldukça kolaydır. mysysGit projesi en basit kurulum yöntemlerinden birine sahip. Çalıştırılabilir kurulum dosyasını GitHub sayfasından indirip çalıştırmanız yeterli:
1 2 |
http://msysgit.github.com/ |
Kurulum tamamlandığında hem (daha sonra işe yarayacak olan SSH istemcisini de içeren) komut satırı nüshasına hem de standart kullanıcı arayüzüne sahip olacaksınız. (Alıntı: https://git-scm.com/book/tr/v1/Ba%C5%9Flang%C4%B1%C3%A7-Git-in-Kurulumu)
Şimdi sıfırdan laravel kurmak için wamp klasöründe www klasörüne gelip sağ tuş yapın ve “git bush here” tıklayın.
Sonrasında yeni bir laravel kurmak için
1 |
composer create-project --prefer-dist laravel/laravel blog |
yada daha basitçe
1 |
laravel new blog |
yazmanız yeterlidir.
Kurulum bitince aşağıdaki görüntüye kavuşmanız gerekiyor.
Kurulum sonrasında laravel e ulaşmak için aşağıdaki gibi adresi girmeniz gerekmektedir.
Şimdilik işler yolunda.
Laravel auth çözümü (users tablosu otomatik oluşmuyorsa)
NOT::::: laravel auth sisteminde users tablosu oluşturamıyor. bu sorunu çözmek için
app\Providers\AppServiceProvider.php yi açıp içine eklemeniz gereken kodlar var:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
<?php namespace App\Providers; use Illuminate\Support\ServiceProvider; use Illuminate\Support\Facades\Schema; class AppServiceProvider extends ServiceProvider { public function boot() { Schema::defaultStringLength(191); } public function register() { // } } |
kodlara schema ayarlarını yapınca sorunumuz çözülüyor.
1 |
php artisan migrate |
tekrar yazmanız gerebilir.
Şimdi sayfamızda kullanıcı adı ve şifre ile giriş yapılabilmesi için çalışalım:
1 |
php artisan make:auth |
sayfamıza tekrar girdiğimizde ekran aşağıdaki gibi olacaktır.
gördüğünüz gibi login ve register linkleri otomatik olarak geldi.
C:\wamp64\www\blog\app\Http\Controllers\Auth
C:\wamp64\www\blog\resources\views\auth
Buraya dosyaları kopyaladı.
Controller oluşturma
1 |
php artisan make:controller DenemeController |
bu komutu yazarak Deneme Controller oluşturduk.
eğer veritabanı işlemleri yapacaksak: düzenle, sil vb işlemleri yapabilmesi için
1 |
php artisan make:controller DenemeController --resource |
komutunu çalıştırmamız yeterlidir.
Bu komutla HomeController da index, create, update, show, edit ve destroy metodları tanımlanmış gelir.
Route yönlendirme
1 |
Route::get('/deneme', 'DenemeController@deneme'); |
Adres satırına blog/deneme yazıldığında artık routes/web.php dosyamıza bu komutu ekleyerek DenemeController daki ‘deneme’ fonksiyonuna yönlendiriyoruz.
Şimdi controllerdan değişken gönderelim:
1 2 3 4 |
public function deneme (){ $ad="Mustafa ŞADOĞLU"; return view ('deneme')->with('ad',$ad); } |
bu şekilde ‘ad’ değişkenini ->with ile göndereceğimizi belirttik ve alacağı değeri ‘$ad’ olarak belirledik.
deneme.blade.php dosyasında bunu göstermek için
1 2 3 |
deneme sayfası <br> {{$ad}} |
burada {{$ad}} ifadesi <?php echo $ad; ?> ile aynı işlemi yapmaktadır.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
Route::get('/', function () { return view('welcome'); }); Route::get('/about', function () { return view('about'); }); Route::get('/deneme', 'DenemeController@deneme'); Route::get('/form', 'DenemeController@form'); Route::get('/degisken/{id?}', 'HomeController@degisken' ); Auth::routes(); Route::get('/home', 'HomeController@index')->name('home'); |
Farklı örnekler:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
Route::get('/', function () { return 5 + 5 ; }); ------------------------------------------------- Route::get('/test/{id}', function ($id) { return "id değeri = " . $id ; }); ------------------------------------------------- Route::get('/test/{id?}', function ($id=null) { return "id değeri = " . $id ; }); ------------------------------------------------- Route::get('/test/{id?}', function ($id=12345) { return "id değeri = " . $id ; }); |
burada ? işareti değişkenin boş olabileceğini gösterir.
blogum.my yonlendirmesi
Şimdi adres satırında ‘blogum.my’ yazınca laravel sayfasının otomatik açılmasını sağlayan kodu ekliyoruz.
daha sonra tüm sistemleri tekrar çalıştırıyoruz.
wamp için ‘restart all service’
View yapısı
Genel şablon yapısı
Bu sayfayı “master.blade.php” adıyla kaydedelim.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
<html> <head> <title> @yield('title') </title> <link rel="stylesheet" type="text/css" href="/css/bootstrap.min.css" > <link rel="stylesheet" href="/css/bootstrap-theme.min.css"> <script src="/js/jquery-1.11.3.min.js"></script> <script src="/js/bootstrap.min.js"></script> </head> <body> @include('shared.navbar') @yield('content') </body> </html> |
Bu sayfadan “iletisim.blade.php” sayfası türetmek için
1 2 3 4 5 6 7 8 9 10 11 |
@extends('master') @section('title', 'İletişim') @section('content') <div class="container"> <div class="content"> <div class="title">Ana Sayfa</div> <div class="quote">Web Sitem!</div> </div> </div> @endsection |
Blade template
Blade Laravel in template motorudur. Laravel de mutlaka blade kullanmak zorunda değilsiniz. Ancak kullanmak isterseniz “dosya.blade.php” şeklinde kaydetmelisiniz.
1 |
{{ 'merhaba dünya' }} |
ile
1 |
<?php echo 'merhaba dünya'; ?> |
aynı işlemi yapmaktadır.
Yorum satırı için
1 |
{{ --yorum satırı-- }} |
yapmak yeterlidir.
html veya javascript kodlarının çalışması içim değişkenler aşağıdaki gibi !! işaretleriyle basılmalıdır.
1 2 |
{!! "<b>Merhaba dünya</b>" !!} // kalın yazacak {{ "<b>Merhaba dünya</b>" }} // <b>Merhaba dünya</b> yazacak |
Controllerdan değişken göndermek ve gelen değeri basmak için
1 2 3 4 5 6 7 |
//controller tarafı public function deneme (){ $ad="Mustafa ŞADOĞLU"; return view ('deneme')->with('ad',$ad); } //blade tarafı {{$ad}} |
controllerdan birden fazla değişken göndermek için
1 2 3 4 |
public function index(){ $ad='Ali'; $soyad="GEL"; return view('anasayfa',compact('ad','soyad')); |
Paket ilave etmek ve yüklemek
Paketlerin hepsini görmek için
https://packagist.org adresine bakılması gerekir.
html ve form eklentisini kurmak için (laravelcollective)
1 |
composer require laravelcollective/html |
yazdıktan sonra
1 2 3 4 5 6 7 8 9 10 11 12 13 |
// config/app.php içerisine 'providers' => [ // ... Collective\Html\HtmlServiceProvider::class, // ... ], // ve config/app.php içene bu satır eklenmelidir. 'aliases' => [ // ... 'Form' => Collective\Html\FormFacade::class, 'Html' => Collective\Html\HtmlFacade::class, // ... ], |
eklenmelidir.
Blade de form örneği
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
@extends('master') @section('title', 'İletişim') @section('content') {!!Form::open(array('url'=>'contact')) !!} {!! Form::label('Ad.....:') !!} {!! Form::text('ad',null,['placeholder'=>'ad ','id'=>'ad']) !!} <br> {!! Form::label('Soyad....:') !!} {!! Form::text('soyad',null,['placeholder'=>'soyad ','id'=>'soyad']) !!} <br> {!! Form::submit('Yolla') !!} {!! Form::close() !!} @endsection |
blade in form yapısını kullandığınızda CSRF TOKEN özelliği otomatik olarak çalışır.
Macro kullanımı
1 2 3 4 5 6 7 8 |
{!! Form::macro('myField', function() { return '<input type="text">'; }); !!} {!!Form::myField()!!} |
Diğer her türlü ek bilgi için:
https://laravelcollective.com/docs/master/html
Veritabanı işlemleri
ana dizinde bulunan “.env” dosyası içerisinde gerekli ayarlar yapılmalıdır.
1 2 3 4 5 |
DB_CONNECTION=mysql DB_HOST=127.0.0.1 DB_PORT=3306 DB_DATABASE=homestead DB_USERNAME=homeste |
şeklinde olan bilgileri kendinize göre düzenleyiniz.
1 2 3 4 5 6 |
DB_CONNECTION=mysql DB_HOST=127.0.0.1 DB_PORT=3306 DB_DATABASE=blog_veri DB_USERNAME=root DB_PASSWORD= |
Model Eloquent Orm
Birey adında bir model oluşturalım
1 |
php artisan make:model birey |
bu komutla beraber
dosyası oluşacaktır.
Modeldeki tablo adını
1 |
protected $table='birey'; |
olarak tanımlarız. Eğer tablo ismini belirmezsek yazılım otomatik olarak “s” ekini ekler.
1 2 3 4 5 6 7 |
<?php namespace App; use Illuminate\Database\Eloquent\Model; class Birey extends Model { protected $tablo = 'Birey'; } |
Bir model örneği (soft silme)
1 2 3 4 5 6 7 8 9 |
namespace App\Models; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\SoftDeletes; class Revizyon extends Model { use SoftDeletes; public $table = "revizyon"; protected $fillable = ['dokuman_adi','active','updated_by','created_by','created_at','updated_at']; } |
Eğer primarykey değiştirmek isterseniz:
1 2 3 |
protected $primaryKey = 'alanadi' //otomatik artmayı kpatmak içinde $incrementing = false |
yazmalısınız. Eğer created_at ve updated_at (oluşturulma ve güncelleme) tarihlerinin kapatılmasını isterseniz:
1 |
public $timestamps = false; |
yazmalısınız.
Her model veri tabanın da bir tabloyu gösterir.
Birey tablosunda veri işlemek için
1 2 3 |
birey::all() //tüm verileri çeker birey::find(id) //verilen id yi çeker birey::delete(id) //id nolu satırı siler |
Controllerda veri çekip blade e göndermek için
1 2 3 4 5 |
public function index() { $bireyler=birey::all(); return view('birey.index',compact('bireyler')); } |
Belli sayıda ve şartlarda veri çekmek için
1 2 3 4 5 6 7 8 9 |
public function index() { $bireyler=App\Birey::where('cinsiyet',1) ->orderBy('adi','asc') ->take(10) //çekileck veri adedi ->get(); return view('birey.index',compact('bireyler')); } |
Belli bir ID ye ait veri çekme
1 2 3 4 5 6 |
public function getPost($slug) { $post = Post::where('slug', '=', $slug)->firstOrFail(); return View::make(‘details’, compact(‘post’)); } |
detay için https://laravel-news.com/laravel-firstorfail-forthewin
Bu sorgulama veri varsa çeker yoksa boş döndürür.
Kayıt işlemi için
1 2 3 4 5 6 7 |
public function store(Request $request) { $birey=new Birey (array( 'ad'=>$request->ad, 'soyad'=>$request->soyad)); $birey->save(); } |
Kaydetme (create) işlemi
1 |
Revizyon::create($input); |
Laravel Session işlemleri
1 |
session()->put('geri_adres', $_SERVER['HTTP_REFERER']); |
bu komut ile geldiğimiz yolu sessiona atıyoruz.
veya blade de kullanmak için
1 2 |
{{ Session::put('ad','ali') }} //ad sessionuna ali yi atadık |
session okumak için
1 |
{{ Session::get('ad') }} |
Session silmek için :
1 |
{{ Session::forget('ad') }} |
Bir kere lik kullanım sonrası silinmesi için:
1 |
{{ Session::flash('ad','ali') }} |
bir kere gösterilir gösterilmez silinecektir.
Controller örnekleri
1 2 3 4 5 |
namespace App\Http\Controllers; use App\Models\Revizyon; use App\User; use App\Models\RevizyonKategori; // böylece model leri controllera bağladık |
Veri çekip diziye atama
1 2 |
$dizi = RevizyonKategori::all(); $dizi = $dizi->toArray(); |
ID ye göre arama
1 |
$revizyon = Revizyon::find($id); |
kopyalama ve kaydetme
1 2 |
$yeni_revizyon = $revizyon->replicate(); $yeni_revizyon->save(); |
Güncelleme
1 |
$yeni_revizyon->update($input); |
Select ile veri çekme
1 |
$yeterlilikler=DB::select("select id,short_name from yeterlilikler"); |
Table ile veri çekme
1 |
$revizyon = DB::table('revizyon')->where('id',$id)->first(); |
Veri silme
1 |
Revizyon::find($id)->delete(); |
Hard silme – veri silme
1 |
$soru->forceDelete(); |
Veri silme
Öncelikle ilgili model’i açıyoruz ve alt kısımda belirttiğimiz kod kısmını ekliyoruz.
1 2 |
use SoftDeletes; protected $dates = ['deleted_at']; |
Mevcut migrate mantığı ile migrate ise alt kısımdaki kod’u ekleyelim.
1 |
$table->softDeletes(); |
Yeniden migrate yapmayı unutmayarak kontrol işlemlerini gerçekleştirelim.
Çöp kutusu gibi görüntüleyebileceğimiz şekli.
1 2 3 |
if ($flight->trashed()) { // } |
Silinmiş veriler dahil çekebilmek için;
1 |
$users= App\User::withTrashed()->where('rol', 2)->get(); |
Diğer bir kullanım şekliyle;
1 |
$users->history()->withTrashed()->get(); |
Sadece silinmiş öğelere ulaşabilmek için;
1 |
$users= App\User::onlyTrashed()->where('rol', 2)->get(); |
Silinmiş içereği geri kazanabilmek için
1 |
App\User::withTrashed()->where('id', 1)->restore(); |
Diğer bir kullanım şekliyle;
1 |
$users->history()->restore(); |
Ben illa bu veriyi silmek istiyorum derseniz alt kısımdaki kod sizin için;
1 |
$users->forceDelete(); |
Çöp kutusu mantığıyla düşünürsek çöp kutusunu temizleme mantığı
1 |
$users->history()->forceDelete(); |
Alıntı https://www.kahramaner.com/yazilim/laravel-soft-delete/
Validation kontrolü
1 2 3 4 5 6 7 8 9 10 |
$rules=[ 'dokuman_adi'=>'required', 'revizyon_no'=>'required|unique_with:revizyon,dokuman_no,revizyon_no', ]; $messages = array( 'dokuman_adi.required' => 'Döküman adı gereklidir.', 'revizyon_no.required' => 'Revizyon no gereklidir.', 'revizyon_no.unique_with' => 'Bu döküman numarası ile revizyon sistemde kayıtlıdır.', ); $this->validate($request , $rules,$messages); |
Dosya upload
1 |
if ($request->hasFile('image')) |
Dosya Upload ve isim değiştirme
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
if ($request->hasFile('image')) { //$file = Input::file('ufile'); $file = $request->file('image'); $file_name = $file->getClientOriginalName(); $file_ext = $file->getClientOriginalExtension(); $fileInfo = pathinfo($file_name); $filename = $fileInfo['filename']; $zaman=time(); $newname = $filename . "-".$zaman . "." . $file_ext; //$destinationPath = ROOTDIR . 'dokuman'; $destinationPath = 'dokuman'; //Input::file('ufile')->move($destinationPath, $newname); $file->move($destinationPath, $newname); $dosya="/".$destinationPath."/".$newname; $input['dosya'] = $dosya; } |
Rol e göre sorgu
1 |
if(Auth::user()->hasRole('admin') or Auth::user()->hasRole('kalite')) |
Request ten gelen veriyi değişkene aktarma
1 |
$input = $request->all(); |
User ID okuma
1 |
$input['created_by'] = Auth::user()->id; |
Tarihi okuma
1 |
$input['kalite_onay_tarihi'] = Carbon::now(); |
SQL alan birleştirme CONCAT:
1 |
select id,concat(firstname,' ',lastname) as 'name' from users |
Laravel örneği
1 2 |
User::select(DB::raw('CONCAT(last_name, ", ", first_name) AS full_name'), 'id') ->where('activated', '=', '1') |
Concat başka bir örnek
1 2 |
$degerlendiriciler=DB:: select("select id,concat(firstname,' ',lastname) as 'name' from users order by firstname,lastname"); |
sayfalama paginate için sql örneği
1 2 3 4 5 6 7 |
$yeterlilikler = DB::table('yeterlilikler') ->where('yeterlilikler.short_name','like','%'.$request->ara_short_name.'%') ->join('jobs', 'yeterlilikler.job_id', '=', 'jobs.id') ->select('yeterlilikler.*', 'jobs.name as job_name','jobs.job_ref_code as job_ref_code') ->orderBy($sirala_alan,$sirala_tur) ->paginate(3); $yeterlilikler->withPath('?'.$url_ek.$url_sirala); |
withPath komutu ile larael deki sayfalama işlemine ek url gönderebiliyoruz.
Blade kısmında okumak için
1 |
{!! $yeterlilikler->links() !!} |