Maison  >  Questions et réponses  >  le corps du texte

La sérialisation de "Closure" n'est pas autorisée dans le framework Laravel (php)

J'obtiens cette erreur lorsque je veux me connecter à ma session mais je ne sais pas comment y remédier, j'en ai vraiment besoin car ma cérémonie de remise des diplômes a lieu demain. Première erreur dans la ligne : $response = $kernel->handle( $request = Request::capture() )->send();

use Illuminate\Contracts\Http\Kernel;
use Illuminate\Http\Request;

define('LARAVEL_START', microtime(true));


if (file_exists($maintenance = __DIR__.'/../storage/framework/maintenance.php')) {
   require $maintenance;
}

require __DIR__.'/../vendor/autoload.php';


$app = require_once __DIR__.'/../bootstrap/app.php';

$kernel = $app->make(Kernel::class);

$response = $kernel->handle(
   $request = Request::capture()
)->send();

$kernel->terminate($request, $response);

Deuxième erreur sur la dernière ligne

<?php



$publicPath = getcwd();
$uri = urldecode(

    parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH) ?? ''

);
if ($uri !== '/' && file_exists($publicPath.$uri)) {

    return false;

}
require_once $publicPath.'/index.php';

C'est authClass

<?php

namespace App\Http\Controllers\Admin;

use App\Http\Controllers\Controller;
use Illuminate\Http\Request;

class AuthController extends Controller
{
    public function getLogin()
    {
        return view('admin.auth.login');
    }
    public function postLogin(Request $request)
    {
        $request->validate([
            'email' => 'required|email',
            'password' => 'required'
        ]);
        $validated = auth()->attempt([
            'email' => $request->email,
            'password' => $request->password,
            'is_admin' => 1
        ], $request->password);
        if ($validated) {
            return redirect()->route('dashboard')->with('success', 'Login Successfull');
        } else {
            return redirect()->back()->with('error', $request);
        }
    }
}

Cette ligne est écrite comme suit : return redirect()->back()->with('error', 'Invalid Credentials'); Je ne connais que l'erreur à la place

P粉364642019P粉364642019180 Il y a quelques jours375

répondre à tous(1)je répondrai

  • P粉347804896

    P粉3478048962024-03-28 00:07:52

    Dans Laravel, la sérialisation des fermetures n'est pas autorisée par défaut. Cette restriction existe car les fermetures sont des fonctions anonymes et peuvent contenir des références au contexte et aux variables environnantes. La sérialisation des fermetures et de leur état environnant peut être complexe et sujette aux erreurs.

    Lorsque vous essayez de sérialiser les fermetures dans Laravel, vous pouvez rencontrer des erreurs similaires aux suivantes :

    Pour contourner cette limitation, vous pouvez refactoriser votre code pour éviter les fermetures de sérialisation. À la place, vous pouvez utiliser d'autres types sérialisables, tels que des classes ou des structures de données (telles que des tableaux ou des objets).

    Si vous avez besoin de stocker un état ou un comportement, vous pouvez créer une classe et définir les méthodes ou propriétés requises. Vous pouvez ensuite sérialiser et désérialiser les instances de cette classe sans aucun problème.

    Voici un exemple d'utilisation de fermetures pour refactoriser le code en classes :

    class MySerializableClass
    {
        public function doSomething()
        {
            // Your code here
        }
    }
    
    $serializableInstance = new MySerializableClass();
    
    // Serialize the instance
    $serialized = serialize($serializableInstance);
    
    // Unserialize the instance
    $unserialized = unserialize($serialized);
    
    // Call the method on the unserialized instance
    $unserialized->doSomething();

    En utilisant des classes sérialisables, vous pouvez sérialiser et désérialiser les instances en toute sécurité sans rencontrer de problèmes liés aux fermetures.

    N'oubliez pas que les fermetures sont une fonctionnalité puissante de PHP, mais elles ont des limites en matière de sérialisation. Refactoriser votre code pour utiliser des classes sérialisables peut vous aider à surmonter cette limitation dans Laravel.

    répondre
    0
  • Annulerrépondre