jeudi 10 mai 2018

Override laravel package function

I have an mews captcha package and i need to override the function. This is the related package provider: https://github.com/mewebstudio/captcha

How can i now override this function to remove the session removed statement in check() without touching the package directly ? for example:

$this->session->remove('captcha');

to

// $this->session->remove('captcha');

To implement it, I put this code to the register() function in the file App/Providers/AppServiceProvider

$this->app->bind(
            'captcha',
            'App\Vendors\Mews\Captcha\Captcha'
        );

In App\Vendors\Mews\Captcha\Captcha i created the file Captcha.php with this code:

<?php
namespace App\Vendors\Mews\Captcha\Captcha;
use Mews\Captcha\Captcha as mews;
/* 
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
class Captcha extends mews{
    /**
     * Captcha check
     *
     * @param $value
     * @return bool
     */
    public function check($value)
    {
        if ( ! $this->session->has('captcha'))
        {
            return false;
        }

        $key = $this->session->get('captcha.key');
        $sensitive = $this->session->get('captcha.sensitive');

        if ( ! $sensitive)
        {
            $value = $this->str->lower($value);
        }

        //$this->session->remove('captcha');
                dump($this->hasher->check($value, $key));
        return $this->hasher->check($value, $key);
    }
}

But it was not working, so to test it I have renamed the package check() and run the code and get the following error

Call to undefined method Mews\Captcha\Captcha::check()

    in helpers.php line 45
    at captcha_check('zg3br') in CaptchaServiceProvider.php line 42
    at CaptchaServiceProvider->Mews\Captcha\{closure}('captcha', 'zg3br', array(), object(Validator))
    at call_user_func_array(object(Closure), array('captcha', 'zg3br', array(), object(Validator))) in Validator.php line 3226
    at Validator->callExtension('captcha', array('captcha', 'zg3br', array(), object(Validator))) in Validator.php line 3318
    at Validator->__call('validateCaptcha', array('captcha', 'zg3br', array(), object(Validator))) in Validator.php line 485
    at Validator->validate('captcha', 'Captcha') in Validator.php line 425
    at Validator->passes() in Validator.php line 3177
    at Validator->messages() in Validator.php line 3190
    at Validator->errors() in AuthController.php line 71
    at AuthController->getValidate(object(Request))
    at call_user_func_array(array(object(AuthController), 'getValidate'), array(object(Request))) in Controller.php line 80
    at Controller->callAction('getValidate', array(object(Request))) in ControllerDispatcher.php line 146
    at ControllerDispatcher->call(object(AuthController), object(Route), 'getValidate') in ControllerDispatcher.php line 94
    at ControllerDispatcher->Illuminate\Routing\{closure}(object(Request))
    at call_user_func(object(Closure), object(Request)) in Pipeline.php line 52
    at Pipeline->Illuminate\Routing\{closure}(object(Request)) in RedirectIfAuthenticated.php line 41
    at RedirectIfAuthenticated->handle(object(Request), object(Closure))
    at call_user_func_array(array(object(RedirectIfAuthenticated), 'handle'), array(object(Request), object(Closure))) in Pipeline.php line 136
    at Pipeline->Illuminate\Pipeline\{closure}(object(Request))
    at call_user_func(object(Closure), object(Request)) in Pipeline.php line 32
    at Pipeline->Illuminate\Routing\{closure}(object(Request))
    at call_user_func(object(Closure), object(Request)) in Pipeline.php line 102
    at Pipeline->then(object(Closure)) in ControllerDispatcher.php line 96
    at ControllerDispatcher->callWithinStack(object(AuthController), object(Route), object(Request), 'getValidate') in ControllerDispatcher.php line 54
    at ControllerDispatcher->dispatch(object(Route), object(Request), 'App\Http\Controllers\Auth\AuthController', 'getValidate') in Route.php line 174
    at Route->runController(object(Request)) in Route.php line 140
    at Route->run(object(Request)) in Router.php line 724
    at Router->Illuminate\Routing\{closure}(object(Request))
    at call_user_func(object(Closure), object(Request)) in Pipeline.php line 52
    at Pipeline->Illuminate\Routing\{closure}(object(Request))
    at call_user_func(object(Closure), object(Request)) in Pipeline.php line 102
    at Pipeline->then(object(Closure)) in Router.php line 726
    at Router->runRouteWithinStack(object(Route), object(Request)) in Router.php line 699
    at Router->dispatchToRoute(object(Request)) in Router.php line 675
    at Router->dispatch(object(Request)) in Kernel.php line 246
    at Kernel->Illuminate\Foundation\Http\{closure}(object(Request))
    at call_user_func(object(Closure), object(Request)) in Pipeline.php line 52
    at Pipeline->Illuminate\Routing\{closure}(object(Request)) in HttpsProtocol.php line 21
    at HttpsProtocol->handle(object(Request), object(Closure))
    at call_user_func_array(array(object(HttpsProtocol), 'handle'), array(object(Request), object(Closure))) in Pipeline.php line 136
    at Pipeline->Illuminate\Pipeline\{closure}(object(Request))
    at call_user_func(object(Closure), object(Request)) in Pipeline.php line 32
    at Pipeline->Illuminate\Routing\{closure}(object(Request)) in VerifyCsrfToken.php line 64
    at VerifyCsrfToken->handle(object(Request), object(Closure))
    at call_user_func_array(array(object(VerifyCsrfToken), 'handle'), array(object(Request), object(Closure))) in Pipeline.php line 136
    at Pipeline->Illuminate\Pipeline\{closure}(object(Request))
    at call_user_func(object(Closure), object(Request)) in Pipeline.php line 32
    at Pipeline->Illuminate\Routing\{closure}(object(Request)) in ShareErrorsFromSession.php line 49
    at ShareErrorsFromSession->handle(object(Request), object(Closure))
    at call_user_func_array(array(object(ShareErrorsFromSession), 'handle'), array(object(Request), object(Closure))) in Pipeline.php line 136
    at Pipeline->Illuminate\Pipeline\{closure}(object(Request))
    at call_user_func(object(Closure), object(Request)) in Pipeline.php line 32
    at Pipeline->Illuminate\Routing\{closure}(object(Request)) in StartSession.php line 64
    at StartSession->handle(object(Request), object(Closure))
    at call_user_func_array(array(object(StartSession), 'handle'), array(object(Request), object(Closure))) in Pipeline.php line 136
    at Pipeline->Illuminate\Pipeline\{closure}(object(Request))
    at call_user_func(object(Closure), object(Request)) in Pipeline.php line 32
    at Pipeline->Illuminate\Routing\{closure}(object(Request)) in AddQueuedCookiesToResponse.php line 37
    at AddQueuedCookiesToResponse->handle(object(Request), object(Closure))
    at call_user_func_array(array(object(AddQueuedCookiesToResponse), 'handle'), array(object(Request), object(Closure))) in Pipeline.php line 136
    at Pipeline->Illuminate\Pipeline\{closure}(object(Request))
    at call_user_func(object(Closure), object(Request)) in Pipeline.php line 32
    at Pipeline->Illuminate\Routing\{closure}(object(Request)) in EncryptCookies.php line 59
    at EncryptCookies->handle(object(Request), object(Closure))
    at call_user_func_array(array(object(EncryptCookies), 'handle'), array(object(Request), object(Closure))) in Pipeline.php line 136
    at Pipeline->Illuminate\Pipeline\{closure}(object(Request))
    at call_user_func(object(Closure), object(Request)) in Pipeline.php line 32
    at Pipeline->Illuminate\Routing\{closure}(object(Request)) in CheckForMaintenanceMode.php line 44
    at CheckForMaintenanceMode->handle(object(Request), object(Closure))
    at call_user_func_array(array(object(CheckForMaintenanceMode), 'handle'), array(object(Request), object(Closure))) in Pipeline.php line 136
    at Pipeline->Illuminate\Pipeline\{closure}(object(Request))
    at call_user_func(object(Closure), object(Request)) in Pipeline.php line 32
    at Pipeline->Illuminate\Routing\{closure}(object(Request))
    at call_user_func(object(Closure), object(Request)) in Pipeline.php line 102
    at Pipeline->then(object(Closure)) in Kernel.php line 132
    at Kernel->sendRequestThroughRouter(object(Request)) in Kernel.php line 99
    at Kernel->handle(object(Request)) in index.php line 53
    at require_once('/var/www/html/amzpro/public/index.php') in server.php line 21

