Member Since 2 Years Ago

Experience Points 11,430
Experience Level 3

3,570 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 70
Best Reply Awards 7
Best Reply
  • Start Your Engines Achievement

    Start Your Engines

    Earned once you have completed your first Laracasts lesson.

  • First Thousand Achievement

    First Thousand

    Earned once you have earned your first 1000 experience points.

  • One Year Member Achievement

    One Year Member

    Earned when you have been with Laracasts for 1 year.

  • Two Year Member Achievement

    Two Year Member

    Earned when you have been with Laracasts for 2 years.

  • Three Year Member Achievement

    Three Year Member

    Earned when you have been with Laracasts for 3 years.

  • Four Year Member Achievement

    Four Year Member

    Earned when you have been with Laracasts for 4 years.

  • Five Year Member Achievement

    Five Year Member

    Earned when you have been with Laracasts for 5 years.

  • School In Session Achievement

    School In Session

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

  • Welcome To The Community Achievement

    Welcome To The Community

    Earned after your first post on the Laracasts forum.

  • Full Time Learner Achievement

    Full Time Learner

    Earned once 100 Laracasts lessons have been completed.

  • Pay It Forward Achievement

    Pay It Forward

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

  • Subscriber Achievement


    Earned if you are a paying Laracasts subscriber.

  • Lifer Achievement


    Earned if you have a lifetime subscription to Laracasts.

  • Laracasts Evangelist Achievement

    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 Achievement

    Chatty Cathy

    Earned once you have achieved 500 forum replies.

  • Laracasts Veteran Achievement

    Laracasts Veteran

    Earned once your experience points passes 100,000.

  • Ten Thousand Strong Achievement

    Ten Thousand Strong

    Earned once your experience points hits 10,000.

  • Laracasts Master Achievement

    Laracasts Master

    Earned once 1000 Laracasts lessons have been completed.

  • Laracasts Tutor Achievement

    Laracasts Tutor

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

  • Laracasts Sensei Achievement

    Laracasts Sensei

    Earned once your experience points passes 1 million.

  • Top 50 Achievement

    Top 50

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

24 Jun
1 day ago

hollyit left a reply on Develop On Windows 10, But Not When Offline

It's been a few years since I last used Acrylic and one of the reasons for it was exactly this. It would not work if you weren't connected to the internet, given that it works by setting the DNS resolver address of the active connection. Even if you try fooling it with a loopback interface, it wouldn't work. Not sure if that's still the case, but something to consider.

If this is the case, the only other option is to go from a virtual environment (docker, vagrant, etc.), since those do create actual networks that you can set the resolver on. It's that or just edit your windows hosts file to point whatever domain you're working on to

hollyit left a reply on Dominate Vue Router With Laravel Router

What exactly is it doing? Are you getting 404 or some other message? As long as you have a route('/admin') in there, it should match it. Actually looking at your Route up there, order shouldn't even matter as /admin should not match your /admin/{all} since {all} would be required.

You might want to try testing the routes in incognito or clearing the browser cache also, as if something sent a 301 redirect it would be cached. That's one little thing that has caught me in the past.

21 Jun
4 days ago

hollyit left a reply on Dominate Vue Router With Laravel Router

Make sure your new route is above your /admin/{all} route in the routes file. Laravel picks the first match, so order matters.

20 Jun
5 days ago

hollyit left a reply on Vue - Parse JSON String

@OLIVERBUSK - My suggestion would be to look at how other Vue table/datatable components work. Bootstrap-Vue is a very common one. If you look in the data() on this page, you'll see the items data that is structured in a row->column structure.

The easiest way to think of it is to vision how the HTML needs to look in the end and model your data similar to that. Tables have rows. Rows have children. So you need to walk down the nesting levels to get to each item. The table is your overall data structure. Inside that table you have multiple rows (), which is your next level down. Inside each row you have multiple columns (), which is the next level.

19 Jun
6 days ago

hollyit left a reply on Return Html Code To View With Javascript Have Repeat Issue

Does your response have an element with the id of content? Sounds like you're adding it into the outer #content div (or whatever element). You can try changing $('#content').empty().html(data); to $('#content').replaceWith(data). One thing to keep in mind on that is if you've done any programmatic binding on any elements within that new HTML (ie: $("#submit").click()), you'll have to rebind them.

hollyit left a reply on Vuelidate And @blur Not Working Correctly.

You can't return out of a promise, you must resolve or reject. Change your return true/false to resolve(true/false).

hollyit left a reply on Append Object To LocalStorage.

