Action class
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?
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.
De action class heeft nu enkel een execute methode.
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)
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
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;
}
}
?>
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)
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
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)
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
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;
}
}
?>
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 );.
Gewijzigd op 18/03/2013 15:30:48 door Ozzie PHP
Werk je ook met een controller? Anders zou de execute met een andere naam meer een methode hiervan zijn.