यह वह जगह है जहां लार्वा कंटेनर बचाव के लिए आता है। यदि आपको कोर घटक की कार्यक्षमता पसंद नहीं है तो आप आगे बढ़ सकते हैं और इसे काफी दर्द रहित तरीके से ओवरराइड कर सकते हैं।
सबसे पहली बात आप अपने खुद के PasswordBroker बनाने की आवश्यकता होगी:
namespace App\Auth\Passwords;
use Illuminate\Auth\Passwords\PasswordBroker as IlluminatePasswordBroker;
class PasswordBroker extends IlluminatePasswordBroker
{
public function emailResetLink()
{
$view = $this->emailView;
return $this->mailer->queue($view, compact('token', 'user'), function ($m) use ($user, $token, $callback) {
$m->to($user->getEmailForPasswordReset());
if (! is_null($callback)) {
call_user_func($callback, $m, $user, $token);
}
});
}
}
यदि आपको अपने ऐप में कहीं रखना चाहते जो कुछ भी आप चाहते हैं करने के लिए अपने नाम स्थान बदलें।
चूंकि सेवा प्रदाता सेवा सेवा प्रदाता deferred service provider है, तो इसे बदलने के लिए आपको अपना स्वयं का प्रदाता बनाना होगा। शायद यह करने के लिए सबसे आसान तरीका है निम्नलिखित की तरह कुछ के साथ Illuminate\Auth\Passwords\PasswordResetServiceProvider
का विस्तार है:
namespace App\Providers;
use App\Auth\Passwords\PasswordBroker;
class PasswordResetServiceProvider extends \Illuminate\Auth\Passwords\PasswordResetServiceProvider
{
protected function registerPasswordBroker()
{
$this->app->singleton('auth.password', function ($app) {
$tokens = $app['auth.password.tokens'];
$users = $app['auth']->driver()->getProvider();
$view = $app['config']['auth.password.email'];
return new PasswordBroker(
$tokens, $users, $app['mailer'], $view
);
});
}
}
अंत में अपने config/app.php
फ़ाइल में Illuminate\Auth\Passwords\PasswordResetServiceProvider::class
को हटा दें और अपने 'providers'
सरणी App\Providers\PasswordResetServiceProvider::class
जोड़ें।
लार्वेल अब स्टॉक फ्रेमवर्क के बजाए पासवर्डबॉकर के आपके कार्यान्वयन का उपयोग करेगा और आपको फ्रेमवर्क कोड को संशोधित करने की चिंता करने की आवश्यकता नहीं है।
स्रोत
2015-12-23 00:01:46
धन्यवाद आपके योगदान के लिए @ marcus.ramsden। मैंने आपके दृष्टिकोण का पालन किया है लेकिन मुझे लगता है कि यह क्यों काम नहीं कर रहा है। मुझे कोई त्रुटि नहीं है। ऐसा लगता है कि यह अभी भी अधिलेखित एक के बजाय मूल वर्ग के 'ईमेल रीसेट लिंक्स' को कॉल कर रहा है। –
उदाहरण के लिए मेरी गलती क्षमा करें, आपके सेवा प्रदाता के पंजीकरण भाग में जो '$ this-> ऐप-> सिंगलटन' '' this-> ऐप-> बाइंड' के बजाय होना चाहिए।साथ ही चीजों को पंजीकृत करने वाले कोर सेवा प्रदाता एक [स्थगित प्रदाता] (http://laravel.com/docs/master/providers#deferred-providers) है। मैं एक पल में चीजें अद्यतन कर दूंगा। –
आपके इनपुट के लिए फिर से धन्यवाद। '$ this-> ऐप-> सिंगलटन 'चाल भी नहीं कर रहा है। अभी भी मूल विधि को बुलाओ। –