wells

wells

Member Since 4 Years Ago

Tennessee, USA

Senior Services Software Engineer at Riverbed Technology

Experience Points 85,645
Experience Level 18

4,355 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 1018
Lessons
Completed
Best Reply Awards 16
Best Reply
Awards
  • start-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-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-token Created with Sketch.

    Subscriber

    Earned if you are a paying Laracasts subscriber.

  • lifer-token Created with Sketch.

    Lifer

    Earned if you have a lifetime subscription to Laracasts.

  • lara-evanghelist 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.

03 Feb
2 years ago

wells left a reply on Will BrowserKit Testing Be Supported In Laravel 5.5?

You can also create macros for all of the missing methods, or just add the missing assertJsonContains method as a macro too.

https://blog.untoldvoyage.com/2017/02/03/laravel-5-4-json-contains-macro/

29 Jan
2 years ago

wells left a reply on 'php Artisan Migrate' Error:Class 'App\Providers\Schema' Not Found

Absolutely. It'll become second nature as you get more familiar with namespaces, use statements, and such. All the best.

wells left a reply on 'php Artisan Migrate' Error:Class 'App\Providers\Schema' Not Found

In the AppServiceProvider.php, you did not include the necessary use statement at the top of the file.

use Illuminate\Support\Facades\Schema;

That defines the namespace path to the Schema class so you can simply call Schema::defaultStringLength(191); in the boot method.

26 Jan
2 years ago

wells left a reply on Only Displaying The Body Text

You need to rename the form controls in your view.

<input type="text" name="name">
<textarea name="body">

Also, your validation rules should change.

$this->validate($request, [
    'name' => 'required',
    'body' => 'required',
]);

This is as far as I'll take you.

wells left a reply on How To Send Value Of A Button Through Request With Just A Button.

In the case of a link without any kind of <form> or javascript involved, you'll want to embed the value in the URL...

  • /subscription/upgrade/test or
  • /subscription/upgrade/?value=test

There are plenty of other options, but I figure you just want a solution for what you are trying to do.

wells left a reply on Only Displaying The Body Text

The quick answer...

Both your textarea and your input field have the same name (i.e. document). You'll want to name the input field name and the textarea body so you can do...

$documents->name = $request->name;
$documents->body = $request->body;
16 Jan
2 years ago

wells left a reply on Laravel, Axios And Vuejs

@artano I would recommend you work towards using Laravel Passport for your API route authentication.

https://github.com/laravel/passport

14 Jan
2 years ago

wells left a reply on Vue 2.0 Ordering Data Displayed By A V-for

You can use a combination of a computed property with either native Array methods (i.e. filter, map, etc) or a package like lodash to help filter/order your data.

https://lodash.com/

Vue.JS documentation mentions the use of a computed property

https://vuejs.org/v2/guide/list.html#Displaying-Filtered-Sorted-Results

Here is an example of lodash in use on a computed property

https://github.com/wells/airflix/blob/master/resources/assets/js/components/Movies.vue#L185-L207

wells left a reply on Trying To Redirect After Checking Role Using Sentinel Package For Auth. Not Working

redirect()->route() is for named routes.

You'll want to review the documentation on name routes at the link below.

https://laravel.com/docs/5.3/routing#named-routes

wells left a reply on Laravel 5.3 Search Function In API

Returning a model instead of a view from a Controller automatically returns JSON. That is the quick approach.

You can also look into packages like Fractal to transform/serialize your Eloquent models into JSON specifications (i.e. JSON-API 1.0, etc).

Here is a lesson on dedicated query string filtering that should help you get started with easily filtering results.

https://laracasts.com/series/eloquent-techniques/episodes/4

You don't need a separate route for searches. You can instead use your index method for a resource to return result sets that are both paginated and filtered by the query string (i.e. something like /drivers?keywords=John&joined=2016).

13 Jan
2 years ago

wells started a new conversation Video Player Suggestions

Hey @JeffreyWay

Here are a couple video player fixes that I found from examining your minified JS source for the video player. Yeah, I went spelunking.

Basically, I found you could start tracking the quality/resolution/src changes (SD/HD) and the muting of the interface.

In addition, I found a workaround to some issues that occur whenever the src changes. This is not because of the videojs-resolution-switcher plugin, but is instead due to the native player in the browser, which resets things like playback speed whenever the selected src changes.

