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