Leren Laravel
Ik ben vandaag de hele dag bezig geweest om wat te spelen met Laravel om mijn kennis hierin uit te breiden. Zelf heb ik altijd met CodeIgniter MVC gewerkt dus de stap naar Laravel is een flinke verbetering vind ik zelf ;)
Echter kom ik er met de documentatie, Google etc niet helemaal uit hoe je nu op de juiste manier het MVC model hier in moet gebruiken, en dan met name het gebruik van de models.
Wie kan mij hierbij wat op weg helpen en een duw in de juiste richting geven?
Zelf heb ik een aantal voorbeelden functioneel gekregen, echter is dit enkel met routers, controllers en views. Ik ben vanuit mijn CodeIgniter kennis gewend dat alle database acties en scripts in de models plaats vinden, maar hoe ik nu vanuit een controller een functie binnen een model juist aanroep is mij een raatsel.
De dingen die ik geprobeert heb zijn:
Controller heet: DataController
Model heet: Data
Model code:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
class Data extends Eloquent {
protected $table = 'data';
public function save(array $options = array()){
$set = array(
'veld1' => Input::get('veld1'),
'veld2' => Input::get('veld2'),
'veld3' => Input::get('veld3'),
);
print_r($set);
DB::table('data')->insert($set);
}
}
protected $table = 'data';
public function save(array $options = array()){
$set = array(
'veld1' => Input::get('veld1'),
'veld2' => Input::get('veld2'),
'veld3' => Input::get('veld3'),
);
print_r($set);
DB::table('data')->insert($set);
}
}
Controller code:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
class DataController extends BaseController {
public function index(){
return View::make('data/form');
}
public function save()
{
Data::save();
}
}
public function index(){
return View::make('data/form');
}
public function save()
{
Data::save();
}
}
Dit bovenstaande werkt niet, en geeft als foutmelding:
Non-static method Data::save() should not be called statically, assuming $this from incompatible context
Wie kan en wil mij helpen!
Gewijzigd op 08/10/2014 19:51:34 door Robert Wazzaa
Wat je doet klopt helemaal, alleen wat de error al aangeeft, hij kan niet static worden aangeroepen. Maak in je model van public function save ... => public static function
http://laravel.com/docs/4.2/eloquent
Zodra je een model maakt en Eloquent extend, heb je gelijk toegang tot save en delete functies.
Die hoef je in principe dus niet zelf te definiëren.
Verder kan je Eloquent ook gebruiken om mass-assignment tegen te gaan.
Een voorbeeld van een model zou er dan zo uit kunnen zien:
Zolang je app/config/database.php goed is ingesteld en je een tabel hebt met de naam "data" en de velden "id", "veld1", "veld2", "veld3" is je model al klaar voor gebruik.
Een controller zou er dan zo uit kunnen zien:
Over ongeveer een maand komt geloof ik trouwens versie 5.0 van Laravel uit mocht je daar al interesse in hebben, staan hier een aantal mooie (gratis) screencasts https://laracasts.com/series/laravel-5-from-scratch
Als je met Eloquent wilt werken raad ik je sowieso aan eerst dit goed door te lezen: Zodra je een model maakt en Eloquent extend, heb je gelijk toegang tot save en delete functies.
Die hoef je in principe dus niet zelf te definiëren.
Verder kan je Eloquent ook gebruiken om mass-assignment tegen te gaan.
Een voorbeeld van een model zou er dan zo uit kunnen zien:
Code (php)
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
class Data extends Eloquent
{
protected $table = 'data';
protected $fillable = [
'veld1',
'veld2',
'veld3',
];
}
{
protected $table = 'data';
protected $fillable = [
'veld1',
'veld2',
'veld3',
];
}
Zolang je app/config/database.php goed is ingesteld en je een tabel hebt met de naam "data" en de velden "id", "veld1", "veld2", "veld3" is je model al klaar voor gebruik.
Een controller zou er dan zo uit kunnen zien:
Code (php)
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
class DataController extends Controller
{
public function save()
{
$data = Input::only(['veld1', 'veld2', 'veld3']);
$dataModel = new Data($data);
$dataModel->save();
}
}
{
public function save()
{
$data = Input::only(['veld1', 'veld2', 'veld3']);
$dataModel = new Data($data);
$dataModel->save();
}
}
Over ongeveer een maand komt geloof ik trouwens versie 5.0 van Laravel uit mocht je daar al interesse in hebben, staan hier een aantal mooie (gratis) screencasts https://laracasts.com/series/laravel-5-from-scratch
Gewijzigd op 09/10/2014 00:10:14 door Tim S
Bedankt voor deze informatie, hier kan ik zeker wat mee!
Ik ga weer even verder knutselen en stoeien..