Cyber Monday! Get 25% off for as long as you keep your subscription. New subscribers only.

composermark

composermark

Former Film Composer at Self-Employed

Member Since 2 Months Ago

Leatherhead, Surrey

Experience Points
18,160
Total
Experience

1,840 experience to go until the next level!

In case you were wondering, you earn Laracasts experience when you:

  • Complete a lesson — 100pts
  • Create a forum thread — 50pts
  • Reply to a thread — 10pts
  • Leave a reply that is liked — 50pts
  • Receive a "Best Reply" award — 500pts
Lessons Completed
169
Lessons
Completed
Best Reply Awards
0
Best Reply
Awards
  • start your engines Created with Sketch.

    Start Your Engines

    Earned once you have completed your first Laracasts lesson.

  • first-thousand Created with Sketch.

    First Thousand

    Earned once you have earned your first 1000 experience points.

  • 1-year Created with Sketch.

    One Year Member

    Earned when you have been with Laracasts for 1 year.

  • 2-years Created with Sketch.

    Two Year Member

    Earned when you have been with Laracasts for 2 years.

  • 3-years Created with Sketch.

    Three Year Member

    Earned when you have been with Laracasts for 3 years.

  • 4-years Created with Sketch.

    Four Year Member

    Earned when you have been with Laracasts for 4 years.

  • 5-years Created with Sketch.

    Five Year Member

    Earned when you have been with Laracasts for 5 years.

  • school-in-session Created with Sketch.

    School In Session

    Earned when at least one Laracasts series has been fully completed.

  • welcome-newcomer Created with Sketch.

    Welcome To The Community

    Earned after your first post on the Laracasts forum.

  • full-time-student Created with Sketch.

    Full Time Learner

    Earned once 100 Laracasts lessons have been completed.

  • pay-it-forward Created with Sketch.

    Pay It Forward

    Earned once you receive your first "Best Reply" award on the Laracasts forum.

  • subscriber Created with Sketch.

    Subscriber

    Earned if you are a paying Laracasts subscriber.

  • lifer Created with Sketch.

    Lifer

    Earned if you have a lifetime subscription to Laracasts.

  • evangelist Created with Sketch.

    Laracasts Evangelist

    Earned if you share a link to Laracasts on social media. Please email [email protected] with your username and post URL to be awarded this badge.

  • chatty-cathy Created with Sketch.

    Chatty Cathy

    Earned once you have achieved 500 forum replies.

  • lara-veteran Created with Sketch.

    Laracasts Veteran

    Earned once your experience points passes 100,000.

  • 10k-strong Created with Sketch.

    Ten Thousand Strong

    Earned once your experience points hits 10,000.

  • lara-master Created with Sketch.

    Laracasts Master

    Earned once 1000 Laracasts lessons have been completed.

  • laracasts-tutor Created with Sketch.

    Laracasts Tutor

    Earned once your "Best Reply" award count is 100 or more.

  • laracasts-sensei Created with Sketch.

    Laracasts Sensei

    Earned once your experience points passes 1 million.

  • top-50 Created with Sketch.

    Top 50

    Earned once your experience points ranks in the top 50 of all Laracasts users.

Level 4
18,160 XP
Nov
07
3 weeks ago
Activity icon

Replied to Jetstream User Factory Model With Teams

Yes indeed afterCreating did work! Though why it didn't the first time I tried I don't understand.

Nov
06
3 weeks ago
Activity icon

Started a new Conversation Jetstream User Factory Model With Teams

If you enable Teams in Jetstream - every new user has a default team created for them. It is a function inside the App\Fortify folder.

I am just trying to update the User Factory to replicate this functionality using a Factory Callback

The problem is that the user_id of the newly created User needs to be passed to this callback - but I'm not sure how to do this.

public function definition()
{
    return [
        'name' => $this->faker->name,
        'email' => $this->faker->unique()->safeEmail,
        'email_verified_at' => now(),
        'password' => 'yIXUNpkjO0rOQ5byMi.Ye4oKoEa3Ro9llC/.og/at2.uheWG/igi', // password
        'remember_token' => Str::random(10),
    ];
}

public function configure()
{
    return $this->afterMaking(function (User $user) {
        $user->ownedTeams()->save(Team::forceCreate([
            'user_id' => $user->id,
            'name' => explode(' ', $user->name, 2)[0]."'s Team",
            'personal_team' => true,
        ]));
    })->afterCreating(function (User $user) {
        //
    });
}
Activity icon

Commented on TodoMVC With Alpine: Part 3

This kind of thing makes me feel very nervous about handling volatile data using client-side methodology versus server-side CRUD models connected to a database. @jeffreyway

Activity icon

Commented on TodoMVC With Alpine: Part 3

