How to override vendor class file?

做~自己de王妃 提交于 2019-12-11 04:32:39

问题


My laravel version : 5.2

I want to override tymondesigns/jwt-auth GetUserFromToken.php

\vendor\tymon\jwt-auth\src\Middleware\GetUserFromToken.php

    class GetUserFromToken extends BaseMiddleware
    {
        /**
         * Handle an incoming request.
         *
         * @param  \Illuminate\Http\Request  $request
         * @param  \Closure  $next
         * @return mixed
         */
        public function handle($request, \Closure $next)
        {
            if (! $token = $this->auth->setRequest($request)->getToken()) {

                return $this->respond('tymon.jwt.absent', 'token_not_provided', 400);
            }

For example, I want to return a custom message when token is not provided.

if (! $token = $this->auth->setRequest($request)->getToken()) {

            return my_custom_message;
        }

since I cannot make changes directly on this file, how should I create a custom class to override vendor's GetUserFromToken.php ?

Please describe required steps in detail if possible. Thanks.

update#2

Kernel.php

protected $routeMiddleware = [

    'jwt.auth' => \App\Http\override\MyGetUserFromToken::class,

I created GetUserFromToken.php in below directory. myProject\app\Http\override\MyGetUserFromToken.php

<?php

namespace App\Services\Middleware;
use Tymon\JWTAuth\Middleware\GetUserFromToken;

class MyGetUserFromToken extends GetUserFromToken
{
    public function handle($request, \Closure $next)
    {
        if (! $token = $this->auth->setRequest($request)->getToken()) {
            return my_custom_message;
        }

回答1:


Since it is simply a middleware, you should just be able to extend this class:

class MyGetUserFromToken extends GetUserFromToken 

and list this class in Kernel.php as middleware. Like this:

'jwt.auth' => App\MyGetUserFromToken::class


来源:https://stackoverflow.com/questions/43328442/how-to-override-vendor-class-file

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!