Here's some code:

addEventListeners() {
  // ...
  this.player.on('ratechange', this.onPlaybackSpeedChange.bind(this))
  this.player.on('resolutionchange', this.onResolutionChange.bind(this))
}

onLoad() {
  // Setting a resolution changes src and causes the natives to cry havoc
  this.setStartPoint()
    .setDefaultResolution()
    .setDefaultVolume()
    .setDefaultPlaybackSpeed()
}

onVolumeChange() {
  localStore.set("laracasts_volume", this.player.volume())
  localStore.set("laracasts_muted", this.player.muted())
},

setDefaultVolume() {
  let defaultVolume = localStore.get("laracasts_volume")
  if (defaultVolume && this.player.volume() != defaultVolume) {
    this.player.volume(defaultVolume)
  }

  let defaultMuted = localStore.get("laracasts_muted")
  if (defaultMuted && this.player.muted() != defaultMuted) {
    this.player.muted(defaultMuted)
  }

  return this
}

onPlaybackSpeedChange() {
  localStore.set("laracasts_playback_speed", this.player.playbackRate())
},

setDefaultPlaybackSpeed() {
  let defaultSpeed = localStore.get("laracasts_playback_speed")
  if(defaultSpeed && this.player.playbackRate() != defaultSpeed) {
    this.player.playbackRate(defaultSpeed)
  }

  return this
}

onResolutionChange() {
  let currentResolution = this.player.currentResolution().label
  localStore.set("laracasts_resolution", currentResolution)

  // This method can reset these defaults whenever the src changes
  this.setDefaultVolume()
    .setDefaultPlaybackSpeed()
},

setDefaultResolution() {
  let defaultResolution = localStore.get("laracasts_resolution")
  if(defaultResolution) {
    this.player.currentResolution(defaultResolution)
  }

  return this
}
19 Sep
2 years ago

wells left a reply on How To Send A Variable AND Click-event Through @dblclick="click(e, Var)"

Yeah, @jekinney is correct. Pass the event to your methods with $. See the revision of my previous post.

18 Sep
2 years ago

wells left a reply on Vue.js And Bootstrap = Display Row For Each 3 Results

Chunk really is a clean way to do it with bootstrap.

However, you could give flexbox a try for your grid needs. Maybe test drive the Bulma framework or the Lost grid + media queries.

wells left a reply on Token + Domain Authentication?

OAuth2 is worth using over rolling your own standard. Nevertheless…

Custom Authentication driver info is documented starting at:

https://laravel.com/docs/5.3/authentication#adding-custom-guards

You'll have to extend the API Token guard and likely also the user provider. Good luck.

wells left a reply on How To Send A Variable AND Click-event Through @dblclick="click(e, Var)"

<button @dblclick="click(item)">
    NASA Double Clickers Unite!
</button>

And...

click: function(item, event) { 
   console.log(item, event);
}

An example of the event being listed last is given in that documentation link, just before the "Event Modifiers" section.

Also, events are automatically wired up. You cannot pass an undefined e into your function from your button in the template.

wells left a reply on Live Server Error : InvalidArgumentException In FileViewFinder.php Line 137: View [welcome] Not Found

Did you upload your vendor folder to the server? First try composer dump-autoload command in the server. If still stuck, you should remove the vendor folder with rm -rf vendor and re-install your composer dependencies on the server with composer install.

17 Sep
2 years ago

wells left a reply on Laravel 5.3 Instal Problem - Ramsey/uuid Permission Denied

Apologies for the typo earlier, sudo rm -rf ~/.composer/cache/.

  • sudo is to run the command as root user.
  • rm is the delete command
  • -rf is recursive force options to delete the folder
  • ~ is shorthand for the current user home directory (aka /Users/Freel)

I hope that explains it better for you. Cheers. Glad it is working for you now.

wells left a reply on Laravel 5.3 Instal Problem - Ramsey/uuid Permission Denied

Try sudo -rm ~/.composer/cache/ before that step. Looks like another permissions issue in your ~/.composer folder. You could also perform a chown -R freel:freel ~/.composer to take over permissions, if freel is your username.

