This episode is for members only

Sign up to access "Build an E-Commerce Platform" right now.

Get started
Already a member? Sign in to continue
Playing
70. Creating a presenter for the order status

Episodes

0%
Your progress
  • Total: 8h 42m
  • Played: 0m
  • Remaining: 8h 42m
Join or sign in to track your progress
01. Introduction and demo
9m 42s
0%
02. Installing Laravel, Breeze and Livewire
4m 47s
0%
03. Creating categories
9m 4s
0%
04. Recursively displaying categories
8m 21s
0%
05. Product model and migration
2m 50s
0%
06. Showing a product
7m 50s
0%
07. Product variation setup
10m 26s
0%
08. Creating the product selector
10m 34s
0%
09. Loading child variation dropdowns
4m 28s
0%
10. Faking adding the final variation
9m 33s
0%
11. Setting up product stock
4m 34s
0%
12. Calculating variation stock levels
9m 1s
0%
13. Adding product images with MediaLibrary
8m 50s
0%
14. Creating the product gallery
7m 28s
0%
15. Providing a fallback image
2m 56s
0%
16. Adding media to product variations
3m 37s
0%
17. Creating the cart model
3m 37s
0%
18. Registering the cart service
6m 34s
0%
19. Creating a cart session
11m 4s
0%
20. Showing the cart in the navigation
9m 19s
0%
21. Caching the cart instance
3m 2s
0%
22. Adding items to the cart
14m 1s
0%
23. Creating the notification component
8m 5s
0%
24. Showing the user's cart
6m 50s
0%
25. Outputting cart items
4m 50s
0%
26. Showing variation specifics
8m 8s
0%
27. Updating item quantity
8m 2s
0%
28. Removing an item from the cart
6m 1s
0%
29. Calculating the cart summary
8m 7s
0%
30. Showing the category products page
5m 1s
0%
31. Indexing products in Meilisearch
8m 32s
0%
32. Hooking up products to categories
4m 15s
0%
33. Building the product browser
13m 32s
0%
34. Showing child categories
1m 51s
0%
35. Indexing product variations for filtering
8m
0%
36. Outputting variations for filtering
12m 52s
0%
37. Hooking up product filters with Livewire
7m 48s
0%
38. Filtering products
12m 24s
0%
39. Filtering by price
9m 50s
0%
40. Adding global navigation search
7m 50s
0%
41. Handling products that are not live
3m 22s
0%
42. Price range category fix
1m 18s
0%
43. Scaffolding the checkout page
8m 6s
0%
44. Listing shipping options
9m 3s
0%
45. Calculating the cart totals
2m 52s
0%
46. Validating the account form
9m 10s
0%
47. Validating the shipping form
5m 47s
0%
48. Saving the shipping address
8m 4s
0%
49. Selecting a saved shipping address
6m 39s
0%
50. Fix shipping address error for non authenticated users
1m 7s
0%
51. Redirecting if the cart is empty
2m 42s
0%
52. Checking for quantity changes
7m 11s
0%
53. Syncing if quantities have changed
11m 59s
0%
54. Flashing a message when quantities have changed
5m 48s
0%
55. Setting up for orders
5m 17s
0%
56. Creating an order
13m 24s
0%
57. Attaching variations to order
6m 13s
0%
58. Reducing stock after ordering
2m 56s
0%
59. Meilisearch filter query fix
1m 33s
0%
60. Showing the order confirmation page
7m 39s
0%
61. Attaching orders for registering guest users
5m 17s
0%
62. Scaffolding the orders page
5m 30s
0%
63. Filling in order variation details
5m 24s
0%
64. Returning the order status
4m 39s
0%
65. Detecting order status changes
10m 49s
0%
66. Sending the order status change email
5m 12s
0%
67. Sending an order confirmation email
2m 47s
0%
68. Handling deleted cart records
4m 44s
0%
69. Transferring the guest cart
2m 44s
0%
70. Creating a presenter for the order status
4m 31s
0%
71. Setting up Stripe
3m 43s
0%
72. Creating and updating a PaymentIntent
16m 21s
0%
73. The Stripe card form
3m 35s
0%
74. Validating before payment
5m 34s
0%
75. Submitting a payment
6m 40s
0%
76. Checking for a successful payment
5m 47s
0%
77. Handling Stripe client errors
3m 11s
0%
78. Entangling Stripe customer data
2m 18s
0%

