LARAVEL DERSLERI
LARAVEL DERSLERI
Composer qurulumu :
https://getcomposer.org/download/  - bu linkden composer-setup.exe yuklenir 
Proxy varsa set edilir url 
Laravel qurulumu:
Daha sonra cmd-dan asagidaki command ile laravel qurulur:
Composer create-project laravel/laravel test 
Test- folder namedir
Eger asagidaki error verirse 
Warning: require(C:\xampp\htdocs\test\public/../vendor/autoload.php): failed to open stream: No such file or directory in C:\xampp\htdocs\test\public\index.php on line 24
Fatal error: require(): Failed opening required 'C:\xampp\htdocs\test\public/../vendor/autoload.php' (include_path='C:\xampp\php\PEAR') in C:\xampp\htdocs\test\public\index.php on line 24
Test foldeirne cd edib orda composer install buraxin
Daha sonra eger asagidaki kimi eror alsaz :
No application encryption key has been specified. New Laravel app
Asagidaki commandi buraxin
Php artisan key:generate
Konfigurasiya zamani asagidakilara diqqet yetirin
1)storage ve bootstrap/cache  read write icazesi olmalidir
2)key generate ile key generate olunmalidir
3)esas folderde .env faylinin olmasi lazimdir
LARAVEL STRUKTURU
App- esas modulumuz app folderidir demek olar
Bootstrap - autoload ve cache hissesi buradad tutulur
Config - config fayllar burada tutulur
Datatabse - database emelyatlari ucun istifade olunan seed ve migration burada istifade olunur
Public - programamizi calistiran hissedir. Elave olaraq assets faylarimiz dfa buradas tutulur( js, css , images ve.s)
Storage - burada cache log ve.s bilgileri tutulur
Vendor - dependecilerin tutuldugu yerdir 
Config -> database.php - baza propertilerimiz burada tutulur
*** database,php-de baxsaz gorersiniz ki env metodu istfde olunur bu metod .env-deki parametrlerimiz ile isleyir
resources->views - view sehfelerimiz burada tutulur ( sonu blade olaraq bitmelidi welcome.blade.php)
Http->Controllers - controllerimiz buirada tutulur
*** php artisan make:controller AdminController 
   Yuxaridaki kod ile yeni controller yarada bilerik
| 
php artisan make:controller PageController --resource | 
 *****  --resource elave etdikde ozu avtomatik CRUD metodlarini yaradir 
routes->web.php - routelarimizi burada goisteririk 
***** Route::get($url, $callback);
Route::post($url, $callback);
Route::put($url, $callback);
Route::patch($url, $callback);
Route::delete($url, $callback);
Route::options($url, $callback);
PUT,POST , DELETE cagiormaq ucun CSRF istifade edilmedlir!
Hem get hem post metod tanimlama
Route::match(['get', 'post'], '/', function()
{
return 'Hello World';
});
{
return 'Hello World';
});
Web.php icerisinde asagiodaki kodu goreceyik ilk olaraq
Route::get('/', function () {
    return view('welcome');   //view sehfeye redirect etmek ucundur
});
Biz burada default page olaraq welcome tanitmisiq
Route::get('/test', function () {
    return 'TEST';  //sadece text return edirik
});
Istesez controller-den de uygun funskiya cagira bilersiz url-ye gore
Route::get(‘user/profil', 'UserController@showUserProfil');
Routelerimiza ad da vere bilerik
Route::get(‘user/profil', 'UserController@showUserProfil')->name(‘profil’);
Ad verdikden sonra her hansi sehfemizde  asagidaki sekilde route ede bilerik
route('profil');
Routelerimizi qruplasdria da bilirik
Route::namespace('Admin')->group(function () {
      Route::get('profil', 'UserController@showUserProfil');
});
Hem burada prefix elave ederek tekrarinda qarisini ala bilirik
Route::group(['prefix'=>'getList','as'=>'account.'], function(){    Route::get('/users', ['as' => 'index', 'uses' => 'AccountController@index']); Route::get('/employees', ['as' => 'connect', 'uses' = > 'AccountController@connect']); });
Ve daha sonra bu grupa gore permisionlar vere bilerik
Burada profil routunun Admin qrupuna aid oldugunu gostririk
Rout-da parametrli url-leri gostermek ucun
Route::get('user/{id}', 'UserController@showUserProfil');
Route::get('user/{id?}', 'UserController@showUserProfil');
Yuxaridaki iki kod arasinda ferq ? isaresidir.
Eger ? varsa bu parametr ola da bielr olmaya da biler 
Database -> migrations 
Burada php fayl varhansiki database sql scriptleri var
Burada 2 metod olur her birinde  up ve down
Up-da etdiyiniz seyin down metodunda geri qaytama hissesi olmalidir
Meselem up-da user yaraadirsinizsa down-da o uiseri islmek ucun kod olmalidir
public function up()
{
Schema::create('users', function($table)
{
$table->increments('id');
$table->string('email')->unique();
$table->string('name');
$table->timestamps();
});
}
public function down()
{
Schema::drop('users');
}
{
Schema::create('users', function($table)
{
$table->increments('id');
$table->string('email')->unique();
$table->string('name');
$table->timestamps();
});
}
public function down()
{
Schema::drop('users');
}
Eger datase-i migrationlariniz esasinda generate etmek istyrsiznizse bu cox sadedir
Sadece php artisan migrate  yazib run etmeniz  kiafeytdir
Indiye kimi oyrendiklerimiz uzerinden gelin xirda example yazaq
1)yeni form yaradiriq bunun ucun views-da  form.bundles.php yaratmaliyiq
2)web.php-de riute yaziriq form url ucun
web.php
Route::get('/form', function () {
     return view('form');
});
Route::post('/form','AdminController@post_form');
Form.blade.php
<html>
<head>
 <title>FORM</title>