@NANADJEI2 - I don't like using localStorage for shopping carts for a couple of reasons. First, if it's a physical item then it's harder to keep track of stock. Second, if you store prices in the cart (ie: to accommodate for someone purchasing during a price change), then it's easy for them to change the price in the cart. It's much better to store cart data with their session on the server.

hollyit left a reply on Vue - Parse JSON String

Agree with @emilmoe - change your data structure. It should be an array of rows, which contains an array of columns. If you can do that in Laravel, it will be a lot easier in Vue. If not, then I would create a computed property to generate the proper array structure for the table. Then it's a simple case of:

<tr v-for="(row,rid) in rows" :key="rid">
   <td v-for="(col,cid) in row" :key="cid" v-text="col"></td>
09 Jun
2 weeks ago

hollyit left a reply on Laravel 5.x And Bootstrap 4.3 Handling With Tabs And Form

@BARANTR90 - If that's all you're doing, then the easiest and best method would be 2 different forms, each under it's own tab, each going to their own route. There's nothing stopping you from having more than one form on a page, and doing a route for status and a different one for media makes it extremely easy, plus makes it easier to handle other things like validation.

08 Jun
2 weeks ago

hollyit left a reply on Laravel 5.x And Bootstrap 4.3 Handling With Tabs And Form

I agree with @psylogic - go with a wizard. The problem you get with tabbed forms is a usability problem. If your validation fails on say a middle tab, you need to come up with a way to show that tab. Even worse, you got validation problems on more than one tab. You need a way to show that, unless you expect the user to click through all tabs.

If it were me, I would do all of this inside of Vue. You can validate each step, then move on and store all the data in the browser, submitting it once it all validates. The other way is to submit each step to the server, validate data and either show the error for that step, or store it with the session. Then in the final step get all your data from the session and do what you want with it. This is actually easier than it sounds, unless you're dealing with uploads in one of the steps that need stored in sessions. Then you got to come up with a temp file system to save the file and move it, etc. on the final step. You also need to figure out a way to clear out temp files that are on your disk and the form was never completed. That's why going with Vue is a lot simpler.

hollyit left a reply on Window.onload Vue File?

You need to make sure the component you want to mount is available in the global namespace, as Webpack won't do that by default.



import Vue from 'vue';

