echo $data i tak naprawdę tylko autor wie co się tam dzieje.
$request = [...$_GET, ...$_POST];
$slug = $request["slug"] ?? $request[0] ?? throw new Exception();
$query = new Query("SELECT * FROM articles WHERE slug = ?", $slug);
$results = $query->run();
return $results[0] ?? throw new Exception();$request = Request::createFromGlobals();
$slug = $request->getOrFail("slug");
$article = (new ArticlesQuery())->where("slug", $slug)->firstOrFail();
return $article;array(9) {
["id"]=>
string(36) "51c868ac-d352-4bdb-b380-08e8aac5f48d"
["title"]=>
string(11) "Lorem ipsum"
["slug"]=>
string(11) "lorem-ipsum"
["content"]=>
string(418) "Lorem ipsum dolor sit amet,
consectetur adipiscing elit.
Quisque fermentum vel sem
vitae eleifend. Aliquam in
posuere eros, eget imperdiet
tellus. Quisque imperdiet ligula
in ullamcorper facilisis. Ut in
justo pellentesque, ultricies arcu
id, commodo ex. Suspendisse bibendum
urna erat, ac molestie nibh congue
ac. Pellentesque in enim neque.
Phasellus metus sapien, consectetur
a fermentum sit amet, aliquam
eu velit."
["author_id"]=>
string(36) "dc7cdfc7-e050-4287-8652-00210e089249"
["status"]=>
int(3)
["created_at"]=>
string(19) "2024-04-08 17:00:00"
["updated_at"]=>
string(19) "2024-04-08 17:00:00"
["deleted_at"]=>
NULL
}object(Article)#1 (5) {
["id":protected]=>
string(36) "51c868ac-d352-4bdb-b380-08e8aac5f48d"
["title":protected]=>
string(11) "Lorem ipsum"
["slug":protected]=>
string(11) "lorem-ipsum"
["author":protected]=>
object(Author)#2 (2) {
["id":protected]=>
string(36) "dc7cdfc7-e050-4287-8652-00210e089249"
["fullName":protected]=>
string(14) "Matthew Stover"
}
["status":protected]=>
enum(Status::Active)
}
class UserRegistrar
{
public UserRegistrar(Hasher hasher, EventDispatcher dispatcher, CacheManager cache)
public User register(String email, String password) throws UserAlreadyExistsException
{
User user = new User()
user.setName(email)
user.setPassword(hasher.argon(password))
user.createOrFail()
user.notify(new WelcomeMessage(), Channel.Email)
dispatcher.send(new UserRegistered())
cache.refresh(Cache.UserStatistics | Cache.RegisterStatistics)
}
}
{% load static %}
{% extends 'base.html' %}
{% block title %} Lista użytkowników {% endblock %}
{% block content %}
<table class="table-auto w-full mt-4">
<thead>
<tr>
<th class="px-4 py-2">Imię i nazwisko</th>
<th class="px-4 py-2">Email</th>
<th class="px-4 py-2">Akcje</th>
</tr>
</thead>
<tbody>
{% for user in users %}
<tr>
<td class="border px-4 py-2">{{ user.full_name }}</td>
<td class="border px-4 py-2">{{ user.email }}</td>
<td class="border px-4 py-2 text-white font-bold ">
<button class="bg-blue-500 hover:bg-blue-700 py-2 px-4 rounded">Edytuj</button>
<button class="bg-red-500 hover:bg-red-700 py-2 px-4 rounded">Usuń</button>
</td>
</tr>
{% endfor %}
</tbody>
</table>
{% endblock %}
{{ $user->posts()->count() }} w Blade uruchomi... zapytanie bazodanowe prosto z widoku. Ała!
class ContactController extends Controller
{
public JsonResponse send(Request request)
{
if(!request.getContext().getUser()) {
return (new JsonResponse()).withStatus(401)
}
RequestValidator validator = new RequestValidator
validator.setRule("email", "required|min:3|email")
validator.setRule("author", "required|min:3")
validator.setRule("message", "required|min:20")
ValidatorStatus status = validator.validate(request)
if(!status.passed()) {
return (new JsonResponse()).withStatus(422).withMessage(status.getMessage())
}
ContactMessageSender sender = new ContactMessageSender()
sender.send(request.get("email"), request.get("author"), request.get("message"))
User administrator = (new UserQuery()).where("admin", true).first()
administrator.notify("new message has been sent")
return (new JsonResponse()).withStatus(200)
}
}class ContactController extends Controller
{
public JsonResponse send(ContactMessageRequest request, ContactMessageSender sender)
{
sender.send(request.get("email"), request.get("author"), request.get("message"))
return (new JsonResponse()).withStatus(200)
}
}class PageController extends Controller
{
public function __invoke(Request $request, string $slug): JsonResponse
{
$page = Page::query()
->where("slug", $slug)
->where("is_active", true)
->firstOrFail();
return response()->json($page);
}
}Request i Response nie powinny wychodzić poza warstwę komunikacji; zarówno do modelu, jak i widoku, powinny być przesyłane jak najprostsze i najbardziej konkretne dane