</head>
<body>
 {{$fullname}}
<form action="" method="POST">
 <input type="hidden" name="_token" value="{{ csrf_token() }}">
 <input type="text" name="name">
 <input type="text" name="surname">
 <input type="submit">
</form>
</body>
</html>
Csrf_token elave etdik cunki post-da elave etmesek islemeyecek error verecek
{{ $ fullname }} ile ise biz controllerden gonderdiyimiz deyeri html-de gostrririk
Eger request url goturmek isteseydik  yeni url?name=aaa&surname=bbb
Goturmek isteseydik
Input::get(‘name’)  seklinde goture bilerik
Ancaq burada Input istfde ed ebilmemizs ucvun clasimiza  use Illuminate\Support\Facades\Input; import edilmelidir
Route::get('/getValues','AdminController@getUrlParams');
    public function getUrlParams(){
       $name=Input::get('name');  
       $surname=Input::get('surname');
       $fullname=$name." ".$surname; 
       return view('form')->with('fullname',$fullname);
    }
Route-da url tanimlayarken parametrlerden sonra ve ya evvel static parth stringlerini sitfde ede bilirik
Yeni meselem
test/fullname/{name}/{surname}/age/{age} 
Bu sekilde url sehv deyil
Ve Controllerde metodumuzda deyerler  view-muza set ederken  ard arda bir nece with istfde ederek gondere bilerik
view(“users”)->with(“name”,$name)->with(“surname”,$surname)->with(“age”,$age); seklinde
Ve ya 
Return view(“users”, compact($name,$surname,$age));
Seklinde istfde ede bilerik
Gelin indi bazaya insert examplemiz ile baslayaq :
1)test folderimizde asagidaki command ile modelimizi yaradiriq
Php artisan make:model users
Bu zaman app folderi altinda users.php yarandigini gore bilerik
Onun icerisine asagidaki =lari elave edirkik
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class users extends Model
{
    protected $table='users';  //table adi bazada
    protected $fillable=['name','surname']; //table column adlari
}
Table column adlari  form-unuzdaki inout nameler ile eyni olmalidir
2)web.php-de reoutelarimizi yazriq
Route::get('/createUser', function () {
     return view('users');
});
Route::post('/createUser','UserController@create');
3) users.bandle.php view-muzu yaradiriq
<html>
<head>
 <title>FORM</title>
</head>
<body>
<form action="" method="POST">
 <input type="hidden" name="_token" value="{{ csrf_token() }}">
 <input type="text" name="name">
 <input type="text" name="surname">
 <input type="submit">
</form>
</body>
</html>
4)userControllerimizde  metodumuzu yaziriq
 public function create(Request $req)
    {
         $user=$req->all();  //butun request paramertrlerini alir
         users::create($user); //create ile insert edirik
         return "success";
    }
