{"record":{"id":"c3ee33b97acafa11","repo":"laravel/framework","slug":"unknown-visibility-visibility","errorCode":null,"errorMessage":"Unknown visibility: {$visibility}.","messagePattern":"Unknown visibility: (.+?)\\.","errorType":"exception","errorClass":"InvalidArgumentException","httpStatus":null,"severity":"error","filePath":"src/Illuminate/Filesystem/FilesystemAdapter.php","lineNumber":1094,"sourceCode":"\n    /**\n     * Parse the given visibility value.\n     *\n     * @param  string|null  $visibility\n     * @return string|null\n     *\n     * @throws \\InvalidArgumentException\n     */\n    protected function parseVisibility($visibility)\n    {\n        if (is_null($visibility)) {\n            return;\n        }\n\n        return match ($visibility) {\n            FilesystemContract::VISIBILITY_PUBLIC => Visibility::PUBLIC,\n            FilesystemContract::VISIBILITY_PRIVATE => Visibility::PRIVATE,\n            default => throw new InvalidArgumentException(\"Unknown visibility: {$visibility}.\"),\n        };\n    }\n\n    /**\n     * Define a custom callback that generates file download responses.\n     *\n     * @param  \\Closure  $callback\n     * @return void\n     */\n    public function serveUsing(Closure $callback)\n    {\n        $this->serveCallback = $callback;\n    }\n\n    /**\n     * Define a custom temporary URL builder callback.\n     *\n     * @param  \\Closure  $callback","sourceCodeStart":1076,"sourceCodeEnd":1112,"githubUrl":"https://github.com/laravel/framework/blob/e0f6eb3518ac29fbbca8529e97d0df7fc9f24481/src/Illuminate/Filesystem/FilesystemAdapter.php#L1076-L1112","documentation":"Thrown by FilesystemAdapter::parseVisibility() when $visibility is non-null and does not match FilesystemContract::VISIBILITY_PUBLIC ('public') or VISIBILITY_PRIVATE ('private'). The match expression maps those two constants to league/flysystem Visibility enum values; anything else is rejected before reaching the adapter.","triggerScenarios":"Calling Storage::putFileAs(..., $visibility), Storage::setVisibility($path, $visibility), or any operation that forwards visibility where $visibility is e.g. 'protected', 'readonly', 'PUBLIC' (wrong case), or an empty string.","commonSituations":"Typos or wrong case ('Public', 'PUBLIC'); passing a value sourced from unvalidated request input; mismatched enum from another library; legacy code using 'protected'.","solutions":["Pass only 'public' or 'private' (the exact string constants).","Validate user-supplied visibility against an allow-list before calling.","Pass null to let the disk use its configured default visibility.","Reference FilesystemContract::VISIBILITY_PUBLIC / VISIBILITY_PRIVATE to avoid magic strings."],"exampleFix":"// before\nStorage::setVisibility($path, $request->input('visibility'));\n\n// after\n$visibility = in_array($request->input('visibility'), ['public','private'], true)\n    ? $request->input('visibility')\n    : null;\nStorage::setVisibility($path, $visibility);","handlingStrategy":"validation","validationCode":"if (! in_array($visibility, ['public','private', null], true)) {\n    throw new InvalidArgumentException('Visibility must be public, private, or null.');\n}\nStorage::setVisibility($path, $visibility);","typeGuard":"function isValidVisibility(?string $visibility): bool {\n    return in_array($visibility, ['public','private', null], true);\n}","tryCatchPattern":"try {\n    Storage::setVisibility($path, $visibility);\n} catch (\\InvalidArgumentException $e) {\n    Storage::setVisibility($path, null); // disk default\n}","preventionTips":["Use FilesystemContract::VISIBILITY_PUBLIC / VISIBILITY_PRIVATE constants.","Validate request input against ['public','private'] before passing.","Pass null to accept the disk default.","Avoid case variants and synonyms like 'protected'."],"tags":["filesystem","visibility","validation","acl"],"backgroundTag":null,"analyzedSha":"e0f6eb3518ac29fbbca8529e97d0df7fc9f24481","analyzedAt":"2026-08-11T20:52:37.562Z","contentChangedAt":null,"schemaVersion":2},"datasetVersion":"2026-09-23T08:17:48.524Z"}