Good day guys!
Just want to ask the difference of use outise the class
and use inside the class
? I have also googled it, but my question doesnt match an answer.
Example:
namespace App\Http\Controllers\Auth;
use Validator;
use App\Http\Controllers\Controller;
use Illuminate\Foundation\Auth\ThrottlesLogins;
use Illuminate\Foundation\Auth\AuthenticatesAndRegistersUsers;
use Auth;
use Illuminate\Http\Request;
class AuthController extends Controller
{
use AuthenticatesAndRegistersUsers, ThrottlesLogins;
protected $redirectTo = '/';
/**
* Create a new authentication controller instance.
*
* @return void
*/
public function __construct()
{
// Some Code
}
The use keyword has two purposes: it tells a class to inherit a trait and it gives an alias to a namespace.
The use keyword allows the developers to shorten the namespace. The namespace once created can include various functionalities which can be used in controllers and various classes.
Namespaces in Laravel are defined as a class of elements in which each element has a different name to that associated class. The use keyword allows us to shorten the namespace.
When you define a class, it can only have access to other classes within its namespaces. Your controller for instance is defined within the following namespace.
namespace App\Http\Controllers\Auth;
So to use other classes, you need to import them from their own namespaces so you can access them. e.g.:
use Illuminate\Foundation\Auth\ThrottlesLogins;
If you have javascript ES6 experience, it's a little bit similar to import
. When you import a package, the default namespace is /node_modules
. To import your own files, you need to sort of namespace them by giving the file location like
import '../containers/index.js'
Back to Laravel. Now that you have imported the ThrottlesLogins
, which is actually a trait, now inside the class you use
it to expose all of the methods inside.
use Illuminate\Foundation\Auth\ThrottlesLogins; //import
public class AuthController
{
use ThrottlesLogins; //exposes all the methods inside
...
public function login()
{
...
//login failed
$this->incrementLoginAttempts(); //defined in ThrottlesLogins Trait
}
}
From the example above, you have direct access to incrementLoginAttempts()
, which is defined the ThrottlesLogins
.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With