Today, I'm working on a Selenium "driver" that uses the exact same testing API as the one you're already familiar with. Could be cool?
Today, I'm working on a bit of refactoring for the Laravel Elixir codebase. In this lesson, come along, as I experiment with a particular refactor - which will hopefully organize things a bit more cleanly.
There's nothing too fancy in this episode. We need to take the "most recent series" section on the Laracasts home page, and turn it into a curated, featured list. Along the way, we'll discuss the value in not over-doing tasks like this. While we could whip up a UI with a bunch of drag and drop goodness, the reality is that all of that takes time. Why not opt for the simplest possible implementation first, and then you can always expand upon it in the future - if and only if you decide it's necessary. As such, we'll simply hardcode a list of series ids that we wish to feature within a config file. Easy!
Today, I'm tinkering around with Turbolinks, which was recently - at the time of this writing - extracted to its own library that may be used anywhere. It's pretty sweet! Drop it in, and it instantly begins working. All anchor links clicks will be intercepted, and AJAX requests will be sent in their place. This allows for a signifiant performance boost, as the user only needs to download relevant scripts and stylesheets once on the initial page load.
Today, I'm personally working on a particular GitHub issue that revolves around hooking into Elixir's default Webpack configuration. Want to come along?
Why don't all Laracasts videos focus on PHP and Laravel? Because that's not real life. Sure, sometimes you need to write server-side code. But, at other times, you're tasked with animating an object along a freaking circle. So let's figure out how.. ;)
View the source for this little example on JSBin.com.
As part of the Laracasts refresh that I'm currently working on at the time of this recording, I need a dedicated page for my "Laracasts Snippet" podcast. In this episode, as an example, we'll create a brand new project, fetch my podcast feed using Simplecast's API, cache it, and then render it in a view.
View the source code for this lesson on GitHub.
What I'm working on today is a potential new/separate version of Laravel Elixir that exclusively uses Webpack, rather than Elixir. In this episode, rather than writing code, we'll talk about why I'm working on this, and what the potential benefits are.
For this new version of Laravel Mix (the evolution of Laravel Elixir) that I'm working on, I need to create a single PHP function that can dynamically calculate the correct path to an asset, such as a script or stylesheet. This should work, regardless of whether hot reloading or file versioning have been enabled/requested. Let's knock it out together, using TDD.
This episode will be a bit different. Come along, as I personally learn how to use Laravel Dusk (Laravel's new acceptance testing package) completely from scratch. While most lessons at Laracasts are edited to be as succinct as possible, this one is a bit more realistic, and reflects how I personally learn a new tool.
It's very easy to fall into one particular testing trap. Are you testing your public interface, or the underlying implementation details? If you've ever noticed that any change to your code requires updates to their respective tests, take a moment and ask yourself why that is.
Today, I'm implementing a small ad-strip below Laracasts videos for guest users who aren't officially subscribed to Laracasts. Hey, it helps pay the bills, okay? Now, I've received basic instructions about the company's JSON API, but haven't implemented a single line of code yet. Come along, as I work through the process! I think we'll need to create a dedicated Vue component.
In this episode, I'm working on the Laracasts codebase. Specifically, I need a simple way to quickly generate single-use coupon codes, save them to the database, push them to Stripe.com, and then fire off an email to the recipient of the coupon. Let's use TDD to implement this functionality, and then, once we're at green, perform a round of refactoring to clean things up. Ready?
Today, I'm finishing up the 1.0 release of Laravel Mix. If you'd like to come along, I need to flesh out a few more end-to-end tests for the project. In many ways, these are far and away the most important tests you can write. Nobody cares that your unit tests pass, if the system doesn't work for the user!
Vue is fantastic. Turbolinks is, too. So what if we could find a way to use them together seamlessly. Well, out of the box that can be a bit tricky, due to a few reactivity and caching issues. Luckily, though, this problem seems to have been solved. In this episode, come along as I test it out.
During Laracon 2017, Maxime Locqueville demoed Algolia's excellent new Vue InstantSearch package. After watching this presentation, very quickly, I realized that I needed to improve the forum search functionality here at Laracasts. So come along as I get my feet wet and figure out how to use this new Vue plugin from scratch.
In the previous episode, together, we figured out how to use Algolia's Vue InstantSearch component package. At the conclusion, I noted that I would implement it for Laracasts. That process is now done, so come along as I provide a high-level overview of the integration and how it all pieces together.
Today, I'm working on the Laracasts codebase, itself. We need to fire off a "Please Come Back" email, each day, to all users who canceled their account two months ago. In this episode, we'll use TDD to drive out this logic from scratch.
Far and away, the most frequently requested subject material at Laracasts is a review of Vuex. However, I've been hesitant to oblige in the last year. I'm not sold yet. As such, these next few videos will be a bit unique. Rather than serving as an endorsement from an "expert," I'll be taking the role of the student. Come along as I review the documentation, try things out, make mistakes, and work my way through the learning process. Together, we'll come out the other side with a much better understanding of the pros and cons to this approach to state management, as well as when we might reach for it in future projects.
We're starting to wrap our heads around the basic concept of Vuex, so let's continue on in this episode with a review of getters and actions.
Now that we have a firmer grasp of the fundamentals, let's work through one of the vuex example projects. We'll build your typical, boring todo app. This should give us a better understanding of how to organize the Vuex store, and delegate to it from our Vue components.
Today, I need to add a missing test for a recent Laravel Mix PR that we merged. Even though I'm sure the PR code is correct, it's important that we fill it in with a test to ensure, for the lifetime of the project, that this piece of functionality does exactly what we expect it to.
View the source code for this episode on GitHub.
Today, I need to whip up a countdown timer for an upcoming sale. While we could pull in a dedicated plugin for this functionality, it's fairly simple to implement on our own with Vue. Come along, as I knock it out in this episode.
View the source code for this episode on GitHub.
In this episode, come along as I prepare a login modal from scratch. As it turns out, this will provide a number of useful real world examples for us to work through. How do you display and hide a modal from anywhere in your app? Can we display validation errors without manually performing a full page refresh? What can we use to rapidly style our form? And might we implement one of those fancy loading spinners after the "Log In" button is pressed? All of these questions (and more) will be answered.
In this episode, I'll outline my thought process behind a Laravel Mix codebase refactor that I'm currently working. We'll address the areas that I've determined to be problematic, and then discuss and review the solution I've come up with to make each component of the API more cohesive.
If you don't mind, let's continue on from the previous episode, where we reviewed a plugin refactoring for the Laravel Mix codebase. In this episode, I'd like to verify that this approach can be used by any author to introduce new functionality into Mix. It sounds like we need to prepare a feature test to declare each ability that the code should offer. Come along!
Come along, as I upgrade the Laracasts 404 page from Laravel's default view to something a bit more special. In this episode, you'll learn how to override the default 404 view, render AfterEffects animations with Airbnb's Lottie library, and then write the necessary page CSS with Tailwind. ...And we'll do it all in less than twenty minutes.
Today, I'd like you to come along as I refactor a class with too many responsibilities. Once we've found and addressed the issue, we'll prepare a series of tests to confirm our new desired public API and protect our refactoring against any potential regressions.
In this episode, we'll work through a refactor of the "Browse" page here at Laracasts. I've tweaked the code just enough to give us a variety of small refactors to work on. And "small" is key for this lesson. Specifically, we'll focus on indentation, variable names, and clarity.
In this lesson, come along as I refactor my "slide up" modal Vue components. The goal will be to ensure that future modals will be as simple and intuitive as possible to construct and configure.
For the next version of the Laracasts forum, we offer a small feature that provides @username autocompletion when writing a new reply. To populate this list of usernames, we reference the conversation owner, every person who has left a reply, and all usernames who have been mentioned within those replies. Let me show you how to construct this very logic from scratch, using TDD. This lesson will give us a chance to flex our regex and refactoring muscles, so it should be fun! Let's get started.
In this episode, come along as I, in real-time, publish the beta release of Laravel Mix 4 to GitHub and NPM. This new version of Mix catches us up to webpack 4, Babel 7, and vue-loader 15. As part of that update, however, a number of code changes were necessary. With that in mind, I'd like to do a round or two of beta releases before we pull the trigger and officially release Laravel Mix 4 to the public.
To save time, Laracasts originally used Disqus for its video comments section. However, it's time to migrate to a native solution that is better connected to your user profile. Come along as I use TDD to begin constructing the API for a new threaded comments section.
Policy classes are incredibly useful for managing authorization logic for your models. But what happens when we require authorization on the frontend - perhaps within a Vue component? Let's review three approaches that you might consider.
I thought you might like to come along, as I implement a tiny feature for the Laracasts video page. If a user edits their comment, we need to track this change and display a (edited) flag next to their username. This provides a small heads-up that the comment has changed since its original publish date.
Imagine that you need to iterate over a list of items and render the contents of an SVG icon for each. With PHP, this is a cinch. We only need to append the
.blade.php extension to each file. Then, we can dynamically
@include the necessary SVG file. However, when inside a Vue component, things get a bit more tricky. I recently hit a roadblock when working on this very issue. In this episode, we'll review how to solve this problem with webpack and Laravel Mix. A special hat tip goes out to Caleb Porzio, who documented the solution we review in this episode.
I dedicate half of most Fridays to learning new techniques, tools, and libraries. This week, that tool is Cypress: an excellent acceptance testing framework. In this episode, if you'd like to hang out with me, come along as I discuss what I learned and how I wired it up to work nicely with Laravel. This way, we can easily create Eloquent factories or set the authenticated user without returning to the login form for every test.
In the previous episode, we discussed everything I learned about Cypress.io on my first day. In this lesson, we'll move on to day two. I learned about additional assertions, contexts, database seeding, custom HTML data attributes, the Cypress dashboard, and more.
I recently ran into a nasty little bug in the Laracasts codebase that took me a while to track down. Once I realized what the problem was, the solution only required a few characters. In this lesson, we'll review a small demo that reproduces an issue related to casting a filtered PHP array to JSON.
View the source code for this episode on GitHub.