मैं लारवेल 5.4.36 का उपयोग करता हूं। जब मैं कंस्ट्रक्टर विधि पर Auth::user()->id का उपयोग करता हूं तो मुझे यह त्रुटि दिखाएं

(1/1) त्रुटि अपवाद
गैर-वस्तु की संपत्ति प्राप्त करने की कोशिश कर रहा है
UserController.php में (पंक्ति 25)

मेरा नियंत्रक:

public function __construct()
{
    echo Auth::user()->id;
}  

लेकिन जब मैं इंडेक्स विधि पर Auth::user()->id का उपयोग करता हूं तो मुझे दिखाएं 2

public function index()
{
    echo Auth::user()->id;
} 

परिणाम है : 2
और जब मैं इसे AppServiceProvider.php बूट विधि पर परीक्षण करता हूं तो मुझे यह त्रुटि फिर से दिखाएं

1
paranoid 28 सितंबर 2017, 10:36
मैं इस पोस्ट को देखता हूं और जब मैं Auth::user()->id on AppServiceProvider बूट विधि का उपयोग करता हूं तो मुझे वह त्रुटि फिर से दिखाएं
 – 
paranoid
28 सितंबर 2017, 10:49

3 जवाब

समस्या यह है कि कंस्ट्रक्टर में सत्र अभी भी शुरू नहीं हुआ है। एक बार सभी मिडलवेयर आपके ऐप/एचटीपी/कर्नेल.php से पंजीकृत हो जाने के बाद इसे पंजीकृत किया जाएगा और आप जो लाने की कोशिश कर रहे हैं वह केवल तभी मूल्य देगा जब उपयोगकर्ता सत्र शुरू हो गया हो।

तो कंस्ट्रक्टर में आपको मिडलवेयर फंक्शन को ओवरराइड करना होगा। अपनी नियंत्रक फ़ाइल में, आप उपयोगकर्ता सत्र डेटा को इस तरह एक्सेस कर सकते हैं

private $userId;
$this->middleware(function ($request, $next) {

 // fetch your session here 

 $this->userId = Auth::user()->id;  
 return $next($request);

});

उस नियंत्रक की आपकी अनुक्रमणिका विधि में

public function index()
{
   echo $this->userId;
}

यह भी सुनिश्चित करें कि उपयोगकर्ता ने लॉग इन किया है, अन्यथा उपयोगकर्ता के लिए सत्र मौजूद नहीं होगा।

आशा है कि यह मदद करेगा :)

3
Vikash 28 सितंबर 2017, 10:53

Laravel 5.3 और बाद में, सत्र नियंत्रक कंस्ट्रक्टर में उपलब्ध नहीं है a> क्योंकि फ्रेमवर्क मिडलवेयर को चलाने से पहले इन्हें इनवाइट करता है, इसलिए ऑथेंटिकेशन सर्विसेज को इनिशियलाइज़ नहीं किया गया है।

जब हमें कंट्रोलर कंस्ट्रक्टर्स में सेशन या ऑथ का उपयोग करने की आवश्यकता होती है, तो प्रलेखन निम्नलिखित पैटर्न का सुझाव देता है:

class ProjectController extends Controller
{
    protected $currentUserId;

    public function __construct()
    {
        $this->middleware(function ($request, $next) {
            $this->currentUserId = Auth::user()->id;

            return $next($request);
        });
    }
}

यह मिडलवेयर श्रृंखला के अंत में एक मिडलवेयर कॉलबैक जोड़ता है जो सत्र मिडलवेयर के निष्पादन के बाद वर्तमान उपयोगकर्ता का मान सेट करता है। फिर हम अन्य नियंत्रक विधियों से $this->currentUserId का उपयोग कर सकते हैं।

1
Cy Rossignol 1 अक्टूबर 2017, 08:22

यह ऑब्जेक्ट कंस्ट्रक्टर में उपलब्ध नहीं है। आप मिडलवेयर का उपयोग कर सकते हैं या अन्य तरीकों से इसका उपयोग कर सकते हैं

0
user1493446 28 सितंबर 2017, 10:45