Views & Controllers
Views & Controllers
Models
Views & Controllers
Models
Repositories
Views & Controllers
Models
Repositories
Dependency
Flow
Views & Controllers
Models
Repositories
✨🔥Holy barriers of trust 🔥✨
✨🔥Holy barriers of trust 🔥✨
Responsibility:
Make a user experience so amazing the donor wants to cry with joy.
Depends On:
The Controller to process the form request.
Responsibility:
Make a user experience so amazing the donor wants to cry with joy.
Depends On:
The Controller to process the form request.
{
"name": "Trusty Tim",
"email": "tim@legitemail.com",
"amount": "; DELETE wp_posts;",
"agree": "1"
}
Responsibility:
Recieve requests
Validate
Do business-y things
Respond
Depends On:
The models to do business-y things about business.
{
"name": "Trusty Tim",
"email": "tim@legitemail.com",
"amount": "; DELETE wp_posts;",
"agree": "1"
}
<?php
class DonationFormController {
public function __invoke() {
$name = $_POST['name'];
$email = $_POST['email'];
$amount = $_POST['amount'];
$agree = $_POST['agree'];
$donation = new Donation(
$name,
$email,
$amount
);
$donation->save();
}
}
Responsibility:
Recieve requests
Validate
Do business-y things
Respond
Depends On:
The models to do business-y things about business.
{
"name": "Trusty Tim",
"email": "tim@legitemail.com",
"amount": "; DELETE wp_posts;",
"agree": "1"
}
<?php
class DonationFormController {
public function __invoke() {
$name = $_POST['name'];
$email = $_POST['email'];
$amount = $_POST['amount'];
$agree = $_POST['agree'];
$donation = new Donation(
$name,
$email,
$amount
);
$donation->save();
}
}
Responsibility:
Recieve requests
Validate
Do business-y things
Respond
"name": "Trusty Tim",
"email": "tim@legitemail.com",
"amount": "; DELETE wp_posts;",
"agree": "1"
<?php
class DonationFormController {
public function __invoke() {
// Retrieve the data from the request
$name = $_POST['name'];
$email = $_POST['email'];
$amount = $_POST['amount'];
$agree = $_POST['agree'];
// Validation — the hero we need
// Innocently do business things
$donation = new Donation(
$name,
$email,
$amount
);
$donation->save();
}
}
Responsibility:
Recieve requests
Validate
Do business-y things
Respond
<?php
class DonationFormController {
public function __invoke() {
$validator = new Validator($_POST, [
'name' => ['required', 'max:255'],
'email' => ['required', 'email'],
'amount' => ['required', 'integer'],
'agree' => ['required', 'boolean']
])
if ($validator->passes()) {
$values = $validator->validated();
} else {
wp_send_json_error($validator->errors());
}
// Safe, trustworth data ❤️
$donation = new Donation(
$values['name'],
$values['email'],
$values['amount']
);
$donation->save();
// respond
wp_send_json_success();
}
}
"name": "Trusty Tim",
"email": "tim@legitemail.com",
"amount": "; DELETE wp_posts;",
"agree": "1"
<?php
class DonationFormController {
public function __invoke() {
$validator = new Validator($_POST, [
'name' => ['required', 'max:255'],
'email' => ['required', 'email'],
'amount' => ['required', 'integer'],
'agree' => ['required', 'boolean']
])
if ($validator->passes()) {
$values = $validator->validated();
} else {
wp_send_json_error($validator->errors());
}
// Safe, trustworth data ❤️
$donation = new Donation(
$values['name'],
$values['email'],
$values['amount']
);
$donation->save();
// respond
wp_send_json_success();
}
}
<?php
/**
* Field API:
*
* A mid-level API for building forms.
*
* 4 Primitive Types:
* - Node
* - Field: node that takes user input -- Text, Email, Select, Radio, Checkbox, etc.
* - Element: node that does not take user input -- Paragraph, Heading, etc.
* - Group: node that contains other nodes
*/
$form = new Form( 'profile' );
$form->append(
Section::make('personal')
->append(
Text::make('firstName')
->label('First Name')
->rules('required', 'max:255'),
Text::make('lastName')
->label('Last Name')
->rules('required', 'max:255'),
give_field('text', 'company')
->label('First Name')
->rules('required', 'max:255'),
Email::make('email')
->label('Email')
->rules('required', 'email')
)
);
$form->insertAfter('lastName', Text::make('middleName')->label('Middle Name'));
TBD?