01 β NativePHP nima va falsafasi¶
π README Β· Keyingi: 02 β Muhit, talablar va Laravel asos β‘οΈ
Bu bobda: NativePHP'ning aniq nima ekanini, qanday ishlashini va falsafasini chuqur o'rganamiz. NativePHP β bu Laravel/PHP ilovangizni native qobiq ichida ishga tushiruvchi vosita: desktopda Electron qobiq, mobilda Swift (iOS) yoki Kotlin (Android) qobiq. UI qatlami webview ichidagi HTML/CSS/JS (Blade, Livewire, Inertia), biznes-mantiq esa PHP'da yoziladi. Desktopda PHP bundle qilingan binar sifatida, mobilda esa to'g'ridan qurilmada ishlovchi PHP runtime sifatida keladi. Arxitekturani (webview + native bridge + PHP runtime), uni Electron, React Native, Flutter va Tauri bilan solishtirishni, qachon kerak va qachon kerak emasligini, hamda tarixini (Marcel Pociot, Simon Hamp; desktop v2, mobil v3 2026-fevraldan MIT/bepul) ko'rib chiqamiz.
Halol eslatma: NativePHP sof native widget yaratmaydi β u webview asosli. Ya'ni interfeys SwiftUI yoki Qt kabi piksel-darajadagi native widgetlar emas, balki brauzer dvigatelida chiziladigan HTML. Bu bobdagi Laravel/PHP kod bloklari haqiqiy muhitda tekshirildi (php -l, Laravel 13 boot, Eloquent + SQLite). Ammo GUI oyna ochilishi, qurilmada ishlash va build/packaging bloklari illustrativ β bu muhitda displey, Electron GUI, Xcode va Android SDK yo'q, shuning uchun ular ishga tushirilmagan, lekin kod va buyruqlar to'g'ri.
NativePHP nima?¶
Tasavvur qiling: siz Laravel'ni yaxshi bilasiz. Route yozasiz, Controller, Model, Blade shablon, Eloquent so'rovlar β hammasi qo'lingizdan keladi. Endi xohlaysizki, shu bilim bilan brauzer kerak bo'lmagan, foydalanuvchi ikki marta bosib ochadigan haqiqiy desktop ilova yoki App Store / Google Play'ga joylanadigan mobil ilova quring. Odatda buning uchun yangi til (Swift, Kotlin, Dart, JavaScript) va yangi freymvork o'rganishingiz kerak edi. NativePHP shu to'siqni olib tashlaydi.
NativePHP β bu mavjud Laravel/PHP ilovangizni native qobiq (shell) ichiga joylab, ish stolida yoki telefonda mustaqil dastur sifatida ishga tushiruvchi freymvork. Asosiy g'oya juda sodda:
- UI (interfeys) qatlami = HTML / CSS / JavaScript β ya'ni siz allaqachon Blade, Livewire yoki Inertia bilan yozadigan narsangiz.
- Mantiq (logic) qatlami = PHP β Route, Controller, Model, Service, Eloquent β odatdagi Laravel kodingiz.
- Qobiq = OS bilan gaplashadigan native dastur: desktopda Electron, mobilda Swift/Kotlin.
Boshqacha aytganda, NativePHP veb-ilovani "o'rab", uni server va brauzersiz ishlaydigan mustaqil dasturga aylantiradi. Brauzer manzil qatori yo'q, php artisan serve yo'q β foydalanuvchi shunchaki dastur ikonkasini bosadi.
Agar Laravel asoslarini yangilamoqchi bo'lsangiz: Laravel qo'llanmasi. PHP tili bo'yicha: PHP qo'llanmasi.
Arxitektura: uchta qatlam¶
NativePHP ilovasi har doim uch qatlamdan iborat. Bu qatlamlarni tushunsangiz, kitobning qolgan qismi juda oson kechadi.
1-qatlam: Native qobiq¶
Bu β operatsion tizim "ko'radigan" dastur. U oyna ochadi, menyu yaratadi, tray ikonkasini chizadi, fayl dialoglarini ko'rsatadi.
- Desktopda bu qatlam Electron β Chromium (brauzer dvigateli) va Node.js'ni o'z ichiga olgan ish stoli ilova platformasi. VS Code, Slack, Discord ham Electron'da yozilgan.
- Mobilda bu qatlam Swift (iOS uchun) yoki Kotlin (Android uchun) bilan yozilgan native qobiq dastur.
2-qatlam: Webview (UI)¶
Qobiq ichida bitta yoki bir nechta webview bo'ladi β bu aslida ko'rinmas brauzer oynasi. U sizning Blade/Livewire interfeysingizni ko'rsatadi. Foydalanuvchi tugmani bosganda, bu odatdagi veb-so'rovga o'xshaydi β lekin tashqi serverga emas, ilova ichidagi PHP'ga boradi.
HALOL haqiqat: Aynan shu joyda muhim nuqta bor. Webview β bu HTML chizadigan brauzer dvigateli. Ya'ni NativePHP'da interfeys sof native widget EMAS. SwiftUI tugmasi yoki Qt oynasi piksel darajasida OS tomonidan chiziladi; NativePHP'da esa siz HTML/CSS yozasiz va u brauzer dvigatelida render bo'ladi. Bu yaxshimi yoki yomonmi degan savol emas β bu shunchaki haqiqat, va siz buni bilishingiz kerak. Kattaroq bo'limda buni yana ochib beramiz.
3-qatlam: PHP runtime + Laravel ilova¶
Bu β sizning haqiqiy kodingiz: Route, Controller, Model, Eloquent. PHP qayerda ishlaydi?
- Desktopda: NativePHP ilovangiz bilan birga PHP'ning bundle qilingan (qadoqlangan) binarini jo'natadi. Foydalanuvchi kompyuterida PHP o'rnatilgan bo'lishi shart emas β binar ilova ichida keladi (bu
nativephp/php-binpaketi orqali). - Mobilda: PHP qurilmaning o'zida ishlaydi. Oldindan kompilyatsiya qilingan PHP 8.4 runtime Swift/Kotlin qobiq ichiga bundle qilinadi va kodingiz to'g'ridan-to'g'ri telefonda bajariladi. Hech qanday veb-server kerak emas, ilova offline-first ishlaydi.
Uch qatlam o'rtasida native bridge (ko'prik) turadi: PHP "oyna och", "bildirishnoma chiqar", "kamerani yoq" deganda, bu buyruq bridge orqali qobiqqa boradi va qobiq OS API'sini chaqiradi.
Foydalanuvchi tugmani bosadi
v
Webview (HTML/Blade) --HTTP-ga o'xshash so'rov--> PHP/Laravel
^ |
| v
+------ Blade javobi (HTML) <---------- Controller mantiq
|
Window::open(), Notification::show() ...
v
Native bridge --> OS API
"Sof native emas" degani nima β chuqurroq¶
Bu kitobning eng halol nuqtasi. NativePHP bilan ilova yozganda nimani olasiz va nimani olmaysiz?
Olasiz:
- Haqiqiy desktop/mobil ilova: ikonka, mustaqil oyna, OS menyusi, tizim bildirishnomalari, fayl dialoglari, tray, global tugmalar (desktop); kamera, biometrika, geolokatsiya (mobil).
- PHP/Laravel bilimingizdan to'liq foydalanish.
- Bitta kod bazasidan bir nechta platforma.
Olmaysiz:
- Piksel darajasida OS tomonidan chiziladigan sof native widgetlar. Tugmangiz aslida HTML
<button>, OS tugmasi emas. - SwiftUI/Jetpack Compose/Qt darajasidagi "tabiiy" his β interfeys webview ichida, ya'ni murakkab UI'da brauzer dvigateli cheklovlari bo'ladi.
Buni shunday tasavvur qiling: NativePHP β bu veb-ilovani native paketga o'rovchi vosita. Slack, Discord, VS Code, Notion, Spotify desktop ilovalari ham aynan shunday β ular Electron'da, webview ichida ishlaydi va millionlab odam ulardan kundalik foydalanadi. Demak bu "yomon" yondashuv emas; u juda ko'p holatlar uchun ajoyib. Lekin "men SwiftUI kabi sof native ilova yozyapman" deb o'ylash β chalg'ish bo'ladi.
Diqqat: bu bobning qolgan qismida va keyingi boblarda biz vaqti-vaqti bilan "bu webview ichida ishlaydi" deb eslatib turamiz, chunki bu arxitekturaning eng muhim xususiyati.
Birinchi misol: oyna ochish (illustrativ GUI, kod tekshirilgan)¶
Quyidagi kod desktop ilovada yangi oyna ochadi. E'tibor bering β bu oddiy Laravel Controller. Yagona yangilik: Native\Desktop\Facades\Window facade'i.
<?php
namespace App\Http\Controllers;
use Native\Desktop\Facades\Window;
use Native\Desktop\Facades\Notification;
class SampleController extends Controller
{
public function open()
{
Window::open('main')
->title('Mening NativePHP ilovam')
->width(900)
->height(700)
->route('dashboard');
return response()->noContent();
}
public function notify()
{
Notification::title('Salom NativePHP')
->message('Bu Laravel ilovangizdan kelgan tizim bildirishnomasi.')
->show();
return response()->noContent();
}
}
Window::open() chaqirilganda, native bridge orqali Electron'ga "shu o'lcham va shu route bilan oyna och" degan buyruq boradi. Notification::show() esa OS'ning haqiqiy tizim bildirishnomasini chiqaradi (Laravel'ning ichki notification tizimidan farqli β bu OS UI bildirishnomasi).
Verifikatsiya halolligi: Yuqoridagi kodning sintaksisi va facade'lar mavjudligi bu muhitda tekshirildi β
php -lxatosiz o'tdi,Native\Desktop\Facades\WindowvaNotificationklasslarinativephp/desktoppaketida HAQIQATAN mavjud (class_exists= true), Laravel 13.15 boot bo'ldi va route ro'yxatdan o'tdi. Ammo oynaning ochilishi GUI talab qiladi (Electron + displey), shuning uchun u bu yerda ishga tushirilmadi β bu blok illustrativ. Haqiqiy muhitdacomposer native:dev(yoki to'g'ridanphp artisan native:run) ishlaganda oyna ekranda ochiladi.Buyruq haqida aniqlik:
native:devβ bu Composer skripti (composer native:dev), ARTISAN buyrug'i EMAS. Uniphp artisan native:devdeb tersangiz xato beradi. Composer skripti ichki tarzdaphp artisan native:run(Electron'ning dev build'ini ochadi) vanpm run dev(Vite) ni birga (concurrently) ishga tushiradi. Asosiy artisan buyruqlari esa:native:install,native:run,native:migrate,native:build.
route('dashboard') ichidagi dashboard β bu oddiy Laravel route nomi. Demak Blade/Livewire UI'ingiz o'zgarishsiz ishlaydi:
// routes/web.php β bu sof Laravel, NativePHP'ga xos hech narsa yo'q
Route::get('/dashboard', function () {
return view('dashboard', ['vaqt' => now()->format('H:i')]);
})->name('dashboard');
Ma'lumotlar: SQLite va Eloquent (tekshirilgan)¶
NativePHP ilovalari odatda lokal SQLite bazasidan foydalanadi β ilova ichida, foydalanuvchi qurilmasida. Va bu sof Laravel Eloquent. Quyidagi mantiq bu muhitda haqiqatan ishlatib ko'rildi:
<?php
// Illustrativ host-ilova mantig'i, lekin Eloquent qismi REAL tekshirildi.
use Illuminate\Database\Eloquent\Model;
class Note extends Model
{
protected $table = 'notes';
protected $guarded = [];
}
Note::create(['matn' => 'NativePHP qaydi']);
Note::create(['matn' => 'Ikkinchi qayd']);
echo Note::count(); // 2
echo Note::first()->matn; // NativePHP qaydi
Verifikatsiya: Ushbu Eloquent + SQLite mantig'i bu muhitda in-memory SQLite bilan haqiqatan ishlatildi va
Jami qaydlar: 2,Birinchi qayd: NativePHP qaydinatijasini berdi. Demak NativePHP'ning host-ilova mantig'i β sizga allaqachon tanish bo'lgan Laravel. Aynan shu sabab NativePHP shunchalik qulay. SQL'ni eslatish kerak bo'lsa: SQL qo'llanmasi.
Desktop va Mobil: bir kod, ikki qobiq¶
NativePHP ikki mahsulotdan iborat: desktop va mobil. Ular bir falsafani baham ko'radi, lekin texnik jihatdan farq qiladi.
| Jihat | Desktop | Mobil |
|---|---|---|
| Qobiq | Electron (Chromium + Node) | Swift (iOS) / Kotlin (Android) |
| PHP qayerda | Bundle qilingan binar (nativephp/php-bin) |
Qurilmada (on-device PHP 8.4 runtime) |
| Composer paket | nativephp/desktop |
nativephp/mobile |
| Platformalar | Windows 10+, macOS 12+, Linux | iOS, Android |
| UI | Webview (Blade/Livewire) | Webview (Blade/Livewire) |
| Litsenziya | Ochiq | MIT / bepul (v3, 2026-fevral) |
Ikkala holatda ham UI = webview, mantiq = PHP. Farq β qobiq va PHP'ning qayerda ishlashida.
Boshqa freymvorklar bilan solishtirish¶
NativePHP'ni mashhur kross-platforma vositalari bilan taqqoslaylik. Bu sizga "qachon NativePHP, qachon boshqasi" degan savolga javob beradi.
- Electron β JavaScript/Node.js bilan desktop ilova. UI = webview. NativePHP desktop aslida Electron ustiga qurilgan; farq shundaki, siz JS o'rniga PHP/Laravel'da yozasiz. Agar siz PHP dasturchisi bo'lsangiz, NativePHP siz uchun Electron'ning "PHP versiyasi".
- React Native β JS/TypeScript bilan mobil. Bu yerda UI sof native widget (React komponentlari native komponentlarga aylanadi). NativePHP'dan farqli, React Native webview emas. Lekin tilni o'rganishingiz kerak.
- Flutter β Dart tilida, o'z render dvigateli (Skia) bilan piksellarni chizadi. Sof native his, lekin yangi til.
- Tauri β Rust + JS. UI sifatida OS'ning native webview'idan foydalanadi (Electron'dan yengilroq), lekin baribir webview. Mantiq Rust'da.
Asosiy xulosa: "Sof native" (React Native, Flutter) β interfeys OS tomonidan chiziladi, eng silliq his, lekin yangi til. "Webview asosli" (Electron, Tauri, NativePHP) β interfeys HTML, tezroq ishlab chiqish, mavjud veb-bilim. NativePHP'ning noyob ustunligi: PHP/Laravel bilimingiz to'g'ridan-to'g'ri ishlaydi.
Qachon NativePHP kerak, qachon kerak emas¶
Kerak (yaxshi tanlov):
- Siz/jamoangiz PHP/Laravel'da kuchli, lekin Swift/Kotlin/JS'ga vaqt yo'q.
- Mavjud Laravel ilovangizni desktop/mobil paketga o'rashni xohlaysiz (masalan ichki admin vositasi, CRUD ilova, hisobotlar paneli).
- Veb-ilova his-tuyg'usi yetarli β murakkab, o'yin darajasidagi animatsiya yoki piksel-mukammal native UI shart emas.
- Lokal ma'lumot (SQLite), fayllar bilan ishlash, oddiy tizim integratsiyasi (bildirishnoma, tray, menyu) kerak.
Kerak emas (boshqa vositani ko'ring):
- Maksimal silliq, "tabiiy" native UI shart (masalan iOS dizayn ko'rsatmalariga 100% mos premium ilova) β React Native yoki SwiftUI yaxshiroq.
- Og'ir grafika, 3D, real-time o'yin, GPU-intensiv ishlov β webview cheklaydi.
- Juda kichik ilova hajmi muhim β Electron qobig'i (Chromium) o'nlab MB qo'shadi.
- Past darajadagi qurilma imkoniyatlariga chuqur kirish kerak, lekin mos plugin yo'q.
Qoida: agar siz veb-ilova quryotgan bo'lsangiz va uni "ish stoliga / telefonga olib chiqmoqchi" bo'lsangiz β NativePHP a'lo. Agar siz "men avvalo telefon ilovasi quryapman va u eng silliq native his bersin" desangiz β sof native vositalarni o'ylab ko'ring.
Tarix va litsenziya¶
NativePHP'ni Marcel Pociot (Beyond Code asoschisi, Laravel hamjamiyatining taniqli ishtirokchisi) va Simon Hamp boshlab berishgan. Loyiha PHP'ning brauzersiz, server-siz ishlash imkoniyatini Laravel dasturchilariga ochib berdi.
- Desktop (v2) β Electron asosida,
nativephp/desktoppaketi orqali. PHP'ni ilova bilan birga bundle qilib jo'natadi. - Mobil (v3) β 2026-yil 1-fevralda chiqdi: yadrosi (core) MIT litsenziyasiga o'tdi va asosiy pluginlar (masalan Camera, Device, Network, File, Browser) bepul ishlatiladi. Avval butun mobil mahsulot pullik edi. v3'da arxitektura plugin tizimiga o'tdi: deyarli har bir native imkoniyat alohida plugin sifatida
composer requireorqali o'rnatiladi vaNativeServiceProvider'da ro'yxatdan o'tkaziladi. Mobil runtime PHP 8.4'ni qurilmaga bundle qiladi.Litsenziya nyuansi (halol bo'lib): "butunlay bepul" da'vosi biroz soddalashtirilgan. Yadro va asosiy pluginlar bepul/MIT, lekin ba'zi premium pluginlar (masalan Push Notifications/Firebase, Biometrics) va "NativePHP Ultra" obunasi (barcha pluginlarni jamlaydi) pullik bo'lishi mumkin. Aniq narx va qaysi plugin bepul/pullik ekanini har doim rasmiy pricing va plugins sahifasidan tekshiring β bu narsalar tez o'zgaradi.
Rasmiy hujjat manbalari, har doimgidek, eng ishonchli yo'l:
- Desktop:
nativephp.com/docs/desktop/2/... - Mobil:
nativephp.com/docs/mobile/3/...
Anti-hallucination eslatmasi (siz uchun ham foydali): NativePHP nisbatan yangi va "niche" freymvork. Internetdagi (va AI'lar bergan) ko'p namunalarda eski yoki noto'g'ri facade nomlari uchraydi. Masalan, eski materiallar
Native\Laravel\Facades\Windowdeb yozishi mumkin, lekin desktop paketida aniq namespaceNative\Desktop\Facades\Window. Shubhalansangiz, doimo rasmiy docs'ni vavendor/nativephp/...ichidagi haqiqiy klass fayllarini tekshiring.
Desktop facade'lari (rasmiy docs'dan)¶
Desktop'da OS bilan ishlash uchun facade'lar mavjud. Bu nomlar nativephp/desktop paketidagi haqiqiy klasslardan olingan (Native\Desktop\Facades\ namespace ostida):
Windowβ oyna ochish/yopish/o'lchamlashNotificationβ tizim bildirishnomalariMenuβ ilova menyusiMenuBarβ tray/menubar ilovasiSystemβ tizim ma'lumotlariSettingsβ saqlanadigan sozlamalarGlobalShortcutβ global tugma birikmalari- (yana:
Dialog/Alert,Clipboard,Dock,Screen,Shell,ChildProcessva boshqalar)
Mobilda esa facade'lar Native\Mobile\Facades\ namespace ostida, masalan Camera, Biometrics, Geolocation, SecureStorage, PushNotifications, Microphone, Scanner, Share, Dialog, Browser, Device, Network, System. Bularning bir qismi bepul/MIT pluginlar (masalan Camera, Network, File), bir qismi esa premium/pullik bo'lishi mumkin (masalan PushNotifications, Biometrics) β yuqoridagi litsenziya eslatmasiga qarang. Aniq imzolar, plugin nomlari va litsenziya holati uchun rasmiy mobil docs'ni ko'ring β biz ularni keyingi boblarda batafsil tekshiramiz.
Har bir facade'ning aniq metod imzosini ixtiro qilmaslik uchun: yozishdan oldin rasmiy docs sahifasini yoki paket ichidagi facade faylini oching. Bu kitobda biz aynan shunday qildik.
Yaqin yo'l xaritasi¶
Keyingi boblarda:
- 02-bob: Muhit va talablar (PHP, Laravel, Node versiyalari),
nativephp/desktopo'rnatish,native:install. - Keyin: oyna modeli, menyu, bildirishnoma, lokal SQLite, build/packaging, va mobil tomon (plugin tizimi, qurilma imkoniyatlari).
Hozircha eng muhimi β arxitekturani his qildingiz: UI = webview (HTML), mantiq = PHP, qobiq = Electron/Swift/Kotlin, va bu sof native emas, lekin haqiqiy ilova.
Mashqlar¶
Eslatma: NativePHP'ning katta qismini (GUI, qurilma, build) bu muhitda ishga tushirib bo'lmaydi. Shuning uchun mashqlarning ko'pi "kod yoz / arxitekturani tushuntir / to'g'ri nomni ayt" turida. Ataylab xato namunalar
# βbilan belgilangan.
Oson¶
- Uch qatlam. NativePHP ilovasining uch qatlamini (qobiq, UI, mantiq) o'z so'zingiz bilan ayting va har biriga desktop'dagi konkret texnologiyani moslang.
- To'g'ri facade. Quyidagilardan qaysi import to'g'ri, qaysi noto'g'ri?
Native\Laravel\Facades\WindowyokiNative\Desktop\Facades\Window? Nega? - UI = webview. Bir jumlada tushuntiring: NativePHP'da tugma bosilganda nima bo'ladi va u "sof native tugma" deb hisoblanadimi?
- Paket nomlari. Desktop va mobil uchun mos
composer requirebuyrug'ini yozing. - Bildirishnoma kodi.
Native\Desktop\Facades\Notificationyordamida sarlavhasi "Bajarildi" va matni "Fayl saqlandi" bo'lgan bildirishnoma chiqaradigan kod yozing. - PHP qayerda? Desktop va mobilda PHP qayerda va qanday ishlashini farqlab bering.
O'rta¶
- Window kodi.
dashboardroute'ini ochadigan, sarlavhasi "Hisobot", kengligi 1000, balandligi 800 bo'lgan oyna ochuvchi Controller metodini yozing. - Taqqoslash jadvali. NativePHP, Electron, React Native va Flutter'ni "til / UI usuli / sof native?" ustunlari bo'yicha jadvalga soling.
- Qachon kerak emas. Uchta konkret loyiha g'oyasini sanab bering, ularda NativePHP yaxshi tanlov EMAS, va nega.
-
Xatoni toping. Quyidagi kodda nima xato (arxitektura nuqtai nazaridan)?
11. Eloquent host-mantiq. NativePHP desktop ilovasida// β Bu yondashuv NativePHP falsafasiga zid Route::get('/profil', function () { $svg = generateNativeSwiftUIButton(); // SwiftUI tugma yaratish return $svg; });Taskmodeli bilan lokal SQLite'ga vazifa qo'shadigan va sonini chiqaradigan qisqa kod yozing. 12. Cross-platform fikr. Bitta Laravel kod bazasidan ham desktop, ham mobil ilova chiqarish uchun nima o'zgarishi va nima o'zgarmasligi kerakligini tushuntiring.
Qiyin¶
- Arxitektura diagrammasi (matnda). Foydalanuvchi tugmani bosganidan to OS bildirishnomasi chiqquncha bo'lgan oqimni (webview -> PHP -> bridge -> OS) bosqichma-bosqich yozing.
- Qaror matritsasi. Bir kompaniya ichki ombor boshqaruv ilovasi qurmoqchi (CRUD, hisobotlar, lokal baza, ba'zan offline). Jamoa Laravel'da kuchli. NativePHP'ni tanlash yoki tanlamaslikni asoslang, kamida 4 ta omilni ko'rib chiqing.
- Halollik tahlili. "NativePHP bilan men SwiftUI darajasidagi native ilova yozaman" degan da'voni tanqidiy baholang: nimasi to'g'ri, nimasi noto'g'ri?
- Migratsiya rejasi. Mavjud Laravel veb-ilovani NativePHP desktopga "o'rash" uchun yuqori darajadagi 5 bosqichli reja tuzing (kod yozmasdan, qadamlarni tavsiflang).
Yechimlar
1. Uch qatlam: - Qobiq β OS bilan gaplashadigan native dastur; desktopda Electron (Chromium + Node.js). - UI β webview ichidagi HTML/CSS/JS, ya'ni Blade/Livewire/Inertia interfeysi. - Mantiq β PHP/Laravel (Route, Controller, Model, Eloquent).
2. To'g'ri: Native\Desktop\Facades\Window. Noto'g'ri: Native\Laravel\Facades\Window. Sababi β nativephp/desktop paketida facade'lar Native\Desktop\Facades\ namespace ostida joylashgan. Eski/internetdagi ba'zi namunalar Native\Laravel\... deb adashtiradi; doimo paket ichidagi haqiqiy klass faylini tekshirish kerak.
3. Tugma bosilganda webview ilova ichidagi PHP'ga veb-so'rovga o'xshash so'rov yuboradi; Laravel Controller javob qaytaradi (yoki Livewire holatni yangilaydi). Bu sof native tugma EMAS β u HTML <button>, webview (brauzer dvigateli) ichida chizilgan.
4.
5.
use Native\Desktop\Facades\Notification;
Notification::title('Bajarildi')
->message('Fayl saqlandi')
->show();
6.
- Desktop: PHP bundle qilingan binar sifatida ilova bilan birga jo'natiladi (nativephp/php-bin). Foydalanuvchida PHP o'rnatilgan bo'lishi shart emas.
- Mobil: PHP qurilmaning o'zida ishlaydi β oldindan kompilyatsiya qilingan PHP 8.4 runtime Swift/Kotlin qobig'iga bundle qilinadi; veb-server kerak emas, offline-first.
7.
use Native\Desktop\Facades\Window;
public function hisobot()
{
Window::open('hisobot')
->title('Hisobot')
->width(1000)
->height(800)
->route('dashboard');
return response()->noContent();
}
composer native:dev (Composer skripti; ichida php artisan native:run + npm run dev) ishlaganda ko'rinadi. Kod va facade to'g'ri.)
8.
| Texnologiya | Til (mantiq) | UI usuli | Sof native? |
|---|---|---|---|
| NativePHP | PHP/Laravel | Webview (Blade) | Yo'q |
| Electron | JS/Node.js | Webview | Yo'q |
| React Native | JS/TypeScript | Native widget | Ha |
| Flutter | Dart | O'z dvigateli (Skia) | Ha |
9. NativePHP yaxshi tanlov EMAS bo'lgan misollar: - Mobil o'yin (real-time grafika, GPU) β webview cheklaydi, o'yin dvigateli (Unity/Godot) kerak. - Premium iOS ilova 100% native his bilan β SwiftUI/React Native yaxshiroq, chunki webview "tabiiy" his bermaydi. - Juda yengil bo'lishi shart bo'lgan utilita β Electron qobig'i o'nlab MB qo'shadi; Tauri yoki native yengilroq.
10. Xato: NativePHP'da PHP'da "SwiftUI tugma yaratish" mumkin emas β bu arxitekturaga zid. UI har doim HTML/CSS (webview) orqali keladi; native widget'lar PHP'dan to'g'ridan-to'g'ri yaratilmaydi. To'g'ri yondashuv β Blade view qaytarish:
11.
use Illuminate\Database\Eloquent\Model;
class Task extends Model
{
protected $guarded = [];
}
Task::create(['nom' => 'Birinchi vazifa', 'bajarildi' => false]);
echo 'Jami vazifalar: ' . Task::count();
12. O'zgarmaydi: biznes-mantiq (Route, Controller, Model, Eloquent) va asosan UI (Blade/Livewire) bir xil qoladi. O'zgaradi: o'rnatiladigan paket (nativephp/desktop vs nativephp/mobile), qobiq (Electron vs Swift/Kotlin), PHP joylashuvi (bundled binar vs on-device runtime), va platforma-xos facade/pluginlar (desktopda Window/Menu, mobilda Camera/Biometrics). Mobilda .env'da NATIVEPHP_APP_ID kabi sozlamalar qo'shiladi.
13. Oqim:
1. Foydalanuvchi webview ichidagi HTML tugmasini bosadi.
2. Webview ilova ichidagi PHP'ga so'rov yuboradi (veb-so'rovga o'xshash, lekin tashqi serversiz).
3. Laravel route -> Controller mantig'i ishlaydi.
4. Controller Notification::title(...)->message(...)->show() chaqiradi.
5. Bu buyruq native bridge orqali qobiqqa (Electron/Swift/Kotlin) boradi.
6. Qobiq OS API'sini chaqiradi va tizim haqiqiy bildirishnoma chiqaradi.
14. Omillar: - Jamoa ko'nikmasi: Laravel'da kuchli -> NativePHP plyus. - Talab darajasi: CRUD + hisobot + lokal baza β webview yetarli, native his shart emas -> plyus. - Offline: lokal SQLite + on-device/bundled PHP buni qoplaydi -> plyus. - UI murakkabligi: og'ir grafika yo'q -> webview cheklovi muammo emas -> plyus. Xulosa: bu holatda NativePHP kuchli tanlov β jamoa mavjud bilim bilan tez yetkazadi va talablar webview imkoniyatlari ichida.
15. Tahlil: - To'g'ri: haqiqiy, mustaqil ilova chiqadi; OS imkoniyatlari (bildirishnoma, kamera, fayl) facade orqali ishlaydi; bitta kod bazasi. - Noto'g'ri: "SwiftUI darajasidagi native" β yo'q. UI webview ichidagi HTML; SwiftUI piksellarni OS chizadi, NativePHP esa brauzer dvigatelida render qiladi. Murakkab UI/animatsiyada farq sezilarli bo'lishi mumkin. Demak da'vo "native ilova" qismida to'g'ri, "SwiftUI darajasida" qismida chalg'ituvchi.
16. Migratsiya rejasi (yuqori daraja):
1. Laravel ilovani brauzerda to'liq ishlashiga ishonch hosil qiling (chunki NativePHP shu kodni o'raydi).
2. Talablarni tekshiring (PHP 8.3+, Laravel 11+, Node 22+) va composer require nativephp/desktop o'rnating.
3. php artisan native:install ishga tushiring (service provider, config/nativephp.php, Electron bog'liqliklari).
4. Asosiy oynani sozlang: kirish route'ini Window::open()->route(...) orqali oching; navigatsiya/menyuni moslang.
5. Lokal ma'lumot (SQLite), fayl yo'llari va OS integratsiyasini (bildirishnoma, tray) qo'shing; so'ng composer native:dev (Composer skripti; ichida php artisan native:run + npm run dev) bilan sinab, php artisan native:build (artisan buyrug'i) bilan paketlang. (Ular GUI/packaging talab qiladi β rasmiy muhitda ishlaydi.)
π README Β· Keyingi: 02 β Muhit, talablar va Laravel asos β‘οΈ