wells left a reply on Laravel 5.3 Instal Problem - Ramsey/uuid Permission Denied

@freel it looks like the first problem you ran into is a file permissions issue with a globally installed copy of the ramsey/uuid package.

  1. cd /Users/Freel/.composer
  2. sudo rm -rf vendor
  3. composer global remove ramsey/uuid
  4. composer global install

I would recommend you remove ramsey/uuid from being globally installed, as you should specify what each php application requires in their own composer.json / composer.lock files. It is better to install it on the project you are working on, such as...

  1. cd /Users/Freel/Desktop/Web/project31.dev/
  2. sudo rm -rf vendor
  3. composer install
  4. composer require ramsey/uuid

wells left a reply on Which OS For Production

That choice is really up to you because learning the idiosyncrasies of each distro takes time. The community tends towards familiarity with Ubuntu (latest version) for web servers. This is due to the historical usage of Ubuntu as the VM host with Laravel Homestead.

wells left a reply on Create Event At A Certain Time Every Day

See Task Scheduling: https://laravel.com/docs/5.2/scheduling

Also see, Artisan Console Commands: https://laravel.com/docs/5.2/artisan

Good luck.

wells left a reply on VIrtual Host

If you have Apache installed, it is likely fighting with nginx over who can use port 80. You'll need to disable the Apache service. Then, restart the nginx service so it can take over port 80.

For an nginx server configuration file (aka what Apache calls vhost), you'll need to create one from scratch. Something like...

https://gist.github.com/wells/f3814c13d7cfdb23b490aa9d413465a3

You'll then need to create a symlink to the config file ln -nfs /etc/nginx/sites-available/mydomain.com /etc/nginx/sites-enabled/mydomain.com.

Finally restart the php-fpm service with service php7.0-fpm restart (assuming php7 is installed) and also restart the nginx service with service nginx restart.

Another thing to learn down the line if you are developing locally on a linux machine will be editing your /etc/hosts file to create .local or .dev domains for 127.0.0.1

For further troubleshooting (i.e. 502 bad gateway) this older thread can help you.

https://laracasts.com/discuss/channels/laravel/installing-laravel-5-on-nginxubuntu

Good luck.

wells left a reply on Laravel 5.3, How Can I Send And Email Notification To Reset User Password?

@KikeMendez your User model should not have any database columns defined as object properties. Don't write private $email_address = ''; in the User model. Doing so will cause all user models to return an empty email_address.

Instead, define an email_address column on the database table named users. This is an out of the box feature of the Laravel framework. The User model will then store and load the columns from the database table onto your model object for you.

If you have a table created, a $user = User::find(1); would return a User model with the id of 1 (if any exists). You could then call something like $user->email_address to get the value of the email_address column that was loaded from the database.

It is in your best interest to subscribe to Laracasts and watch the Laravel 5 from scratch series: https://laracasts.com/series/laravel-5-from-scratch

This is as far as I'll take you.

wells left a reply on VIrtual Host

@amitshrestha221 you typically create a config file for your site in a sites-available folder. It entirely depends on how you installed nginx on your development machine. For example, on a linux server it would be located at /etc/nginx/sites-available. Then you create a symlink to your configuration file in a sites-enabled folder and restart the nginx service.

Digital Ocean has a treasure trove of community tutorials on nginx: https://www.digitalocean.com/community/tags/nginx?type=tutorials

Specifically, here is a guide to setup a LEMP stack: https://www.digitalocean.com/community/tutorials/how-to-install-linux-nginx-mysql-php-lemp-stack-in-ubuntu-16-04

