Action class

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Tom Swinkels

Tom Swinkels

18/03/2013 14:30:15
Quote Anchor link
Beste programmeurs,

Voor het toevoegen van bijvoorbeeld een artikel heb ik nu één action class, ArticleAction.class.php.

Moet ik nu voor het bewerken een nieuwe action class maken, ArticleEditAction.class.php, of moet ik op het moment van de edit bijvoorbeeld een ID meesturen en wanneer de action class een id krijgt weet hij dat het om een edit gaat?

Het zelfde voor het ophalen van artikelen, moet dat ook via een action class, denk aan de afhandelingen bestaat het artikel, is er wel een artikel opgegeven?
 
PHP hulp

PHP hulp

27/10/2021 14:45:19
 
Nick Audenaerde

Nick Audenaerde

18/03/2013 14:34:01
Quote Anchor link
Heb je wel eens gehoord van CRUD? dat staat voor Create Read Update & Delete.
Dat staat vaak in 1 klasse ik weet niet of je een design pattern gebruikt of niet, maar het is uiteindelijk je eigen keuze hoe je het opdeelt.
Als ik jou was zou ik de bewerken "update" functie gewoon toevoegen aan je ArticleAction.php.
 
Tom Swinkels

Tom Swinkels

18/03/2013 14:38:56
Quote Anchor link
Ik zal daar eens na gaan zoeken.

De action class heeft nu enkel een execute methode.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
<?
$articleAction
= new ArticleAction();
if ( $articleAction->execute() )
{

 echo 'GELUKT';
}

else
{
 echo 'FORMULIER';
}

?>
 
Ozzie PHP

Ozzie PHP

18/03/2013 14:50:14
Quote Anchor link
Volgens mij zie je het verkeerd. Een article is een object.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
$article
= new Article();
?>

Dit object (het artikel) bevat meerdere functies (in een class ook wel "methods" genoemd) en properties (eigenschappen).

Je moet dan bijvoorbeeld aan zoiets denken:

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
21
22
23
24
25
26
27
28
29
<?php
class Article {

  private $author;
  private $text;
  private $title;

  public function __construct($author) {
    $this->author = $author;
  }


  public function getAuthor() {
    return $this->author;
  }


  public function setText($text) {
    $this->text = $text;
  }


  public function getText() {
    return $this->text;
  }


  public function editText($text) {
    $this->text = $text;
  }

}

?>

En dan gaan we een artikel aanmaken:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
<?php
$article
= new Article('Tom Swinkels');
$article->setText('Het is bijna lente!');
echo 'Auteur is: ' . $article->getAuthor();
echo 'Tekst: ' . $article->getText();
?>

Dit is maar even een simpel voorbeeld, maar het gaat vooral om het idee hoe OOP werkt.
Gewijzigd op 18/03/2013 14:50:56 door Ozzie PHP
 
Tom Swinkels

Tom Swinkels

18/03/2013 15:19:14
Quote Anchor link
@ozzie:

Klopt, dit gedeelte heb ik al ;) Dit gaat over de Article class, ik heb het nu over een Action class.

Een action class word bijvoorbeeld uitgevoerd bij een submit.

Voorbeeld van een action class

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
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
<?php
class ArticleAction
{
    private $_articleMapper;

    public function __construct( ArticleMapper $articleMapper )
    {

        $this->_articleMapper = $articleMapper;
    }


    public function execute( Request $request )
    {

        $this->_error = new Error();

        $emptyValidator = new EmptyValidator();

        if( !$emptyValidator->valideer( $request->post( 'submit' ) ) )
        {

            if( $emptyValidator->valideer( $request->post( 'title' ) ) )
            {

                $this->_error->setError( 'Geen titel ingevuld' );
            }

            if( $emptyValidator->valideer( $request->post( 'content' ) ) )
            {

                $this->_error->setError( 'Geen content ingevuld' );
            }

            elseif( !$this->_error->checkError() )
            {

                $article = new Article();
                $article->setTitle( $request->post( 'title' ) );
                $article->setContent( $request->post( 'content' ) );
                
                $this->_articleMapper( $article );
                
                return true;
            }
        }

        return false;
    }
}

?>


Toevoeging op 18/03/2013 15:20:36:

Krijg mijn vorige post niet gewijzigd, klein foutje $this->_articleMapper( $article ); word -> $this->_articleMapper->create( $article );.
 
Ozzie PHP

Ozzie PHP

18/03/2013 15:30:36
Quote Anchor link
Maar je hoeft toch niet een aparte action class te maken? Je kan toch een update/edit method maken in je Article class? Ik zie niet in waarom je een aparte action class zou maken.
Gewijzigd op 18/03/2013 15:30:48 door Ozzie PHP
 
Tim S

Tim S

18/03/2013 15:50:38
Quote Anchor link
Werk je ook met een controller? Anders zou de execute met een andere naam meer een methode hiervan zijn.
 



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.