5) .env faylimizda database propertiesleirni ozunzue uygun duzledin
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=test
DB_USERNAME=root
DB_PASSWORD=
Biz test databaseinde users tablesine insert edirik
6) table create ederken elave 2 dene datetime tipinden column elave temlsiiniz
Created_at , updated_at  
**** eger bazaya zaman duzgun formada dusmurse  siz timezone elave elemelisniz,
Bunun ucun config->app.php -de timezone meselem Asia/Baku yaziriq
  'timezone' => 'Asia/Baku',
7) run edirik ve netice goz qabagindadir
Butun table rowlari list kimi almaq ucun 
Web.php 
Route::get('/userlist','UserController@getUserList');
UserController:
     public function getuserList()
    {
       $userList=users::all();
       return view('users')->with('userList',$userList);
    }
Users.blade.php
<html>
<head>
 <title>FORM</title>
</head>
<body>
<form action="" method="POST">
 <input type="hidden" name="_token" value="{{ csrf_token() }}">
 <input type="text" name="name">
 <input type="text" name="surname">
 <input type="submit">
</form>
{{$userList}}  //siyahini ekrana vermek ucun
</body>
</html>
MiddleWare istifadesi:
Middleware ile biz pageler ucun bir nov filkterler yaradiriq 
1)evvelce php artisan ile middleware create edirik
Php artisan make:middleware OldMiddleWare
2)daha sonra bunu kemel.php faylinda qeyd etmeliyik
    protected $routeMiddleware = [
        'auth' => \Illuminate\Auth\Middleware\Authenticate::class,
        'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
        'bindings' => \Illuminate\Routing\Middleware\SubstituteBindings::class,
        'cache.headers' => \Illuminate\Http\Middleware\SetCacheHeaders::class,
        'can' => \Illuminate\Auth\Middleware\Authorize::class,
        'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
        'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
        'OldMiddleWare' => \App\Http\Middleware\OldMiddleWare::class
    ];
3)OldMiddleWare clasimizi yaziriq
<?php
namespace App\Http\Middleware;
use Closure;
class OldMiddleWare
{
    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return mixed
     */
    public function handle($request, Closure $next)
    {
        $ip= $request->ip();
        if( $ip == '::11'){
           // throw new \Exception("your ip is correct");
            return redirect('/');
        }
        return $next($request);
    }
}
4)Routumuza middleware filterimizi tandiiriq
Route::get('/userlist','UserController@getUserList')->middleware('OldMiddleWare');
Bir nece middleware birden vere bilerik:
Route::get('/', function () {
//
})->middleware('first', 'second');
//
})->middleware('first', 'second');
Route grup-lara da middleware vere bilerik :
Route::group(['middleware' => ['web']], function () {
//
});
//
});
Blade template istifadesi:
Views
     ----- layouts
                  ----- master.blade.php
master.blade.php
<html>
    <head>
        <title>App Name - @yield('title')</title>
    </head>
    <body>
        @section('sidebar')
            This is the master sidebar.
        @show
        <div class="container">
            @yield('content')
        </div>
    </body>
</html>
userList.blade.php
@extends('layouts.master')  // hanis layoutda gosterilcek parenti gisterilir
@section('title', 'Page Title')
@section('sidebar')
    @parent
    <p>This is appended to the master sidebar.</p>
@stop
@section('content')
    <p>This is my body content.</p>
    {{$userList}}
@stop
PAGINATION EXAMPLE
1)UserController 
   public function getuserList()
    {
       $userList=users::paginate(2);  //2 sehfe edirik biz 
       return view('users')->with('userList',$userList);
       //return view('layouts.master')->with('userList',$userList);
    }
2)users.blade.php
<html>
<head>
 <title>FORM</title>
</head>
<style>
.pagination{
 list-style-type: none;
    margin: 0;
    padding: 10px;
    overflow: hidden;
    background-color: #eee;
}
.page-item{
    float: left;
}
.page-item a{
    color: black;
    text-align: center;
    padding: 2px;
    text-decoration: none;
}
.active{
 background-color: black;
 color:#eee;
}
</style>
<body>
<form action="login" method="POST">
    <input type="hidden" name="_token" value="{{ csrf_token() }}">
 <label >Name: </label><input type="text" name="name"><br/>
 <label >Surname: </label><input type="text" name="surname"><br/>
 <label >Passowrd: </label><input type="password" name="password"><br/><br/>
 <input type="submit" value="CREATE">
</form>
<div class="container">
 <table>
   @foreach ($userList as $user)
  <tr>
   <td style="border:1px solid black">{{ $user->name ." ". $user->surname  }} </td>
  </tr>
  @endforeach
 </table>