window.myMountFunction = function(el) {

    return new Vue({
        el: el,
        template: '<my-component></my-component>'

Then in your HTML or loader script:

window.addEventListener('onload', function () {
    let element = document.createElement('script');
    element,onload = function() {
        myMountFunction("#id of div you want it to appear in or other selector")
    element.src = './main.js';
07 Jun
2 weeks ago

hollyit left a reply on How To Pass Only Form Data Not The Html From One Component To Another On Submit

Are you using Vue Router? If so then what you want is state storage, which is accomplished with VueX.

If you are doing regular Laravel routes, then you would want to post the data back to laravel, store it with a user session and return it on the confirmation page.

hollyit left a reply on How To Change Title With Vue

Given how your code is now, the page is going to do a full load when the link is clicked, so you need to determine the title based upon the query in the page URL. Something like:

computed: {
    title() {
        let urlParams = new URLSearchParams(window.location.search);
        if (urlParams.has('flestUmmæli') return 'Flest ummæli';
        ... (repeat for each option)
05 Jun
2 weeks ago

hollyit left a reply on Github Warning | Potential Security Vulnerability Found In The Axios Dependency

Sorry for the delay. 0,19,0 does fix the vulnerability, but there's apparently some breaking changes in it. I haven't noticed what they are yet, and they haven't affected my projects. Just noticed on an issue. So they also released 0.18.1, which also addresses the vulnerability.

30 May
3 weeks ago

hollyit left a reply on Github Warning | Potential Security Vulnerability Found In The Axios Dependency

FYI - Axios 0.19.0 was released earlier today. You can do a yarn add [email protected] to install it. I've done it to a few sites and had no problems.

13 May
1 month ago

hollyit left a reply on Laravel Vuejs Error: Uncaught ReferenceError: Login Is Not Defined

In app.js:

import routes from './routes.js'
const router = new VueRouter({routes})

To your actual error. Yes you imported Login in your routes.js file, but at the error shows you, it isn't defined in app.js. You need to import things in every file you want to use it in. Just importing it in one file and thinking it will be available everywhere else goes against the whole idea behind modules and keeping the namespaces clean.

03 May
1 month ago

hollyit left a reply on HEADS-UP: PHP Short Tags Are Deprecated In 7.4

@JLRDW - I have been the same way for as long as I can remember (going back to PHP 4 days), but there's still people out there that think saving those 3 keystrokes saves a lot. Of course come PHP8, they'll be grepping out legacy code to fix things.

hollyit started a new conversation HEADS-UP: PHP Short Tags Are Deprecated In 7.4

Information is available here:


NOTE: the templating tag <?= is not affected by this.

17 Dec
6 months ago

hollyit left a reply on Targeting A Checkbox And Toggling Its State.

Instead of toggling it, why not disable the second one?

Check 1:

<input type="checkbox" @click="check1 = !check1" />

Check 2:

<input type="checkbox" :disabled="!check1" />

If you want to go the route you're talking about, then set up a watcher on the model for check 1.

    <input type="checkbox" v-model="check1" />
    <input type="checkbox" v-model="check2" />
export default {

  data() {
    return {
       check1: false,
       check2: false

watch: {
   check1(val) {
       if (val) {check2=true;}

14 Dec
6 months ago

hollyit left a reply on Cannot Add Foreign Key Constraint

You need to disable foreign key checks. I don't use sequel pro, so not sure if there's an option in the export (there is in exports on PHPMyAdmin). If there isn't, it's still an easy fix. Just open the export file and add this to the top:


Basically that disables the foreign key reference checks for the current session (ie: while the import is running). It will let all your tables get created and data imported without validating the foreign key constraints. There are times MySQL can still be fickle about it. If that happens then you're going to have to remove the foreign keys, do your dump and at the end of the dump (and data insert), add the alter commands to re-create the foreign keys. Most likely you're dealing with something simple enough that disabling foreign_key_checks should work for you.

hollyit left a reply on Vue, Dynamic Input Field, Retain/Keep After Refresh

Honestly, I would do the submit and everything inside of Vue. Then the data is going to be there, even if validation fails. It's a little older, but check out the Vue Forms lesson:


If you want to stick with the route you're going, you need to pass the submitted data back into your Vue component someway. The most common is using a prop on the component and passing the data in as JSON.

If you're doing a redirect from the validation, check out old-input on Laravel Requests:


If you're doing it all without redirecting, then it's pretty much the same. You put your data into a variable, say $oldInput. Then in your blade template you would do something like:

<formtest  :existing-supervisors="{!! json_encode($surveyData) !!}"></formtest>

And add that prop to your Vue component and use that to initialize your supervisors data.

10 Nov
7 months ago

hollyit left a reply on Is There Any Way That I Can Speed Up The Ffmpeg Processing Time

Are you sure it's actually FFMPEG and not just slow uploading to s3? The best thing to do would be to process the video file through the command line using straight FFMPEG and then doing the same video file through your app and see if there's a big time difference in processing. I've never used the PHP package for FFMPEG, but I handle a rather large site with tens of thousands of videos that are all processed through FFMPEG triggered from a Node JS server and even the more compressed mobile versions transcode fast. A 1024p video clip that's 10 minutes long is processed in less than 3 minutes, and that's on a low end VPS.

07 Nov
7 months ago

hollyit left a reply on Please Bring Back The Older Laracasts Design

HAHA. I launched a redesign for a site I webmaster for this week. We get around 350,000 page views a day (Drupal site, hopefully will be on Laravel next year). Just this morning I had an email come in from someone claiming to be a "big web developer" and he read my the riot act for not supporting IE 5.5. I think I laughed for about 20 minutes.

05 Nov
7 months ago

hollyit left a reply on Version Jquery

For future reference jQuery.fn.jquery is the sure fire way, in case jQuery wasn't assigned to $.

10 Oct
8 months ago

hollyit left a reply on Storage/app Not Readable CentOS

@adjaf - You can look in /var/log/audit at the log files and see if there's anything from selinux in there. It can be a real pain to configure. It should be ok since the rest of the app is working, but if a flag somehow gets screwed up on a directory, then that causes headaches (you can view flags with ls -Z).

Before that though, I would double check users and permissions. /storage should have +rwx for user and group.

09 Oct
8 months ago

hollyit left a reply on Storage/app Not Readable CentOS

Make sure that path is accessible by PHP (whatever user PHP is running as if using FPM, or the webserver is running as). On CentOS with SELinux, permissions are more sensitive (for good reasons).

hollyit left a reply on Uncaught ReferenceError: $ Is Not Defined At 10:503

It's not working because your inline script doesn't know what $ is yet. That's because you are deferring the load of it (the defer in the script tag). Browsers won't load/execute deferred scripts until after the page is loaded. Your inline script is going to execute before that. Even with $(document).ready, $ is still going to be undefined because jquery hasn't loaded yet.

Typically what I do is put all the scripts in the footer. If I need to call something from a partial, like your layout, then I put any javascript I write in my blade file into a stack, that gets rendered in the footer after all the other scripts.

08 Oct
8 months ago

hollyit left a reply on Hiding Vue Component From All Users Besides Owner

To do it 100% in Vue you will need to pass data in from Laravel to Vue. The easiest way is to set a global variable on your page and send some json encoded data.

    var initialData = {!! json_encode($myData) !!}

Of course always make sure you've got authorization checks on your upload routes that aren't reliant upon Javascript.

01 Oct
8 months ago

hollyit left a reply on Share Classes Between Projects With Composer Does Not Work.

@ImArtur - Symlinks is another way to go. I never had problems doing them on my Macbook, but when home and on my Windows machine, they always had a bunch of problems. I haven't tried since the Fall Creators update came out last year, which was supposed to fix those problems. Might have to give it a try again.

30 Sep
8 months ago

hollyit left a reply on Share Classes Between Projects With Composer Does Not Work.

Your main Laravel project isn't going to know about your packages/composer.json file. By default Composer only recognizes files in the /vendor directory.

There are a couple of plugins for Composer out there that let you specify extra directories that will have the composer.json merged into your main one. Merge plugin is by far the most popular:


Of course if you are only using this for a couple of projects and not planning on open sourcing it, composer might be overkill. Instead I would use git submodules and do everything within in the main projects composer.json file.

29 Sep
8 months ago

hollyit left a reply on Is URL Facade Still Valid In Laravel 5.7?

It's still in there. Sometimes you can find changes in changelog.md inside your Laravel root directory. Other times it's just searching.

If you're using a decent IDE like PHPStorm, then you get autocomplete for things like Facades, which makes life so much easier.

hollyit left a reply on Problem At Display:block;

I noticed you got data-target on your anchor (bars). Are you using Bootstrap and Bootstrap's javascript stuff? If so then you are going to be fighting with the collapse features of Bootstrap.

26 Sep
8 months ago

hollyit left a reply on Laravel API Endpoint Pattern

Personally I would just keep it all as /jobs/{jobid} and perform access checks in a policy (admin can update any, user only where job->user_id === Auth::user()->id)

24 Sep
9 months ago

hollyit left a reply on Vue.js DatePicker With Time

Element has a nice one that doesn't rely on jQuery, moment or I believe any outside libraries:


You don't have to load the entire library. You can just select which components you want.

hollyit left a reply on Unable To Find Socket Transport Starttls

Element has a nice one that doesn't rely on jQuery, moment or I believe any outside libraries:


You don't have to load the entire library. You can just select which components you want.

22 Sep
9 months ago

hollyit left a reply on $ Is Not Defined - Jquery Not Found

@tha07 - What @Cronix suggests is how to get jQuery available in the global scope (ie: attached to the global window object). When Webpack compiles, everything is within a closure as to not pollute the global namespace.

All the ProvidePlugin does is stop you from having to do an import for that module every time you want to use it. It doesn't attach the module to the global window object.

Another thing to watch out for is that if you are using several different mix.js outputs, then each one of those will have the jQuery code loaded into it. Every time you do a mix.js(...,...) you are creating a new "chunk". That chunk is going to live within its own closure. This is how Webpack prevents different Javascript files from interfering with others, such as loading one thing that requires jQuery 1.9 and something else that requires jQuery 3+. Both can be loaded, because both are within their own enclosure within the chunks.

Having said that, the way Laravel Mix counters that problem is to use Vendor extraction. That splits the vendor files out into their own file/chunk that can be accessed from any other chunks you compile. This is basically doing the Common Chunks in Webpack.

You can see this in action yourself doing a simple mix config:

    proxy: 'cl1.devel',
    open: false

    plugins: [new webpack.ProvidePlugin({
        $: "jquery",

    .js('resources/js/mix1.js', 'public/js')
    .js('resources/js/mix2.js', 'public/js')

Then make mix1.js and mix2.js just something as simple as:


When you build them, both files will have the jQuery code inside, as the two chunks are separate from each other and don't know what is inside the other. Basically it's like 2 different webpack builds.

Now add .extract(['jquery']) to the end of your mix and build it again. Suddenly those mix1.js and mix2.js files get very small and you have a vendor.js file with jQuery in it. Webpack makes mix1 and mix2 aware of the modules available inside vendor.js.

It does take sometime to get your head around it all, but once you do you can realize how it makes sense.

hollyit left a reply on $ Is Not Defined - Jquery Not Found

DefinePlugin just puts it in as an automatic module, exposed to other WebPack modules. Checkout the bootstrap.js file in your /resources/js and you'll see how they assign it to the window object in Laravel. You need to do that (or something similar) to make it available to non-Webpack code. The other option is using the expose-loader in Webpack.

17 Sep
9 months ago

hollyit left a reply on VUE JS Set Data From Database

When doing remote calls, the :md-options must return a promise. So in your autoComplete try somehing like this:

    return new Promise(resolve => {
             axios.get('api/search',{params: {id: this.query}}).then(response => {
15 Sep
9 months ago

hollyit left a reply on Help With Git

One of two methods. The best and least headache (once setup) is using some sort of CI/CD system. Personally I use Gitlab for everything (self hosted).

The other option is to create a bash script on the production server that does all the magic for you (git pull, npm run production, copy environment files, do route caching and whatever else you need).

Which choice I go with depends upon client/project needs. Something that won't be updated all that often, I just do the simple bash script. For more complex projects with frequent updates then CI/CD is the way to go and saves tons of headaches in the long run.

22 Aug
10 months ago

hollyit left a reply on How To Make An Html Tag Visible When Typing


<span v-if="gross_income" v-text="'=' + gross_income"></span>

Basically the v-if will hide the span until something is in it. The v-text is a Vue directive that binds the elements textContent to whatever is in there. Since it's a directive, the value of v-text is treated as a regular expression.

14 Aug
10 months ago

hollyit left a reply on Renewing LetsEncrypt Without Forge

If the original certbot configuration files are on the server, then you shouldn't have to worry about the actual CLI used to generate it. You could always try running certbot renew --dry-run and see what it's outputting. Certbot can be a pain to troubleshoot at times.

hollyit left a reply on Search Engine

There's a MySQL driver for scout, which uses MySQL's full text indexing:


One warning on shared hosting. Doing searches on a database can quickly become resource intensive. If it does that too much, then don't be surprised when you get a notice from your hosting provider about having to upgrade or find a new provider. Best thing to do is put some kind of protection on any public facing search so that people can't abuse it. Something like Captcha or throttling.

10 Aug
10 months ago

hollyit left a reply on New Session Per Subdomain!

Set domain to null. If no domain is sent in the set-cookie header, then the browser will only save it for the exact domain of the document location, and exclude any subdomains. You can read about the domain portion [here]{https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Set-Cookie}

hollyit left a reply on QR Scanner

There's Instascan, which works using WebRTC:


Just not that it won't work on iOS devices, since they don't support WebRTC. For those devices you'll have to get into app development, which can be pretty easily done with projects like Ionic or Cordova.

09 Aug
10 months ago

hollyit left a reply on How Do I Make The Browser Ask What A User Wants To Name A Downloaded File - With A Suggestion

Newer browsers you can specify a filename in an a link .

You can view more here

Most newer browsers support it. If you need something for older browsers, then you would have to pipe the file through a download script and set a header with Content-Disposition: attachment; filename="{your file name here}"

02 Aug
10 months ago

hollyit left a reply on Phpstorm Theme In Laracasts Series Let's Build A Forum With Laravel And TDD

Almost looks like it could be the material lighter theme (part of the material theme set). I use material oceanic and switched over to the lighter one, but I've got a bunch of my own tweaks in there, but the colors appear to be the same.

29 Jul
10 months ago

hollyit left a reply on Trying To Build Rest Api Using Postman

When you post a form, the HTML code that generates that form doesn't get sent to the server. It gets encoded into a query string, so your hidden example would be testing=v1.

In postman, you can do that in the raw field (field1=somedata&field2=somedata). It's the same as a URL query string, but you must make sure you URL encode everything. The easier solution is to select form-data in Postman and just fill in the field names and values. Then it takes care of that part for you.

25 Jul
11 months ago

hollyit left a reply on Do Models Have Defualt Hidden Contstructers?

Eloquent models, which my guess is your User extends, do have a __constructor, which takes an array of attributes. But I'm wondering why go that route, when models already have a static create($attributes) method, which does everything you're doing there.

(HINT: builder stuff like create() is actually inside of Illuminate\Database\Eloquent\Builder and Model just passes the methods onto the builder via magic methods)

hollyit left a reply on Any “famous” Sites Built With Laravel?

@Vanish not sure about now, but FedEx used to use Drupal for their newsroom.


22 Jul
11 months ago

hollyit left a reply on Any “famous” Sites Built With Laravel?

Not sure on Laravel, but PHP runs numerous large scale sites. Just look at Wikipedia and Wordpress.com. Large parts of Facebook still run on PHP as well.

whitehouse.gov is now on Wordpress. During Obama's years it was on Drupal. Numerous US government sites still use Drupal.

When you look at Enterprise, it's more common than not to see numerous different languages and frameworks powering the various services that make up their entire online presence.