Transcript

00:00
We mentioned this earlier, and we're now going to go ahead and clear up these if statements
00:03
in our blade template with a presenter. So what this is going to allow us to do is pretty much just reduce all of this down to one line by extracting away the logic of checking each of the status that we have here and outputting the correct value.
00:18
So let's go ahead and make this change and then you can use presenters pretty much anywhere you need if you add to this. Okay, so we're going to come up to our models directory here and inside of here, we're going to create a presenters folder.
00:34
Inside of here, we're going to create out an order presenter and this is just really a standard class. So let's go ahead and give this a namespace of app models and presenters. Let's go ahead and call this order presenter.
00:50
And all we need to accept into here is an instance of that order. So let's go ahead and accept the order in and let's go ahead and set that to protected and that's pretty much it. Now what we can do is implement any methods over on this
01:05
and then use this to present that data. So how do we access this order presenter? Let's just create out a really quick test method that we can call. Let's call this status and let's just return in here presenter
01:19
just so we know that's what we're calling. So over in our order model, what we're going to do, and this is a very basic implementation for the presenter. Let's just stick this at the bottom.
01:28
We're going to go ahead and create a presenter method which returns a new order presenter and then it passes in the model which is just this. And now what we can do is call presenter status
01:42
and that will give us out that status. We can add the if statements in here in code rather than doing this all within blade. So if we just go ahead and comment these out really quickly and we go up here and just output order, presenter and status,
02:00
what that's now going to give us is that presenter value that we returned. So we can pretty much take all of these if statements, refactor them over to this presenter and it's nice and clean. Let's just do this first of all exactly like we have done within our template
02:14
and then we'll refactor this to a more modern PHP solution. So we need to reference this order now and we're going to say does the status equal placed at? Well, if that's the case return order placed
02:28
and let's go ahead and just duplicate this down here and then maybe we could have some sort of default of unknown or just an empty string. So this is going to be packaged at order packaged and this is going to be shipped at and order shipped.
02:45
Okay, let's go over and let's give that a refresh and of course we get exactly the same thing because we've just moved the logic over. We can now get rid of this in our template and that's nicely cleared that up with a very very simple implementation of a presenter.
03:00
So you could do this for pretty much anything you could do it maybe for the slight variations that you have here with each of the items that you're iterating through. It's entirely up to you.
03:10
Now we're going to go ahead and look at a more modern solution to this and that is using match. So match will allow us to take in a value. It's kind of like a switch statement but a little bit better
03:21
and that's going to be this order and status and then from here we can go ahead and choose what we want to return based on this value. So we're going to go ahead and say placed at is going to return order placed and we can just come and separate these down.
03:38
So packaged at is going to return order packaged if we can grab that like so and let's just do the next one by hand that shipped at order shipped. So now we can get rid of these three if statements here
03:57
and that's a lot better. We can also define a default in here as well. So the default is just going to be an empty string. Okay, let's not forget to add a colon on the end of here
04:09
and we're pretty much done that works in exactly the same way. Just to really quickly test this out. Let's go over to this order here and let's set packaged at and shipped up to now
04:21
and there we go. So it works in exactly the same way but we've nicely reduced this down with a match and we've tucked it away in a presenter.
78 episodes8 hrs 42 mins

Overview

Build a robust e-commerce platform with a Laravel and Livewire. Features products with unlimited and flexible variations, a product browser with filters and price range slider, global product search, guest checkout, shipping and payment implementation, order status tracking and more.

Alex Garrett-Smith
Alex Garrett-Smith
Hey, I'm the founder of Codecourse!

Comments

No comments, yet. Be the first to leave a comment.