Laravel Livewire: For Laravel Devs

Kuchwizzy

JF-Expert Member
Oct 1, 2019
1,072
2,308
Tangu nianze kuitumia kwenye baadhi ya projects, imetokea kuwa my favorite
Ni recommended zaidi kwa PHP dev ambaye hutaki Kuhangaika na Javascript na mda huo huo unataka kutengeneza Rich user experience kwenye web app yako.

Warning
Hii quick guide, sio beginners friendly ina assume msomaji angalau ni intermediate Laravel dev.

Overview
Livewire ni Laravel Package inayokuwezesha kutengeneza Dynamic User Interface (Part ya UI inayo interact na mtumiaji in real time) bila kuhitaji msaada wowote wa Javascript au Javascript frameworks kama Vuejs na React

Architecture
Architecture ya Livewire ni rahisi mno, kimsingi Livewire ina divide User Interface ya application into components

Kama ilivyo Vuejs na React, ila tofauti ni kwamba components za Livewire ni PHP Classes na sio Javascript functions

Kila component ina its own state na methods au actions zinazo tumika ku access na ku modify hio state.

Installation
Kama tayari una Laravel project, run hii command kwenye root directory ya project yako

Code:
composer require livewire/livewire

Baada ya installation kukamilika, tengeneza blade file lenye jina la livewire-example.blade.php ndani ya resources/views folder

Kisha add hizi blade directives kama ifuatavyo
Code:
<head> @livewireStyles</head>
<body> @livewireScripts</head>

Hizo directives mbili zinaenda ku include CSS na Javascript codes zinazotumiwa na Livewire behind the scene

Baada ya hapo, run hii artisan command kuunda Livewire component

Code:
php artisan make:livewire Post

Hii command itaenda ku generates files mbili kwenye project yako
Moja Post.php na lingine post.blade.php

Post.php lina act kama logic layer ya component yako, huku post.blade.php lita act kama presentation layer au view

Kwenye Post.php utakutana na codes za namna hii

Code:
namespace App\Http\Livewire',
use Livewire\Component',
class Post extends Component
{
public function render()
{
return view('livewire.post')',
}
}
render method inahusika ku render component yako kwenye DOM

post.blade.php lenyewe halina chochote kwa sasa zaidi ya empty div tags

Code:
<div> </div>


kuona nini tunaweza fanya kwa kutumia livewire, tunaweza tengeneza Model na some testing data za kutumia

Run hii artisan command ku generate Model Class na migration file kwa ajiri ya Database

Code:
php artisan make:model Post -m

Then, ku generate testing data, tuta generate Seeder

Code:
php artisan make:seeder PostTableSeeder

Fungua posts_table migration file, then add hizi lines of code,
Code:
$table->string('title')',
$table->text('description')',

Tume keep our database simple, just table moja ya post, post ina title na _description _


Then, ku populate database yetu with testing data, add hizi codes ndani ya run method ya PostTableSeeder.php
Code:
$posts = [
[
'title' => 'Python', 
'description' => 'General purpose programming language widely used in data science and AI'
],
[
'title' => 'PHP', 
'description' => 'A server side scripting language widely used in web development '
]
]',

foreach($posts as $post) {

Post::create($post) 

}

Usisahau ku import Post Model

Kwenye Post Model, specify which attributes ni mass assignable

Kwenye case yetu ni title na description

So
Code:
protected $fillable = ['title', 'description ']',

Then kwenye DatabaseSeeder.php add hii line of code

Code:
$this->call(PostTableSeeder::class) ',

Now, run hizi commands

Code:
php artisan migrate && php artisan db:seed

Sasa tunaweza rudi kwenye components yetu na kuanza kuitumia

Kwa mfano, tunaweza display list of posts kwenye view kama ifuatavyo