As an Alpine feature, x-cloak is useful to stop things you want hidden on initial render from flashing to the screen. So, for example, try this:

<label x-cloak for="toggle-all">Mark all as complete</label>

and also

<footer x-cloak class="footer" x-show="todos.length">
Oct
31
4 weeks ago
Activity icon

Commented on Transitions 102

And if you’re using a styling on many elements across the app, like a button, you would extract these classes in Tailwind using @apply. Tailwind is basically vanilla CSS, total flexibility but with greater inline convenience, and removing the burden to maintain a master CSS file. The days of having to overwrite your stylesheet or a user-agent style are gone.

Activity icon

Replied to Do You Really Like Tailwind And Livewire ?

There is certainly something to be debated about the convenience or inconvenience of Laravel 8 and the current implementation of Jetstream, especially given the extra requirements of getting your head around Livewire/Inertia to make sense of it, plus Sanctum for the auth stuff. Since my only reference was this site's course on Laravel 5/6/7 - it has certainly delayed my first implementations while I get comfortable with it. Others I know have also commented on the steeper learning curve. But compared with the days of building everything from scratch, or developing your own framework and reusable components, it's night and day. Thankfully, I don't have much baggage, so the only question for me is whether the new approach is reliable, efficient and secure, flexible and adaptable to my UX and styling aspirations, fast to implement, and well supported. Livewire, Tailwind, Alpine and Laravel give me a lot of confidence - while the idea of being entirely dependent on the kinds of explanations found on StackOverflow, MDN or PHP.net for vanilla coding really doesn't, however much it has been useful for me to build in vanilla in the past and understand and appreciate what's actually behind the TALL stack.

@bestmomo I installed your repo to take a look. I appreciate the chance to compare. @vincej Maybe Bootstrap is better now than when I used it before - I'll take a look. But for time saving - clearly Tailwind doesn't trump Bootstrap in that respect. It's a different approach to styling as far as I can see, but an investment of learning time that may not affect your productivity or creativity if you're used to Bootstrap. Personally, I certainly don't have the time to spend 20 years refining my knowledge of CSS, PHP, SQL, JS or jQuery in order to create something as polished and solid as these frameworks allow me to be with only days of study and practice.

Activity icon

Replied to Do You Really Like Tailwind And Livewire ?

My 2 cents - beyond anything these wrappings can or cannot do - I'm a strong believer in an engineering methodology that allows anyone to follow and extend, without having to wade through someone's unique approach to scripting, or CSS or anything else. I also think Tailwind is an inspired approach to styling - sorry if the old guard have to learn something new - but that's how it is. And clearly there is no validity to a complaint about the number of requests Livewire or Vue make - since these things are perfectly controllable case by case.

By their very nature, PHP, Javascript, CSS are highly verbose, yet are asked to do the same types of functions again and again. Hence there is a clear need to create a generation of encapsulating frameworks to simplify those processes and functions which are both ubiquitous and predictable.

If you have to change the way you've done things, I sympathize. But I think there has never been a better time to learn coding for apps if you are starting from scratch. In a few more years, we won't even have to bother with learning Laravel, Tailwind or JavaScript at all. We'll be able to type or say ordinary language for what we want to see on the screen - and an AI algorithm will be able to take care of it. Primitive examples of this are already available. They may even work if you are using broken English too.

Oct
29
1 month ago
Activity icon

Commented on Toggle Visibility Using State

Godlike coding delivered to you on a plate. I guess you had to struggle with CSS, JS and PHP to really appreciate what a gift Alpine, Livewire, Vue, Tailwind and Laravel are today. Thanks @jeffreyway for making all these things so clear.

Activity icon

Commented on Toggle Visibility Using State

Yea - lol - I wondered why these comments first - then I watched the episode. Oh the blue color wasn't that clear - seriously?!!!!!!

Activity icon

Commented on Data Binding

Yes, very cool!!

Activity icon

Commented on Meet Teamsy

I think this was all recorded some time ago - even before Laravel 8 + Jetstream was released.

Also, if you play around with the Teams setting in Jetstream - you will see it works a little differently from what we are creating here. A Team in Jetstream is closer to the Tenant concept in this app. But by default, Jetstream allows a user to create more than one team and assign roles to them. Anyone invited to a team also has to be already in the system, which is a feature I would want to extend to allow invites to non-registered users.

It's going to be great homework adapting the Jetstream functionality to this or any of Jeffrey's example apps - like the Tweety.

Oct
28
1 month ago
Activity icon

Commented on Livewire File Uploads To Amazon S3

Totally awesome-sauce. Thanks Kevin. It would have completely done my head in trying to figure out S3 by myself.

Oct
26
1 month ago
Activity icon

Commented on Use Livewire With Blade Components