If you have a Mac and just want to get up and running, I recommend you install:

  1. homebrew (http://brew.sh/)
  2. Laravel Valet (https://laravel.com/docs/5.3/valet).

I'll leave you here for now. All the best.

wells left a reply on Nginx

Short answer. Nginx can handle thousands more connections with significantly less memory overhead. The reason it can do this is because it uses an event loop to process HTTP requests. Apache does not.

I would recommend you read the Scaling PHP book to find out more about the benefits of nginx... and so much more: https://leanpub.com/scalingphp

Cheers.

wells left a reply on How Can You Set Boosts And Filters With Laravel Scout And ElasticSearch?

Hey @chrislentz, straight from Taylor on a pull request:

"Scout is definitely supposed to be a basic search package. I have no intention of supporting every feature supported by Elastic since its a pretty vast product."

https://github.com/laravel/scout/pull/70

If you can't find the ElasticSearch feature you need, it is likely to not be built into Scout. The goal of something like Scout is to create a solution with support for multiple drivers/providers. This driver based approach allows for easily hot swapping the provider being used. Anything specific to a platform will likely need to be implemented directly from the ElasticSearch library. This doesn't necessarily mean you need to give up on Scout altogether. There would be a way to add the functionality you need while still using of Scout.

wells left a reply on Integrity Constraint Violation In A Pivot Table

The profile_id on profile_role is being set to 0 in your error message.

Also, you set your primary key in your Profile model to be user_id. Laravel uses the $primaryKey as an auto incrementing field unless you public $incrementing = false; on the Profile model. However, you might want to add a $table->increments('id') column into your profiles table.

Cheers.

wells left a reply on Require('js_script') VS Gulpfile-elixir

  1. The phrase import Vue is essentially you naming the module that you are importing (i.e. var Vue =). You could import Cats from 'vue', but then you have to reference Vue.js as Cats in all of your code (i.e. Cats.use(VueResource)). The reason this works is that you are importing what is essentially the default module being exported for the Vue.js npm package and giving it a name. Nevertheless, of course you should call it Vue for rational purposes.
  2. As an example, you could do something like import d3 from 'd3/d3.min' to load the minified version of the d3.js npm package. The from 'vue' part of the import statement essentially finds the folder in node_modules that is named vue and automatically determines what to load from that npm package. However, in most cases there is no need to use the minified version of an npm package. Elixir/Gulp is setup to minify your code once you run gulp --production, including the npm packages that you import.
  3. Since you're first starting out, I recommend you stick with the ES2015 import syntax. You can actually write both interchangeably in the same code (build tools translate both of these for you), but it is better for your sanity and your future work with other developers to write with the new style over the old. However, knowing the "older" syntax is important if you start working with products that have been "around the block" a few times.

I think this is as far as I can take you. At this point, I recommend a free book series so you can dig in further. It is a series of six small books that cover a number of foundational concepts in the JavaScript language.

You Don't Know JS Book Series: https://github.com/getify/You-Dont-Know-JS

All the best. Cheers.

wells left a reply on Require('js_script') VS Gulpfile-elixir

  1. import Vue from 'vue' is the ES2015 syntax and var Vue = require('vue') is the ES5 syntax. Both are used to import a module or subset of features from a module into your JavaScript code.
  2. Browserify and webpack are tools for smartly combining your set of javascript files and the npm dependencies into a single file. Tools like Babel or Buble are use to transpile (interpret) ES5 or ES2015 syntax into JavaScript that can run on the web browser.
  3. Your Elixir gulpfile.js does not need to have any npm package files referenced. The whole point of import or require is to bring these dependencies into your JavaScript code so you can quickly reference them as you write.

I would recommend you work through the ES 2015 Crash Course:

https://laracasts.com/series/es6-cliffsnotes

wells left a reply on Token + Domain Authentication?

@xdega: I think Laravel Passport, an OAuth2 server, will better serve the purpose of what you are trying to achieve. Instead of domains, you can think in terms of clients (aka other servers, etc) gaining access to your API with a client id and a client secret.

It is often best to avoid inventing an authentication standard for an API. I recommend using OAuth2 because it is pretty much the defacto standard across the web (aka github, twitter, facebook, etc).

I'll let Taylor explain all the possibilities to you.

Intro video on Passport: https://laracasts.com/series/whats-new-in-laravel-5-3/episodes/13

Documentation on Passport: https://laravel.com/docs/5.3/passport

wells left a reply on HasOne Issue, Property Of Non-object On Relationship

Another tool worth adding to your belt when dealing/modifying these collections returned from the database comes from Spatie.

Here's an article detailing how it works: https://murze.be/2016/08/debugging-collection-chains/

Here's the github repo: https://github.com/spatie/laravel-collection-macros

wells left a reply on [Elixir] Version() Not Working On Multiple Combined Script

@nmfzone You should first try to delete your node_modules folder and run npm install again. If gulp fails at this point, it may be that you need a newer version of node/npm installed.

The combination of awkward npm dependency updates and rapid versioning of node forces us all to stay up to date. Good luck.

wells left a reply on Url Append Something If It Not Exists

@WienerSchnitzel In case you haven't seen it yet, @JeffreyWay posted a lesson on dedicated query string filtering that may help you better organize how your models are filtered down. This technique is absolute gold.

https://laracasts.com/series/eloquent-techniques/episodes/4

wells left a reply on Bots Causing RouteCollection Errors

Put something like this at the very bottom of your routes file. It will act as a catch all for any undefined routes.

Route::get('{path?}', function($any) {
    return response()->json(['success' => false, 'message' => '403 - Forbidden'])->setStatusCode(403);
})->where('path', '.+');

Also, for a little perfomance boost you could move the closure into a Controller so you can cache your routes.

Another option would be to add the exception class names you don't want to log into the $dontReport array property of your app/Exceptions/Handler. Good luck.

15 Sep
2 years ago

wells left a reply on Authentication User Provider [] Is Not Defined.

It's best to start at the documentation for writing a custom authentication guard / user provider for laravel version 5.3.

https://laravel.com/docs/5.3/authentication#adding-custom-guards

https://laravel.com/docs/5.3/authentication#adding-custom-user-providers

14 Sep
2 years ago

wells started a new conversation Bold Series Link Partial On Favorites And Watch Later Lists

I like how individual videos from a series list the series name in bold on the favorites and watch later lists.

@jeffreyway could you update the favorited and watch later series link view partials to be bold? This will differentiate a series visually from those individual lessons that are not in a series. It also gives the nod to the single lessons from a series. And, it helps us easily see which favorites are grouped versus single videos.

You're probably off repainting the castle again (aka new design), and this is only a "nice to have" request anyway. Your teaching ability is incredible, and kudos for all you're doing for the community.

29 Aug
2 years ago
23 Jul
2 years ago

wells left a reply on Vue-spinner, Failing In Browserify

@cboxdk It looks you are trying to import the component twice. You really only need the import { PulseLoader ... } statement.

Here's an alternative too:

http://gritcode.github.io/gritcode-components/#/spinner

26 Jun
3 years ago

wells left a reply on Laravel 5.3 Wish List

OAuth 2 integration for API development.

15 Feb
3 years ago

wells left a reply on How To Create A Custom Email Address ?

@xenxa and @ayekoto You can also go as far as setting up something like Roundcube Webmail on your server.

Depending on what you are trying to do, another few solutions are to setup Google Apps for Business or Office 365 for your domain name to host your email.

wells left a reply on A Basic Ordering System In Vue

@PratyushPundir nice job. The only thing I would change is the @blur to something like @change.

Yeah, I merely simplified the problem with my solution so you could see how two-way data binding could help you.

06 Feb
3 years ago

wells started a new conversation Zero Replies Filter

It would be great to have a filter on the forum that allows us to see conversations that have 0 replies at the top ordered by most recent. That would help focus on the posts that fell through the cracks.

wells left a reply on BadMethodCallException With Message Call To Undefined Method Illuminate\Database

When in doubt, it's always good to do something like...

Auth::User()->giveaways()->isActive()->toSql();

To see what kind of sql statement is generated by the builder. That would show if your scope function is or is not being applied.

wells left a reply on BadMethodCallException With Message Call To Undefined Method Illuminate\Database

@DrWhat that's interesting. As for why active() worked, not sure. Your scope functions should still have a return though in order for method chaining to work correctly. See the docs below with code examples of scope functions. The return may even fix your naming problem.

https://laravel.com/docs/5.2/eloquent#local-scopes

wells left a reply on BadMethodCallException With Message Call To Undefined Method Illuminate\Database

@ohffs is correct on returning the $query from your scope methods.

wells left a reply on BadMethodCallException With Message Call To Undefined Method Illuminate\Database

For kicks try renaming your scopes to scopeIsActive and scopeIsFinished

wells left a reply on A Basic Ordering System In Vue

@PratyushPundir Here's a somewhat simplified version of your fiddle that does work correctly. I didn't stick with a computed property / component for the product "lines," mainly because this was a quick refactor late at night. In any case, I hope this helps.

https://jsfiddle.net/qrz48tdx/2/