Ndani ya render method
Code:
public function render() {
$posts = Post::all()',

return view('livewire.post', ['posts => $posts])',
}

Then kwenye post.blade.php component tunaweza ku access hizi data kwa kutumia foreach directive
Code:
<div> 
@foreach($posts as $post) 
<div><h1>$post->title</h1></div>
@endforeach
</div>

Kisha include component yako kwenye livewire-example.blade.php
Code:
<body>
@livewire('post') 
</body>

Then kwenye web.php file, add this
Code:
Route::get('/livewire-example', function () {
return view('livewire-exampe) ',
})',

Then uki visit, localhost:8000/livewire-example utaona posts zako

Kitu kizuri kuhusu livewire, ni kwamba huhitaji controller tena

Let say tunataka tu delete post, kitu pekee tutakacho fanya ni ku add method kwa ajiri ya hilo action

Mfano kabla ya render method, add

Code:
public function deletePost($id) 
{
Post::findOrFail($id) ->delete()',
}

Mechanism
Behind the scene, Livewire inatumia AJAX kuzungumza na web server, kisha inafanya kazi ya ku mutates DOM kila state au data kwenye app yako inapo change bila ya wewe kuhofu.

Kuna vitu vingi sana vikubwa unaweza kuvifanya with Livewire, kama upo interested visit hapa

Laravel Livewire Documentation

Kama upo interested na Livewire au Programming in general na ungependa ujifunze zaidi just leave a comment


Full stack developer, 0748333586
 
Tangu nianze kuitumia kwenye baadhi ya projects, imetokea kuwa my favorite
Ni recommended zaidi kwa PHP dev ambaye hutaki Kuhangaika na Javascript na mda huo huo unataka kutengeneza Rich user experience kwenye web app yako.

Warning
Hii quick guide, sio beginners friendly ina assume msomaji angalau ni intermediate Laravel dev.

Overview
Livewire ni Laravel Package inayokuwezesha kutengeneza Dynamic User Interface (Part ya UI inayo interact na mtumiaji in real time) bila kuhitaji msaada wowote wa Javascript au Javascript frameworks kama Vuejs na React

Architecture
Architecture ya Livewire ni rahisi mno, kimsingi Livewire ina divide User Interface ya application into components

Kama ilivyo Vuejs na React, ila tofauti ni kwamba components za Livewire ni PHP Classes na sio Javascript functions

Kila component ina its own state na methods au actions zinazo tumika ku access na ku modify hio state.

Installation
Kama tayari una Laravel project, run hii command kwenye root directory ya project yako

Code:
composer require livewire/livewire

Baada ya installation kukamilika, tengeneza blade file lenye jina la livewire-example.blade.php ndani ya resources/views folder

Kisha add hizi blade directives kama ifuatavyo
Code:
<head> @livewireStyles</head>
<body> @livewireScripts</head>

Hizo directives mbili zinaenda ku include CSS na Javascript codes zinazotumiwa na Livewire behind the scene

Baada ya hapo, run hii artisan command kuunda Livewire component

Code:
php artisan make:livewire Post

Hii command itaenda ku generates files mbili kwenye project yako
Moja Post.php na lingine post.blade.php

Post.php lina act kama logic layer ya component yako, huku post.blade.php lita act kama presentation layer au view

Kwenye Post.php utakutana na codes za namna hii

Code:
namespace App\Http\Livewire',
use Livewire\Component',
class Post extends Component
{
public function render()
{
return view('livewire.post')',
}
}
render method inahusika ku render component yako kwenye DOM

post.blade.php lenyewe halina chochote kwa sasa zaidi ya empty div tags

Code:
<div> </div>


kuona nini tunaweza fanya kwa kutumia livewire, tunaweza tengeneza Model na some testing data za kutumia

Run hii artisan command ku generate Model Class na migration file kwa ajiri ya Database

Code:
php artisan make:model Post -m

Then, ku generate testing data, tuta generate Seeder

Code:
php artisan make:seeder PostTableSeeder

Fungua posts_table migration file, then add hizi lines of code,
Code:
$table->string('title')',
$table->text('description')',

Tume keep our database simple, just table moja ya post, post ina title na _description _


Then, ku populate database yetu with testing data, add hizi codes ndani ya run method ya PostTableSeeder.php
Code:
$posts = [
[
'title' => 'Python',
'description' => 'General purpose programming language widely used in data science and AI'
],
[
'title' => 'PHP',
'description' => 'A server side scripting language widely used in web development '
]
]',

foreach($posts as $post) {

Post::create($post)

}

Usisahau ku import Post Model

Kwenye Post Model, specify which attributes ni mass assignable

Kwenye case yetu ni title na description

So
Code:
protected $fillable = ['title', 'description ']',

Then kwenye DatabaseSeeder.php add hii line of code

Code:
$this->call(PostTableSeeder::class) ',

Now, run hizi commands

Code:
php artisan migrate && php artisan db:seed

Sasa tunaweza rudi kwenye components yetu na kuanza kuitumia

Kwa mfano, tunaweza display list of posts kwenye view kama ifuatavyo

Ndani ya render method
Code:
public function render() {
$posts = Post::all()',

return view('livewire.post', ['posts => $posts])',
}

Then kwenye post.blade.php component tunaweza ku access hizi data kwa kutumia foreach directive
Code:
<div>
@foreach($posts as $post)
<div><h1>$post->title</h1></div>
@endforeach
</div>

Kisha include component yako kwenye livewire-example.blade.php
Code:
<body>
@livewire('post')
</body>

Then kwenye web.php file, add this
Code:
Route::get('/livewire-example', function () {
return view('livewire-exampe) ',
})',

Then uki visit, localhost:8000/livewire-example utaona posts zako

Kitu kizuri kuhusu livewire, ni kwamba huhitaji controller tena

Let say tunataka tu delete post, kitu pekee tutakacho fanya ni ku add method kwa ajiri ya hilo action

Mfano kabla ya render method, add

Code:
public function deletePost($id)
{
Post::findOrFail($id) ->delete()',
}

Mechanism
Behind the scene, Livewire inatumia AJAX kuzungumza na web server, kisha inafanya kazi ya ku mutates DOM kila state au data kwenye app yako inapo change bila ya wewe kuhofu.

Kuna vitu vingi sana vikubwa unaweza kuvifanya with Livewire, kama upo interested visit hapa

Laravel Livewire Documentation

Kama upo interested na Livewire au Programming in general na ungependa ujifunze zaidi just leave a comment


Full stack developer, 0748333586
That's great, nilichoipendea laravel, ndio framework ya PHP yenye documentaton ya maana na mpangilio mzuri.

Simple to learn
 
That's great, nilichoipendea laravel, ndio framework ya PHP yenye documentaton ya maana na mpangilio mzuri.







Simple to learn
Eeh!?
 







Eeh!?
Ndio yàani kama ulovyozipanga
 
There is no way mtumiaji wa php anaweza kuikwepa js, ndo maana hata utakuta hata kama utatumia laravel livewire utajikuta unalazimika kutumia alpine js au hata vanilla js kuisupport kwenye baadhi ya vitu, na kibaya zaidi usipokuwa makini unaweza kuioverload server maana kila inapohusika livewire lazima kuna ajax server request, sasa kama unatengeneza app ambayo inakuwa accessed na watu wengi kwa wakati mmoja unaweza kukuta umetengeneza DDOS isiyokuwa na ulazima.
The best to go with Laravel ni kutumia JavaScript framework kama React au Vue JS au NextJS
 
There is no way mtumiaji wa php anaweza kuikwepa js, ndo maana hata utakuta hata kama utatumia laravel livewire utajikuta unalazimika kutumia alpine js au hata vanilla js kuisupport kwenye baadhi ya vitu, na kibaya zaidi usipokuwa makini unaweza kuioverload server maana kila inapohusika livewire lazima kuna ajax server request, sasa kama unatengeneza app ambayo inakuwa accessed na watu wengi kwa wakati mmoja unaweza kukuta umetengeneza DDOS isiyokuwa na ulazima.
The best to go with Laravel ni kutumia JavaScript framework kama React au Vue JS au NextJS
kali linux
 
There is no way mtumiaji wa php anaweza kuikwepa js, ndo maana hata utakuta hata kama utatumia laravel livewire utajikuta unalazimika kutumia alpine js au hata vanilla js kuisupport kwenye baadhi ya vitu, na kibaya zaidi usipokuwa makini unaweza kuioverload server maana kila inapohusika livewire lazima kuna ajax server request, sasa kama unatengeneza app ambayo inakuwa accessed na watu wengi kwa wakati mmoja unaweza kukuta umetengeneza DDOS isiyokuwa na ulazima.
The best to go with Laravel ni kutumia JavaScript framework kama React au Vue JS au NextJS
Hakuna Ulazima wa kutumia Alpinejs au Javascript Unapotumia Livewire.

Na kwa simple interactions ambazo hazihitaji communication na server, (mfano drop-downs) Alpinejs inayo yote unayohitaji.

React na Vuejs zina strength na weaknesses zake, hazifai kwa kila project na wala sio standard way ya ku develop reactive UI.

Github wanatumia the same technique inayotumiwa na Livewire, no Js framework

Pia Vuejs na React ni preferably zaidi Kama lengo lako ni kutengeneza SPA, kwa web app zenye SEO in mind, sio recommended choice.

Laravel livewire, haiwezi sababisha DOS attack, hivi unaelewa nini maana ya DDOS anyway?
 
Mie natumia pure PHP na ReactJS,

Frameworks zina ugumu fln usio wa lazima. Pia mie ni mpenzi wa functional programming ukilinganisha na OOP, coz tangu zamani naamini OOP haina performance nzr na ukiangalia frameworks hz kama laravel ni OOP based.

"Classes confuse both machines and people"
---unamjua
Pure PHP? Really?
I hope projects zako unazi maintain wewe mwenyewe milele.

OOP ni superior kuliko functional programming, sio issue ya kuamini.
 
Pure PHP? Really?
I hope projects zako unazi maintain wewe mwenyewe milele.

OOP ni superior kuliko functional programming, sio issue ya kuamini.
Sio kwamba namantain mm mwenyewe milele, ukiload codes zangu za php hata IDE unayotumia inazielewa, sembuse binadam? Natumia sana PHPDoc syntax kuelezea kila fn inafanya nn, hata mjukuu wangu akiwa coder ataelewa tu bila shida yyt. Kwenye atom hata utaeletewa suggestions kama variable types etc... Bila hvo hata mie mwenyewe baada ya miaka nisingekua naweza kusoma codes zangu.


Turudi kwenye issue ya OOP, kwanza jua mie napenda kuandika efficient code, code ambazo hazina routes nyingi nyingi zisizo na ulazima, I just get the work done cleanly. Swala la OOP ni zuri kwa kufuatisha ule msemo wa "Code is Poetry" coz inasaidia kiasi fln upande wa devs wanaomantain hizo code ila endapo machines zinazoprocess hizo codes zingekua zinaongea tungesikia mengi.


Anyway hili ni somo refu kukuelewesha lkn hadi kuona ReactJS wanatoka kwenye OOP kuja functional nadhan itakusaidia kuelewa nn kinaendelea. Hata huo msemo wa "Classes confuse both machines and people" nimeutoa kwenye documentation ya ReactJS wanapokazia kutumia functional components badala ya classes

Inshort tukiongelea performance OOP haina nafasi kwa Functional Programming
 
Sio kwamba namantain mm mwenyewe milele, ukiload codes zangu za php hata IDE unayotumia inazielewa, sembuse binadam? Natumia sana PHPDoc syntax kuelezea kila fn inafanya nn, hata mjukuu wangu akiwa coder ataelewa tu bila shida yyt. Kwenye atom hata utaeletewa suggestions kama variable types etc... Bila hvo hata mie mwenyewe baada ya miaka nisingekua naweza kusoma codes zangu.


Turudi kwenye issue ya OOP, kwanza jua mie napenda kuandika efficient code, code ambazo hazina routes nyingi nyingi zisizo na ulazima, I just get the work done cleanly. Swala la OOP ni zuri kwa kufuatisha ule msemo wa "Code is Poetry" coz inasaidia kiasi fln upande wa devs wanaomantain hizo code ila endapo machines zinazoprocess hizo codes zingekua zinaongea tungesikia mengi.


Anyway hili ni somo refu kukuelewesha lkn hadi kuona ReactJS wanatoka kwenye OOP kuja functional nadhan itakusaidia kuelewa nn kinaendelea. Hata huo msemo wa "Classes confuse both machines and people" nimeutoa kwenye documentation ya ReactJS wanapokazia kutumia functional components badala ya classes

Inshort tukiongelea performance OOP haina nafasi kwa Functional Programming
Na hii


“Many people who have no idea how a computer works find the idea of object-oriented programming quite natural. In contrast, many people who have experience with computers initially think there is something strange about object oriented systems.”
 
Frameworks zina ugumu fln usio wa lazima.
Kweli kuna extra learning curve but it is worthy it

Pia mie ni mpenzi wa functional programming ukilinganisha na OOP, coz tangu zamani naamini OOP haina performance nzr na ukiangalia frameworks hz kama laravel ni OOP based.
Unaweza kuweka benchmark?
In many cases this is not true as with caching the performance is always the same or even better.

In extreme cases the difference is insignificant.
Kama unaweza kuja na benchmark ambayo ni testable then itakuwa poa!
"Classes confuse both machines and people"
---unamjua
This is false. Classes are merely organizing your function adding few more things. Having trained people on OOP since 2014, am yet to find a confused student.

As with everything, learning should be fun. If it is confusing probably you have wrong teacher.
And machine? How does it get confused?

On top of all these, framework code have been scrutinized sometimes by thousands and tested on hundred if thousands projects, big and small. So it tends to be secure, robust and battle tested than your one man reviewed code.

Some parts of framework like security tends to get written by or audited by security experts. That adds to the confidence than one man code.

All in all, I would avoid writing something in my own, when there is battle tested one. And if I don't like something on it, I'll start with battle tested code and move from there.
 
Sio kwamba namantain mm mwenyewe milele, ukiload codes zangu za php hata IDE unayotumia inazielewa, sembuse binadam? Natumia sana PHPDoc syntax kuelezea kila fn inafanya nn, hata mjukuu wangu akiwa coder ataelewa tu bila shida yyt. Kwenye atom hata utaeletewa suggestions kama variable types etc... Bila hvo hata mie mwenyewe baada ya miaka nisingekua naweza kusoma codes zangu.
Hii behavior haina uhusiano wowote na FP, hata developer anayetumia OOP paradigm ku organize codes zake anapata same support

Almost all IDEs na Text Editors zina hii functionality, plus kuna a lot of extensions unazoweza kutumia kufanya hizo auto suggestions au auto completions kwenye codes zako. Haijalishi Paradigm ipi umetumia, so hii siwezi kuichukua kama sababu why FP is better than OOP

Turudi kwenye issue ya OOP, kwanza jua mie napenda kuandika efficient code, code ambazo hazina routes nyingi nyingi zisizo na ulazima, I just get the work done cleanly. Swala la OOP ni zuri kwa kufuatisha ule msemo wa "Code is Poetry" coz inasaidia kiasi fln upande wa devs wanaomantain hizo code ila endapo machines zinazoprocess hizo codes zingekua zinaongea tungesikia mengi.
Hapa, haupo sahihi kwa 100%.

FP na OOP ni programming paradigm, ni jinsi gani develop anaamua ku organize codes zake. They have nothing to do with performance.

In general, as long as programming language unayotumia ni Turing Complete, Machine haijali wala haifahamu ni Paradigm ipi umetumia ku organize codes zako.

Swali la kizushi, zingekua zinaongea tungesikia nini?

Anyway hili ni somo refu kukuelewesha lkn hadi kuona ReactJS wanatoka kwenye OOP kuja functional nadhan itakusaidia kuelewa nn kinaendelea. Hata huo msemo wa "Classes confuse both machines and people" nimeutoa kwenye documentation ya ReactJS wanapokazia kutumia functional components badala ya classes
For clarification, Reactjs wana recommend kutumia functional components dhidi ya Class based components sio FP over OOP

Na hii ni simply for app performance kulingana na nature ya Reactjs yenyewe.

Reactjs ina re render component along with all children components kila state ya hio component inapo change, hata kama individual states za children components hazitokua na mabadiliko yoyote.

Hio ni computationally expensive kama unatumia class based components ila ni less expensive kwa Function based component

Hii haina mahusiano ya moja kwa moja kati ya FP na OOP, ni just Functional component vs Class based component in React sio vita ya FP au OOP..

Plus Reactjs ni Javascript library kwa ajiri ya kubuild UI tu, huwezi kuichukua kama case ya why FP na sio OOP.

FP na OOP zinatumika ku model real world problems, sio UI tu

So siwezi ichukua Kama reason why FP na sio OOP.

Inshort tukiongelea performance OOP haina nafasi kwa Functional Programming

Again, OOP na FP they just programming paradigms, hazina mahusiano yoyote na performance ya program yako au individual programming language unayoitumia.

Mfano C++, (originally C with classes) ni majorly Object Oriented, but performance yake ni insane. na ina wide usages kwenye almost kila fields

OOP ni must have feature kwenye kila General purpose programming language yoyote,

Hata languages ambazo zamani zilikua purely Functional, now zina support OOP

Majority ya Programming languages zina advocate OOP, Mfano Python & Ruby na nyingine nyingi

Kwa case ya Python ni purely OP to the core.

OOP is way to go, Kama unataka ku develop Complex real world app au ku solve complex real world problem kwa urahisi.

So, hii pia siichukui kama sababu.

Na kwa ku develop complex system with Vanilla PHP, without Framework na bila concept yoyote ya OOP, kwangu ni big "red flag", kwanzia kwenye productivity mpaka security ya hio system

Personally ziwezi maintain project iliyokosa structure
 
Hii ni hoja au kijembe?
Ningependa kama ungetoa hoja, thus why tupo hili Jukwaa, sio MMU.
huwezi ku generalise kwamba 'OOP ni superior kuliko functional programming' vinginevyo ntakuona programmer wa mchongo

OOP iko superior kwenye muktadha x, functional iko superior kwenye muktadha y

ni sawa useme assembly na C ziko obsolete kwakua tu OOP iko superior

haimake sense nna instance moja then ntumie OOP

nafanya coding kwa devices zilizo na limited RAM,

nikitumia assembly napata speed ya juu , less hogged processor na very low RAM consumption, compared na nikitumia plain C

naintroduce OOP kukiwa na ulazima wa kufanya hivyo na pindi nnapo deal na machine yenye RAM kubwa, OOP ina bloats kwenye RAM, overheads na kama Kali alivyodai, huo wote ni mzigo kwa machine husika (less efficient)


machine inaexecute compiled code, HEX iliyotokana na fuctional ni sawa na mtaa, HEX ya OOP ni sawa na kata, kwa programs mbili zenye ku peform task ileile
 
OOP ni must have feature kwenye kila General purpose programming language yoyote
acha ku-generalize vitu

Hata languages ambazo zamani zilikua purely Functional, now zina support OOP
assembly ina subRoutines ( neno la kisasa ni functions ) nako kuna OOP support, si ndiyo ee

Kwa case ya Python ni purely OP to the core
I do Python procedurally, all the time
naingiza OOP kukiwa na ulazima kabisa
 
Na kwa ku develop complex system with Vanilla PHP, without Framework na bila concept yoyote ya OOP, kwangu ni big "red flag", kwanzia kwenye productivity mpaka security ya hio system
Hapa nakataa, ah ok kumbe ni maoni yako mkuu by IT kilaza
 
acha ku-generalize vitu

Nitajie general purpose Programming language moja inayotumiwa na majority ya devs ambayo hai support OOP? ,

assembly ina subRoutines ( neno la kisasa ni functions ) nako kuna OOP support, si ndiyo ee
assembly ni tofauti kabisa na programming languages ambazo devs wanazitumia in everyday projects, usiiweke kwenye Mjadala wa FP au OOP, unajua kazi ya Assembly kweli na cases zipi inatumika au unaitaja ili u impress mtu?
I do Python procedurally, all the time
naingiza OOP kukiwa na ulazima kabisa
Yah, unaweza kutumia kijiko pia kuchimbia shimo, lakini hio sio purpose ya kijiko.
 
Back
Top Bottom