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
74. Validating before payment

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're going to take this part to validate this form before we even attempt a payment,
00:05
which we're going to be doing in the next episode. This is really important because we don't want to try and process a payment until we know that this form is completely filled in, whatever data you're accepting and validating. So the first thing that we're going to do over in checkout is go ahead and call the
00:23
validate method within the LiveWire component from this Alpine submit method. How are we going to do that? Well, the first thing that we're going to do is convert this to an async function. We're going to come over to checkout, and we're going to create a kind of proxy to validate
00:39
our form. So we're going to call this maybe call validate, and it's just saying here this and validate. Now we know that we are doing this just up here when we submit the payment through. I think we called this checkout.
00:56
So we're doing this here, which is fine. We can keep it in there as well, but we also want that proxy to do this before we go and actually process a payment. So let's go ahead and call this call validate method directly from in here.
01:08
How do we do that? Well, we're going to go ahead and say await. We're going to use a special LiveWire property to go ahead and access any of the methods or properties that we have on our LiveWire component.
01:20
So we're just going to call call validate, and that's enough to go ahead and trigger that validation. Down here, we're going to go ahead and say console log submit payment or process payment. Now this is going to be called at this point even if validation fails.
01:35
We're going to see how we can cover that in a minute. Okay, let's go ahead and just get rid of our console for a second. Let's go ahead and hit confirm order and pay, and you can see here that the validation has happened exactly as we would expect, and we've got submit payment.
01:51
So we're triggering this validation, but we're also then going ahead and potentially submitting the payment information through the Stripe card form, which at the moment has disappeared. We'll cover that in just a second. Okay, so how are we going to work out if we actually have any errors and whether we want
02:07
to go ahead and submit the payment? Well, to do this, again, we're going to kind of proxy this. So let's go in here and create out a get error count method, and let's go ahead and return. We need to grab the validation error bag from Livewire.
02:26
If we just go over to our base component within Livewire, we've got this validates input trait. Inside of here, we've got this get error bag method, which returns to us the error bag, which could potentially be filled with any errors. So we're going to return this get error bag.
02:43
On its own, that's not going to work, but we're going to use the count property. So this is going to return to us how many errors there are. Now, if there are zero errors, we can go ahead and continue to process the payment. So once again, down here, what we're going to do is maybe just assign this.
02:58
So error count, I'm going to await on get error count, console log the error count, and we should see how many errors we get. Okay, let's go over and let's go up to the top here, hit confirm order and pay. This will be a little bit slow, but you can see that we've got four errors, 1, 2, 3, 4.
03:22
Now, if we go ahead and fill all this information in, so let's just enter some details in here, A, B, C, hit confirm, we get zero. Well, in our case, we get one because this is already an account in use. So let's try that again.
03:39
And there we go, we get zero. So we know now that we can compare this error count with zero and then only submit the payment if this is the case. So what I'm going to do is just go ahead and create an if statement out in here and just
03:52
do an early return. So if error count is greater than or equal to one, then just return and do nothing. We can improve on this later. Okay, let's go over and just give this a refresh, hit confirm order and pay.
04:07
And you can see the validation errors come in, but we don't submit the payment. Let's go ahead and fill in all of this information once again, A, B, and C, hit that. And there we go, we get the submit payment. So although this is a little bit of a roundabout way to do things, it means that we don't go
04:26
ahead and submit the payment until we know that we've got all of the information filled in our validation rules. Because we're now bringing in Alpine here to actually set Stripe up and process a payment, we need to talk between the Alpine and Livewire components.
04:41
Okay, so the payment form, as you can see at the moment, has disappeared. Now the reason for that is when Livewire is re-rendering this, this is disappearing because it was previously set up with Alpine. Now for this, what we can pretty much do is just go over to our card element, let's find
05:00
that on the page, and just do a wire ignore on this. So Livewire doesn't replace this out when it does a patch of the DOM. So what we can do now is just check and make sure that this stays in here. If we hit confirm order and pay, we get all of our error messages, but all of this stays
05:17
in here because Livewire is ignoring it. And once again, we can go ahead and fill all of this information in. And once we've done that, and that is successful, we still have our payment form, and we can go on and submit the payment, which is exactly what we're doing in the next episode.
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!

Episode discussion

No comments, yet. Be the first!