</div>
{{ $userList->links() }}
</body>
</html>
LARAVEL call procedure
   public function getuserList()
    {
       $userCount=0;
       DB::statement('CALL getUserCount(@userCount)', array($userCount));
       $results = DB::select('select @userCount as userCount');
       return view('users')->with('userCount',$results[0]->userCount);
    }
Laravel edit data row:
1)Web.php routes
Route::get('/edit/{id}', 'UserController@edit');
Route::post('edit/update/{id}', 'UserController@update');
2)Controller
    public function edit($id)
    {
        $user=users::find($id);
        return view('template.edit')->with('id',$id);
    }
    public function update(Request $request, $id)
    {
        //validate post data
        $rules = array(
            'name'       => 'required|unique|max:255',
            'surname'      => 'required'
        );
         $validator = Validator::make(Input::all(), $rules);
        if ($validator->fails()) {
              return redirect('welcome');
        }
          else {
            // store
            $user = users::find($id);
            $user->name       = $request->name;
            $user->surname      =$request->surname;
            $user->save();
            return Redirect::to('userlist');
        }
    }
3)edit.blade.php
<html>
<head>
 <title>EDIT</title>
</head>
<body>
<form action="update/{{$id}}"  method="POST">
 <input type="hidden" name="_token" value="{{ csrf_token() }}">
 <input type="text" name="name">
 <input type="text" name="surname">
 <input type="password" name="password">
 <input type="submit">
</form>
</body>
</html>
LARAVEL Authentication example:
1)Auth:: attempt istifade edeceyik attempt hansi cedvele baxacagini  Config folderinde auth.php-de gosteririk. Biz oz model clasimizi gostermeliyik
'providers' => [
        'users' => [
            'driver' => 'eloquent',
            'model' => App\users::class,
        ],
        // 'users' => [
        //     'driver' => 'database',
        //     'table' => 'users',
        // ],
    ],
2)Router web.php
Route::get('login', array(
 'uses' => 'UserController@showLogin'
));
Route::post('login', array(
 'as' => 'login',
 'uses' => 'UserController@doLogin'
));
Route::get('logout', array('uses' => 'UserController@doLogout'));
// hem de qrup seklinde hansi sehfelere ancaq login olmus user gore biler gosteririk.
//AuthMidleWare vasitesile
Route::group(['middleware' => 'AuthMiddleWare'], function () {
    Route::get('/createUser', function () {
       return view('users');
 }); 
    Route::post('/createUser','UserController@create');
    Route::get('/edit/{id}', 'UserController@edit');
    Route::post('edit/update/{id}', 'UserController@update');
});
3)Controllerimiz:
 public function showLogin()
    {
        if (Auth::check()) {
            return view('home');  // eger login olubsa login sehfesi evezine home yonlen
        }
        return view('login');
    }
    public function doLogout()
    {
        Auth::logout(); // logging out user
        //Session::flush();
        return Redirect::to('login'); // redirection to login screen
    }
    public function doLogin(Request $request)
    {
        $credentials = [
            'email' => $request['email'],
            'password' => $request['password'],
            //'password' => Hash::make($request['password']),
        ];
        $auth=Auth::attempt($credentials);
        //dd($auth);
        //dd($credentials);
        Session::put('email',$request->email); 
        Session::save();
        if ($auth) {
            return Redirect::to('userList');
        }
        return Redirect::to('login');
    }
4)AuthMiddleWare
    public function handle($request, Closure $next)
    {
        if(!Auth::check()){
            return redirect('/login');
        }
        else{
            return $next($request);
        }
    }
5)Login.blade.php
<html>
<head>
   <title>LOGIN</title>
</head>
<body>
<form action="" method="POST">
   <input type="hidden" name="_token" value="{{ csrf_token() }}">
   <input type="text" name="email"><br/><br/>
   <input type="text" name="password"><br/><br/>
   <input type="submit" value="LOGIN">
</form>
</body>
</html>
7)kemel.php
    protected $routeMiddleware = [
        'auth' => \Illuminate\Auth\Middleware\Authenticate::class,
        'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
        'bindings' => \Illuminate\Routing\Middleware\SubstituteBindings::class,
        'cache.headers' => \Illuminate\Http\Middleware\SetCacheHeaders::class,
        'can' => \Illuminate\Auth\Middleware\Authorize::class,
        'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
        'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
        'OldMiddleWare' => \App\Http\Middleware\OldMiddleWare::class,
        'AuthMiddleWare' => \App\Http\Middleware\AuthMiddleWare::class,
        'StartSession' => \Illuminate\Session\Middleware\StartSession::class
    ];
