3

I want to call a route which binds to parameter from the route which the enums have the enum type with a value of integer. However, after calling it I get error 500 with this error message Target [App\\Enums\\SportField] is not instantiable. with the exception of "exception": "Illuminate\\Contracts\\Container\\BindingResolutionException",. My enum files are like this

<?php
namespace App\Enums;
enum SportField:int {
case Football=1;
case Volleyball=2;
case BasketBall=3;
case Badminton=4;
}
enum SportSubField:int
{
case Normal=1;
case Double=2;
}

and the route and the action of this route:

//Route
Route::get('{field}/{subField}',[SingleController::class,'Get']);
//Action
public function Get(SportField $field,SportSubField $subField){
     return $field;
    }
}

the full message of the exception is

{
    "message": "Target [App\\Enums\\SportField] is not instantiable.",
    "exception": "Illuminate\\Contracts\\Container\\BindingResolutionException",
    "file": "/mnt/e/Work/KDZ/portalPanel/vendor/laravel/framework/src/Illuminate/Container/Container.php",
    "line": 1103,
    "trace": [
        {
            "file": "/mnt/e/Work/KDZ/portalPanel/vendor/laravel/framework/src/Illuminate/Container/Container.php",
            "line": 898,
            "function": "notInstantiable",
            "class": "Illuminate\\Container\\Container",
            "type": "->"
        },
        {
            "file": "/mnt/e/Work/KDZ/portalPanel/vendor/laravel/framework/src/Illuminate/Container/Container.php",
            "line": 770,
            "function": "build",
            "class": "Illuminate\\Container\\Container",
            "type": "->"
        },
        {
            "file": "/mnt/e/Work/KDZ/portalPanel/vendor/laravel/framework/src/Illuminate/Foundation/Application.php",
            "line": 856,
            "function": "resolve",
            "class": "Illuminate\\Container\\Container",
            "type": "->"
        },
        {
            "file": "/mnt/e/Work/KDZ/portalPanel/vendor/laravel/framework/src/Illuminate/Container/Container.php",
            "line": 706,
            "function": "resolve",
            "class": "Illuminate\\Foundation\\Application",
            "type": "->"
        },
        {
            "file": "/mnt/e/Work/KDZ/portalPanel/vendor/laravel/framework/src/Illuminate/Foundation/Application.php",
            "line": 841,
            "function": "make",
            "class": "Illuminate\\Container\\Container",
            "type": "->"
        },
        {
            "file": "/mnt/e/Work/KDZ/portalPanel/vendor/laravel/framework/src/Illuminate/Routing/RouteDependencyResolverTrait.php",
            "line": 85,
            "function": "make",
            "class": "Illuminate\\Foundation\\Application",
            "type": "->"
        },
        {
            "file": "/mnt/e/Work/KDZ/portalPanel/vendor/laravel/framework/src/Illuminate/Routing/RouteDependencyResolverTrait.php",
            "line": 50,
            "function": "transformDependency",
            "class": "Illuminate\\Routing\\ControllerDispatcher",
            "type": "->"
        },
        {
            "file": "/mnt/e/Work/KDZ/portalPanel/vendor/laravel/framework/src/Illuminate/Routing/RouteDependencyResolverTrait.php",
            "line": 30,
            "function": "resolveMethodDependencies",
            "class": "Illuminate\\Routing\\ControllerDispatcher",
            "type": "->"
        },
        {
            "file": "/mnt/e/Work/KDZ/portalPanel/vendor/laravel/framework/src/Illuminate/Routing/ControllerDispatcher.php",
            "line": 60,
            "function": "resolveClassMethodDependencies",
            "class": "Illuminate\\Routing\\ControllerDispatcher",
            "type": "->"
        },
        {
            "file": "/mnt/e/Work/KDZ/portalPanel/vendor/laravel/framework/src/Illuminate/Routing/ControllerDispatcher.php",
            "line": 40,
            "function": "resolveParameters",
            "class": "Illuminate\\Routing\\ControllerDispatcher",
            "type": "->"
        },
        {
            "file": "/mnt/e/Work/KDZ/portalPanel/vendor/laravel/framework/src/Illuminate/Routing/Route.php",
            "line": 260,
            "function": "dispatch",
            "class": "Illuminate\\Routing\\ControllerDispatcher",
            "type": "->"
        },
        {
            "file": "/mnt/e/Work/KDZ/portalPanel/vendor/laravel/framework/src/Illuminate/Routing/Route.php",
            "line": 205,
            "function": "runController",
            "class": "Illuminate\\Routing\\Route",
            "type": "->"
        },
        {
            "file": "/mnt/e/Work/KDZ/portalPanel/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
            "line": 798,
            "function": "run",
            "class": "Illuminate\\Routing\\Route",
            "type": "->"
        },
        {
            "file": "/mnt/e/Work/KDZ/portalPanel/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 141,
            "function": "Illuminate\\Routing\\{closure}",
            "class": "Illuminate\\Routing\\Router",
            "type": "->"
        },
        {
            "file": "/mnt/e/Work/KDZ/portalPanel/vendor/laravel/framework/src/Illuminate/Routing/Middleware/SubstituteBindings.php",
            "line": 50,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/mnt/e/Work/KDZ/portalPanel/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 180,
            "function": "handle",
            "class": "Illuminate\\Routing\\Middleware\\SubstituteBindings",
            "type": "->"
        },
        {
            "file": "/mnt/e/Work/KDZ/portalPanel/vendor/laravel/framework/src/Illuminate/Routing/Middleware/ThrottleRequests.php",
            "line": 126,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/mnt/e/Work/KDZ/portalPanel/vendor/laravel/framework/src/Illuminate/Routing/Middleware/ThrottleRequests.php",
            "line": 102,
            "function": "handleRequest",
            "class": "Illuminate\\Routing\\Middleware\\ThrottleRequests",
            "type": "->"
        },
        {
            "file": "/mnt/e/Work/KDZ/portalPanel/vendor/laravel/framework/src/Illuminate/Routing/Middleware/ThrottleRequests.php",
            "line": 54,
            "function": "handleRequestUsingNamedLimiter",
            "class": "Illuminate\\Routing\\Middleware\\ThrottleRequests",
            "type": "->"
        },
        {
            "file": "/mnt/e/Work/KDZ/portalPanel/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 180,
            "function": "handle",
            "class": "Illuminate\\Routing\\Middleware\\ThrottleRequests",
            "type": "->"
        },
        {
            "file": "/mnt/e/Work/KDZ/portalPanel/vendor/laravel/framework/src/Illuminate/Auth/Middleware/Authenticate.php",
            "line": 44,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/mnt/e/Work/KDZ/portalPanel/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 180,
            "function": "handle",
            "class": "Illuminate\\Auth\\Middleware\\Authenticate",
            "type": "->"
        },
        {
            "file": "/mnt/e/Work/KDZ/portalPanel/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 116,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/mnt/e/Work/KDZ/portalPanel/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
            "line": 799,
            "function": "then",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/mnt/e/Work/KDZ/portalPanel/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
            "line": 776,
            "function": "runRouteWithinStack",
            "class": "Illuminate\\Routing\\Router",
            "type": "->"
        },
        {
            "file": "/mnt/e/Work/KDZ/portalPanel/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
            "line": 740,
            "function": "runRoute",
            "class": "Illuminate\\Routing\\Router",
            "type": "->"
        },
        {
            "file": "/mnt/e/Work/KDZ/portalPanel/vendor/laravel/framework/src/Illuminate/Routing/Router.php",
            "line": 729,
            "function": "dispatchToRoute",
            "class": "Illuminate\\Routing\\Router",
            "type": "->"
        },
        {
            "file": "/mnt/e/Work/KDZ/portalPanel/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php",
            "line": 190,
            "function": "dispatch",
            "class": "Illuminate\\Routing\\Router",
            "type": "->"
        },
        {
            "file": "/mnt/e/Work/KDZ/portalPanel/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 141,
            "function": "Illuminate\\Foundation\\Http\\{closure}",
            "class": "Illuminate\\Foundation\\Http\\Kernel",
            "type": "->"
        },
        {
            "file": "/mnt/e/Work/KDZ/portalPanel/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php",
            "line": 21,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/mnt/e/Work/KDZ/portalPanel/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/ConvertEmptyStringsToNull.php",
            "line": 31,
            "function": "handle",
            "class": "Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest",
            "type": "->"
        },
        {
            "file": "/mnt/e/Work/KDZ/portalPanel/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 180,
            "function": "handle",
            "class": "Illuminate\\Foundation\\Http\\Middleware\\ConvertEmptyStringsToNull",
            "type": "->"
        },
        {
            "file": "/mnt/e/Work/KDZ/portalPanel/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php",
            "line": 21,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/mnt/e/Work/KDZ/portalPanel/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TrimStrings.php",
            "line": 40,
            "function": "handle",
            "class": "Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest",
            "type": "->"
        },
        {
            "file": "/mnt/e/Work/KDZ/portalPanel/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 180,
            "function": "handle",
            "class": "Illuminate\\Foundation\\Http\\Middleware\\TrimStrings",
            "type": "->"
        },
        {
            "file": "/mnt/e/Work/KDZ/portalPanel/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/ValidatePostSize.php",
            "line": 27,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/mnt/e/Work/KDZ/portalPanel/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 180,
            "function": "handle",
            "class": "Illuminate\\Foundation\\Http\\Middleware\\ValidatePostSize",
            "type": "->"
        },
        {
            "file": "/mnt/e/Work/KDZ/portalPanel/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/PreventRequestsDuringMaintenance.php",
            "line": 86,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/mnt/e/Work/KDZ/portalPanel/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 180,
            "function": "handle",
            "class": "Illuminate\\Foundation\\Http\\Middleware\\PreventRequestsDuringMaintenance",
            "type": "->"
        },
        {
            "file": "/mnt/e/Work/KDZ/portalPanel/vendor/laravel/framework/src/Illuminate/Http/Middleware/HandleCors.php",
            "line": 62,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/mnt/e/Work/KDZ/portalPanel/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 180,
            "function": "handle",
            "class": "Illuminate\\Http\\Middleware\\HandleCors",
            "type": "->"
        },
        {
            "file": "/mnt/e/Work/KDZ/portalPanel/vendor/laravel/framework/src/Illuminate/Http/Middleware/TrustProxies.php",
            "line": 39,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/mnt/e/Work/KDZ/portalPanel/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 180,
            "function": "handle",
            "class": "Illuminate\\Http\\Middleware\\TrustProxies",
            "type": "->"
        },
        {
            "file": "/mnt/e/Work/KDZ/portalPanel/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php",
            "line": 116,
            "function": "Illuminate\\Pipeline\\{closure}",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/mnt/e/Work/KDZ/portalPanel/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php",
            "line": 165,
            "function": "then",
            "class": "Illuminate\\Pipeline\\Pipeline",
            "type": "->"
        },
        {
            "file": "/mnt/e/Work/KDZ/portalPanel/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php",
            "line": 134,
            "function": "sendRequestThroughRouter",
            "class": "Illuminate\\Foundation\\Http\\Kernel",
            "type": "->"
        },
        {
            "file": "/mnt/e/Work/KDZ/portalPanel/public/index.php",
            "line": 55,
            "function": "handle",
            "class": "Illuminate\\Foundation\\Http\\Kernel",
            "type": "->"
        },
        {
            "file": "/mnt/e/Work/KDZ/portalPanel/server.php",
            "line": 21,
            "function": "require_once"
        }
    ]
}

I want to call the route and get the result without the Target [App\\Enums\\SportField] is not instantiable. exception message.

1
  • 2
    Laravel only allows string backed enums.
    – shingo
    Commented Jun 18, 2023 at 11:55

2 Answers 2

2

Using an implicit binding relies on the route section to match with Laravel's naming convention.

In your example, changing {field}/{subField} to {field}/{sportSubField} should work

// Route
Route::get('{field}/{sportSubField}',[SingleController::class,'Get']);

// Action
public function Get(SportField $field, SportSubField $subField) {
   return $field;
}

See the docs for a good example on Implicit Enum Binding

0

Having the same issue. I have bypassed the issue as below.

public function Get(int $field, int $subField)
{
    $fieldEnum    = SportField::from($field);
    $subFieldEnum = SportSubField::from($subField);

    return $field;
}

But i think there is better way to fix this issue.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.