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';
});

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');
}


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');
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:



  1. use Log; elave edirkik clasimiza
  2. 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);


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

Bu blogdaki popüler yayınlar

İNGİLİS DİLİNDƏ ƏN ÇOX İSTİFADƏ OLUNAN 2600 CÜMLƏ QƏLİBLƏRİ VƏ 6000 SÖZ

INGILIS DILI BUTUN ZAMANLAR