To test the bind of AppserviceProvider, I have print the dd(\App::getBindings());

array:34 [▼
  "events" => array:2 [▶]
  "router" => array:2 [▶]
  "url" => array:2 [▶]
  "redirect" => array:2 [▶]
  "Psr\Http\Message\ServerRequestInterface" => array:2 [▶]
  "Psr\Http\Message\ResponseInterface" => array:2 [▶]
  "Illuminate\Contracts\Routing\ResponseFactory" => array:2 [▶]
  "Illuminate\Contracts\Http\Kernel" => array:2 [▶]
  "Illuminate\Contracts\Console\Kernel" => array:2 [▶]
  "Illuminate\Contracts\Debug\ExceptionHandler" => array:2 [▶]
  "env" => array:2 [▶]
  "auth" => array:2 [▶]
  "auth.driver" => array:2 [▶]
  "Illuminate\Contracts\Auth\Authenticatable" => array:2 [▶]
  "Illuminate\Contracts\Auth\Access\Gate" => array:2 [▶]
  "cookie" => array:2 [▶]
  "Faker\Generator" => array:2 [▶]
  "Illuminate\Database\Eloquent\Factory" => array:2 [▶]
  "Illuminate\Contracts\Queue\EntityResolver" => array:2 [▶]
  "db.factory" => array:2 [▶]
  "db" => array:2 [▶]
  "db.connection" => array:2 [▶]
  "encrypter" => array:2 [▶]
  "files" => array:2 [▶]
  "filesystem" => array:2 [▶]
  "filesystem.disk" => array:2 [▶]
  "filesystem.cloud" => array:2 [▶]
  "session" => array:2 [▶]
  "session.store" => array:2 [▶]
  "Illuminate\Session\Middleware\StartSession" => array:2 [▶]
  "view.engine.resolver" => array:2 [▶]
  "view.finder" => array:2 [▶]
  "view" => array:2 [▶]
  "captcha" => array:2 [▼
    "concrete" => Closure {#77 ▼
      class: "Illuminate\Container\Container"
      this: Application {#3 …}
      parameters: {▶}
      use: {▼
        $abstract: "captcha"
        $concrete: "App\Vendors\Mews\Captcha\Captcha"
      }
      file: "/var/www/html/amzpro/vendor/laravel/framework/src/Illuminate/Container/Container.php"
      line: "227 to 231"
    }
    "shared" => false
  ]
]

Please provide me the way to run custom check function for the captcha.



from Newest questions tagged laravel-5 - Stack Overflow https://ift.tt/2IqRKay
via IFTTT

Aucun commentaire:

Enregistrer un commentaire