**** Biz eger logout etsek asagidaki kimi xeta ala bilersiz :
SQLSTATE[42S22]: Column not found: 1054 Unknown column 'remember_token' in 'field list' (SQL: update `users` set `remember_token`"
Bunun qarsiini almaq ucun  evvelce  php artisan command ile yeni migration yaradiriq
- Php artisan make:migration add_remember_token_to_users_table --table=”users”
- Daha sonra users cedvelimize remember_token adli yeni column elave edirik
Laravel ile session-a deyer elave etmek , deyer alib sehfeye oturmek
1)Controller 
public function doLogin(Request $request)
    {
        $credentials = [
            'email' => $request['email'],
            'password' => $request['password'],
            //'password' => Hash::make($request['password']),
        ];
         $auth=Auth::attempt($credentials);
         session(['email' => $request['email']]);
        if ($auth) {
            return Redirect::to('userList');
        }
        return Redirect::to('login');
    }
 public function getuserList(Request $request)
    {
       $userList=users::paginate(2);
       $userCount=0;
       DB::statement('CALL getUserCount(@userCount)', array($userCount));
       $results = DB::select('select @userCount as userCount');
       $sessionData = $request->session()->all();
       $value = session('email');
       //dd($value);
  return view('users')->with('userList',$userList)->with('userCount',$results[0]->userCount)
       ->with('sessionData',$value);
    }
2)users.blade.php
 {{ $sessionData }}
Laravel cache istifadesi
1)use Cache; elave olunmalidir controllerimize , ve asagidaki cur cache-e elave edib yoxlayib eger cachede varsa ordan goture bilerik neticeni
        if (Cache::has('userList'))
        {
             $userList=Cache::get('userList');  // eger cachede varsa ordan gotururuk
        }
        else{
             $userList=users::paginate(2);
             Cache::put('userList', $userList, 1); 
        }
        return view('users')->with('userList',$userList)->with('userCount',$results[0]->userCount)
             ->with('sessionData',$value);
Burada 3-cu parametr kimi verilen 1 muddeti gosterir . 1 - yeni 1 deqiqe 
Cache::forever - eger qalici olaraq mueyyen muddetlik saxclamaq istemirsizse istifade ede bilersiz.
Cache::forget('userList');  -- eger cache-i silmek isteyirikse
Laravel log istifadesi:
- use Log; elave edirkik clasimiza
- config->logging.php -de log propertiueleri gosterilir hansi fayla yaziqlacaq ve.s
        'single' => [
            'driver' => 'single',
            'path' => storage_path('logs/laravel.log'),
            'level' => 'debug',
        ],
        'daily' => [
            'driver' => 'daily',
            'path' => storage_path('logs/laravel.log'),
            'level' => 'debug',
            'days' => 7,
        ],
**** yeni storage papkasinda laravel.log faylina yazilacaq
3) Controllerimiz
Log::debug('----------   getUserList called -----------------');
*** asagidaki metodlari vardir
Log::emergency($message);
Log::alert($message);
Log::critical($message);
Log::error($message);
Log::warning($message);
Log::notice($message);
Log::info($message);
Log::debug($message);
Log::alert($message);
Log::critical($message);
Log::error($message);
Log::warning($message);
Log::notice($message);
Log::info($message);
Log::debug($message);
Laravel model relations :
1)Evvelce baza tererfde elaqeni quraq . One to many quracayiq biz
Users cedvelinde id_mobile ve mobile cedvelinde id var.
Relation view-dan asagidaki formada relationu qururuq
**** foreign key-imize index elave elemeyi unutmayin
2)Model classlarimiz:
class mobile extends Model
{
   protected $table='mobile';
   protected $fillable=['id','number'];
   public function users(){
       return $this->belongsTo(users::class);
   }
}
class users extends Model implements Authenticatable
{
  use AuthenticableTrait;
   protected $table='users';
   protected $fillable=['name','surname','email','password','id_mobile'];
   public function mobile(){
       return $this->hasMany(mobile::class);
   }
}
3)Controllerimizde select edek ( mobile-id-si 1 olan userleri getir)
$mobile = DB::table('users')
   ->join('mobile', 'users.id_mobile', '=', 'mobile.id')
   ->where('users.id_mobile',2)
   ->get();
 
Yorumlar
Yorum Gönder