मेरे पास एक लॉगआउट श्रोता है जहां मैं एक लॉगआउट पुष्टिकरण संदेश दिखाते हुए एक फ्लैश संदेश सेट करना चाहता हूं।सिम्फनी 2 - नियंत्रक के बाहर एक फ्लैश संदेश सेट करना
namespace Acme\MyBundle\Security\Listeners;
use Symfony\Component\Security\Http\Logout\LogoutSuccessHandlerInterface;
use Symfony\Component\Security\Core\SecurityContext;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\RedirectResponse;
class LogoutListener implements LogoutSuccessHandlerInterface
{
private $security;
public function __construct(SecurityContext $security)
{
$this->security = $security;
}
public function onLogoutSuccess(Request $request)
{
$request->get('session')->getFlashBag()->add('notice', 'You have been successfully been logged out.');
$response = new RedirectResponse('login');
return $response;
}
}
यहाँ मेरी services.yml है (जैसा कि इस से संबंधित है):
logout_listener:
class: ACME\MyBundle\Security\Listeners\LogoutListener
arguments: [@security.context]
यह एक त्रुटि पैदा कर रहा है:
Fatal error: Call to a member function getFlashBag() on a non-object
मैं इस में एक flashBag संदेश सेट करूँ संदर्भ?
इसके अलावा, राउटर तक पहुंच कैसे प्राप्त करें ताकि मैं हार्ड-कोडित यूआरएल में गुजरने के बजाय यूआरएल ($-- राउटर-> जेनरेट ('लॉगिन') के माध्यम से उत्पन्न कर सकूं?
संकल्प नोट
काम करने के लिए, आप बताना होगा अपने security.yml config लॉग आउट करने पर सत्र रद्द करना नहीं फ़्लैश प्राप्त करने के लिए; अन्यथा, सत्र नष्ट हो जाएगा और आपका फ्लैश कभी प्रकट नहीं होगा।
logout:
path: /logout
success_handler: logout_listener
invalidate_session: false
मैं अपने services.yml वर्धित सेवा कंटेनर वस्तु इंजेक्षन करने के लिए है। मैं सेवाओं को इंजेक्ट कैसे जोड़ूं? मुझे लगता है कि मुझे तर्कों का उपयोग करने की आवश्यकता है, लेकिन मुझे इंजेक्ट करने के लिए वाक्यविन्यास से अनिश्चितता है। – doremi
यह आपको इंजेक्शन सेवाओं के बारे में एक बुनियादी उदाहरण दिखाता है, यहां और पढ़ें: http://symfony.com/doc/current/book/service_container.html –
मेरा सत्र स्पष्ट रूप से नष्ट हो रहा है ताकि फ्लैश मिटा दिया जा सके। मैंने सोचा था कि LogoutSuccess() को कॉल करने से पहले वास्तविक लॉगिंग आउट पहले से ही किया जा चुका था? – doremi