Leren Laravel

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Robert Wazzaa

Robert Wazzaa

08/10/2014 19:51:13
Quote Anchor link
Beste PhpHelpers,

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)
PHP script in nieuw venster Selecteer het PHP script
1
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);


    }

}



Controller code:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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();

    }

}


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
 
PHP hulp

PHP hulp

29/03/2024 12:37:32
 
Victor G

Victor G

08/10/2014 23:18:47
Quote Anchor link
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
 
Tim S

Tim S

09/10/2014 00:02:58
Quote Anchor link
Als je met Eloquent wilt werken raad ik je sowieso aan eerst dit goed door te lezen: 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:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
class Data extends Eloquent
{
    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)
PHP script in nieuw venster Selecteer het PHP script
1
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();
    }
}



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
 
Robert Wazzaa

Robert Wazzaa

15/10/2014 11:00:16
Quote Anchor link
Hey Tim,

Bedankt voor deze informatie, hier kan ik zeker wat mee!
Ik ga weer even verder knutselen en stoeien..
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.