Isn't there some way to add some sort of computed property - so you're not repeating

attributes->whereStartsWith('wire:model')->first()
Oct
23
1 month ago
Activity icon

Commented on Log In With GitHub

Eh? I'm suddenly confused. How does it know what Githubber you are from a blank login screen?

Activity icon

Commented on Use TailwindUI For The Public Pages

Looking forward to the next episodes! It has given me so much inspiration.

Will you be doing anything on a SuperAdmin user dashboard? I think you did hint at this at the beginning. I'm particularly keen to see examples of stateless ways to consolidate data from many different apps in one place using API calls and tokens. I know Laravel 8 + Jet now offers creating API tokens for a user account as a feature out-of-the-box. However I know you also have built into this app that setting a user with no Tenant ID - they can access all users/tenants data which would be an easy SuperAdmin state. But it would be amazing to implement a stateless approach for such queries, and therefore offering an API for other software apps to interact with it. It would be like the icing on the cake for any app lesson.

Oct
22
1 month ago
Activity icon

Commented on Meet Teamsy

Super excited too!

Activity icon

Commented on Let's Begin With A Test

Whoa I missed something migrating from the last series to this one - what is this Php-unit business?

Oct
18
1 month ago
Activity icon

Commented on Let's Build A Memory Game

2020 - there's never been a better time to learn how to code. With a grasp of Laravel, Livewire, Vue, Tailwind, and now Alpine I'm feeling confident I can finally build those apps I've wanted to for years without all those frustrating visits to Stackoverflow. Great work Jeffrey and team! Thank you.

Oct
16
1 month ago
Activity icon

Commented on Contact Form With Validation

That was amazing! I suppose ideally you would also want the success message to disappear automatically after a certain time - also with a nice slide animation. How would you achieve that?

Oct
11
1 month ago
Activity icon

Commented on Send SMS Notifications In 5 Minutes

Khan Twillio

Activity icon

Commented on Send Email Using Markdown Templates

I'd love to see an example where responses to your emails can be captured and persisted to a database, like if you were developing a technical support app to manage customers and tickets.

Oct
07
1 month ago
Activity icon

Commented on The Password Reset Flow

I missed most of that lesson, because I was thinking about how many websites use this kind of flow to hinder and dissuade users from unsubscribing from their services, to avoid being auto - recharged down the line - using the kind of learning gained here to add that one extra message pop-up like - "Are you sure you want to unsubscribe. You will lose all the benefits of membership?" - so the user understandably worries that unsubscribing will invalidate their current login credentials and they will lose subscription they just paid $$$ for. Then they forget to cancel, and the company's customer service laughs in your face saying - ah - but our terms are auto renewal - sorry! And we are clever coders who record your subscription status in our clever databases. But, you say, I clicked on a dozen links to cancel, getting eventually to that message which said I'd lose all my benefits if I clicked this next button. Don't you have a record of that, clever coders? No, because none of those actions you took, which a reasonable person would take as clear evidence of a wish not be to auto-recharged, were sent to a controller endpoint which persisted steps to records in our database. Tough luck you! So, methinks, how to let enough potential users in the world know about the intricate twists and turns of these company's revenue strategy, realized by developers who in reality know exactly what they are doing and so often achieve by such deceptions. God forbid that a person should feel the need to have more control over when money comes out of their bank account or might only be able to afford extras to food and rent some months.

Activity icon

Commented on The Password Reset Flow

Lesson 50 in this course addresses user permissions.

Sep
29
2 months ago
Activity icon

Commented on Object-Oriented Forms: Part 3

So having returned Data to the Vue object - presumably you could then update the list of Projects without having to refresh the page? Or would the list of projects simply be a Vue object of its own so it would reactively update? I know this wasn't the point of these last few lessons - but it would have been nice to see that part dynamically update - so as to be consistent with previous lessons.

Sep
16
2 months ago
Activity icon

Commented on Make A Router

Lots in this lesson beyond routing which is why it seems like a hard one to digest. There is loads more on refactoring, important concepts for separating logic into a Model View Controller structure, static methods and protected variables. And yes, most of this gets handled by a dedicated Framework like Laravel. But yes, it is also good to get your head around this logic too, even if you never have to build an app from the ground up anymore.

Sep
15
2 months ago
Activity icon

Commented on Hide Your Secret Passwords

Actually, I love this stuff. Before I knew anything about frameworks, this was how I had to build my apps. But you miss a lot of stuff when you're teaching yourself. So these canonical explanations are really interesting.

Sep
11
2 months ago
Activity icon

Commented on Building The Layout

The install process now appears to be a little simpler for Laravel Mix - according to Tailwind site -

All that is required

mix.postCss('resources/css/main.css', 'public/css', [
  require('tailwindcss'),
])