Qadamchi → Laravel o'tish yo'riqnomasi
Qadamchi Laravel'ning asosiy tushunchalarini o'rgatish uchun mo'ljallangan. Bu hujjat Qadamchi'da o'rgangan har bir narsaning Laravel'dagi to'liq mosini ko'rsatadi. Maqsad: Qadamchi'da o'rganib, Laravel'ga o'tishda "hammasi tanish" bo'lsin.
1. Papka tuzilmasi
| Qadamchi | Laravel | Izoh |
|---|---|---|
app/Controllers | app/Http/Controllers | Laravel Http/ ostiga oladi |
app/Middlewares | app/Http/Middleware | bir xil mantiq |
app/Models | app/Models | bir xil |
app/Requests | app/Http/Requests | FormRequest |
app/Migrations | database/migrations | |
app/Seeders | database/seeders | |
app/Views | resources/views | Blade .blade.php |
app/Cli | app/Console/Commands | |
routes/web.php | routes/web.php | bir xil |
routes/api.php | routes/api.php | bir xil |
config/*.php | config/*.php | bir xil |
public/index.php | public/index.php | front controller |
storage/framework/* | storage/framework/* | view/sess/cache |
bootstrap/app.php | bootstrap/app.php |
Laravel'da farq:app/ichidaHttp/,Console/qavatlari bor. Qadamchi'da esa tekis (boshlang'ichlar uchun sodda).
2. Route
// Qadamchi — routes/web.php
Route::get('/posts/{id}', [PostController::class, 'show'])->name('posts.show');
Route::post('/posts', [PostController::class, 'store'])->middleware('auth');
// Laravel — routes/web.php (DEYARLI BIR XIL)
Route::get('/posts/{id}', [PostController::class, 'show'])->name('posts.show');
Route::post('/posts', [PostController::class, 'store'])->middleware('auth');
Laravel'da qo'shimcha: Route::resource(), route model binding ({post} o'rniga Post $post), route groups with prefixes.
3. Controller
// Qadamchi
class PostController extends \Qadamchi\Http\Controller {
public function show(Request $request) {
$post = Post::find($request->routeParam('id'));
return view('posts.show', ['post' => $post]);
}
}
// Laravel
class PostController extends Controller {
public function show(Request $request, $id) { // yoki: show(Post $post)
$post = Post::find($id);
return view('posts.show', ['post' => $post]);
}
}
Laravel'da: route model binding —{post}ni to'g'ridan-to'g'riPost $postparametri sifatida olasiz. Qadamchi'da hozirrouteParam()orqali.
4. Blade view
Bir xil sintaksis — {{ }}, @if, @foreach, @extends, @section, @yield, @csrf, @method, @auth, @guest, @include.
{{-- Qadamchi va Laravel uchun bir xil --}}
@extends('layouts.app')
@section('content')
@foreach ($posts as $post)
<a href="{{ route('posts.show', ['id' => $post->id]) }}">{{ $post->title }}</a>
@endforeach
@endsection
Laravel'da qo'shimcha: components (x-based & class-based), @props, @stack/@push, slots. Qadamchi'da component() funksiyasi mavjud (sodda variant).
5. Model / Eloquent
// Qadamchi va Laravel — DEYARLI BIR XIL API
class User extends Model {
protected $fillable = ['name', 'email', 'password'];
protected $hidden = ['password'];
public function posts() { return $this->hasMany(Post::class); }
}
User::where('active', 1)->orderBy('id', 'desc')->paginate(15);
User::find(1)->posts; // relation
Auth::user()->name;
Laravel'da qo'shimcha: scopes, observers, factories, with() eager loading, soft deletes, mutators (Laravel 9+ attribute casting).
6. Request / Validation
// Qadamchi — FormRequest
class CreateUserRequest extends \Qadamchi\Validation\FormRequest {
public function rules(): array { return ['email' => 'required|email|unique:users,email']; }
public function messages(): array { return [...]; }
}
// controller: $data = (new CreateUserRequest)->validate();
// Laravel — FormRequest (imzolar bir xil)
class CreateUserRequest extends \Illuminate\Foundation\Http\FormRequest {
public function rules(): array { return ['email' => 'required|email|unique:users,email']; }
public function messages(): array { return [...]; }
public function authorize(): bool { return true; }
}
// controller: public function store(CreateUserRequest $request) { $request->validated(); }
Laravel'da: FormRequest controller'ga avtomatik inject qilinadi va middleware kabi validatsiya qiladi. Qadamchi'da (new XxxRequest)->validate() qo'lda chaqiladi.
7. Middleware / CSRF
// Qadamchi
class AuthMiddleware extends \Qadamchi\Http\Middleware {
public function handle($request, \Closure $next) {
if (!Auth::check()) return redirect('/login');
return $next($request);
}
}
// Laravel — BIR XIL imzo
class AuthMiddleware {
public function handle(Request $request, Closure $next): Response {
if (!Auth::check()) return redirect('/login');
return $next($request);
}
}
CSRF: Qadamchi global VerifyCSRF (POST/PUT/PATCH/DELETE). Laravel global VerifyCsrfToken — bir xil g'oya. @csrf blade direktivasi ham bir xil.
8. Auth
// Qadamchi va Laravel — bir xil statik facade
Auth::attempt(['email' => $e, 'password' => $p]);
Auth::user(); Auth::id(); Auth::check();
Auth::logout();
Laravel'da: guard'lar (web/api), multiple providers, bCrypt/argon, Auth::routes(). Qadamchi'da session-based web guard.
9. Migration / Schema
// Qadamchi va Laravel — BIR XIL Blueprint API
Schema::create('users', function (Blueprint $t) {
$t->id();
$t->string('email')->unique();
$t->string('password');
$t->timestamps();
});
Buyruqlar: migrate, migrate:rollback, migrate:reset, migrate:fresh — bir xil nomlar.
Laravel'da qo'shimcha:foreignId()->constrained(), polymorphic relations migration,php artisan migrate:fresh --seed.
10. Service Container / DI
// Qadamchi
$container = new \Qadamchi\Container\Container();
$container->singleton(Logger::class, fn() => new Logger(...));
$user = $container->make(UserRepository::class); // reflection autowire
// Laravel
app()->singleton(Logger::class, fn() => new Logger(...));
$user = app(UserRepository::class); // bir xil autowire
Laravel'da: service providers (register/boot), contextual binding, tags, events. Qadamchi Container PSR-11 mos imzo bilan — B versiyasidaleague/containerga almashtirish mumkin.
11. Config / Env
// Qadamchi va Laravel — bir xil
config('app.name'); // config/app.php -> name
env('APP_DEBUG', false); // .env
O'tish bosqichlari (qisqacha)
- Qadamchi loyihangiz ishlab turganda — butun app kodi (controllers, models, views, routes) deyarli o'zgarishsiz Laravel'ga ko'chadi.
composer create-project laravel/laravelyangi Laravel loyiha oching.- Papkalarni yuqoridagi xarita bo'yicha ko'chiring.
- Namespace'larni
Qadamchi\→App\ga moslang (App\ zaten Laravel'da bor). - Qadamchi facade aliaslari (
Route,Auth,DB...) Laravel'da ham shu nomlar bilan ishlaydi. - Migrationlarni
database/migrationsga ko'chiring — Blueprint bir xil. composer requirebilan qo'shimcha paketlar (queue, mail, events).
Batafsil: a-b-otish.md.