diff --git a/docs/.anchors.json b/docs/.anchors.json new file mode 100644 index 000000000000..5cbf872e9dc4 --- /dev/null +++ b/docs/.anchors.json @@ -0,0 +1,4174 @@ +{ + "changelogs/v4.0.0-alpha.1.md": { + "version-400-alpha1": [ + "version-4-0-0-alpha-1" + ] + }, + "changelogs/v4.0.0-alpha.2.md": { + "version-400-alpha2": [ + "version-4-0-0-alpha-2" + ] + }, + "changelogs/v4.0.0-alpha.3.md": { + "version-400-alpha3": [ + "version-4-0-0-alpha-3" + ] + }, + "changelogs/v4.0.0-alpha.4.md": { + "version-400-alpha4": [ + "version-4-0-0-alpha-4" + ] + }, + "changelogs/v4.0.0-alpha.5.md": { + "version-400-alpha5": [ + "version-4-0-0-alpha-5" + ] + }, + "changelogs/v4.0.0-beta.1.md": { + "version-400-beta1": [ + "version-4-0-0-beta-1" + ] + }, + "changelogs/v4.0.0-beta.2.md": { + "version-400-beta2": [ + "version-4-0-0-beta-2" + ] + }, + "changelogs/v4.0.0-beta.3.md": { + "version-400-beta3": [ + "version-4-0-0-beta-3" + ] + }, + "changelogs/v4.0.0-beta.4.md": { + "version-400-beta4": [ + "version-4-0-0-beta-4" + ] + }, + "changelogs/v4.0.0-rc.1.md": { + "version-400-rc1": [ + "version-4-0-0-rc-1" + ] + }, + "changelogs/v4.0.0-rc.2.md": { + "version-400-rc2": [ + "version-4-0-0-rc-2" + ] + }, + "changelogs/v4.0.0-rc.3.md": { + "version-400-rc3": [ + "version-4-0-0-rc-3" + ] + }, + "changelogs/v4.0.0-rc.4.md": { + "version-400-rc4": [ + "version-4-0-0-rc-4" + ] + }, + "changelogs/v4.0.0.md": { + "version-400": [ + "version-4-0-0" + ] + }, + "changelogs/v4.0.3.md": { + "version-403": [ + "version-4-0-3" + ] + }, + "changelogs/v4.0.4.md": { + "version-404": [ + "version-4-0-4" + ] + }, + "changelogs/v4.0.5.md": { + "version-405": [ + "version-4-0-5" + ] + }, + "changelogs/v4.1.0.md": { + "version-410": [ + "version-4-1-0" + ] + }, + "changelogs/v4.1.1.md": { + "version-411": [ + "version-4-1-1" + ] + }, + "changelogs/v4.1.2.md": { + "version-412": [ + "version-4-1-2" + ] + }, + "changelogs/v4.1.3.md": { + "version-413": [ + "version-4-1-3" + ] + }, + "changelogs/v4.1.4.md": { + "version-414": [ + "version-4-1-4" + ] + }, + "changelogs/v4.1.5.md": { + "version-415": [ + "version-4-1-5" + ] + }, + "changelogs/v4.1.6.md": { + "version-416": [ + "version-4-1-6" + ], + "validation-changes": [ + "changelog-v416-validation-changes" + ] + }, + "changelogs/v4.1.7.md": { + "version-417": [ + "version-4-1-7" + ] + }, + "changelogs/v4.1.8.md": { + "version-418": [ + "version-4-1-8" + ] + }, + "changelogs/v4.1.9.md": { + "version-419": [ + "version-4-1-9" + ] + }, + "changelogs/v4.2.0.md": { + "version-420": [ + "version-4-2-0" + ], + "new-improved-auto-routing": [ + "v420-new-improved-auto-routing" + ] + }, + "changelogs/v4.2.1.md": { + "version-421": [ + "version-4-2-1" + ] + }, + "changelogs/v4.2.10.md": { + "version-4210": [ + "version-4-2-10" + ] + }, + "changelogs/v4.2.11.md": { + "version-4211": [ + "version-4-2-11" + ] + }, + "changelogs/v4.2.12.md": { + "version-4212": [ + "version-4-2-12" + ] + }, + "changelogs/v4.2.2.md": { + "version-422": [ + "version-4-2-2" + ] + }, + "changelogs/v4.2.3.md": { + "version-423": [ + "version-4-2-3" + ] + }, + "changelogs/v4.2.4.md": { + "version-424": [ + "version-4-2-4" + ] + }, + "changelogs/v4.2.5.md": { + "version-425": [ + "version-4-2-5" + ] + }, + "changelogs/v4.2.6.md": { + "version-426": [ + "version-4-2-6" + ] + }, + "changelogs/v4.2.7.md": { + "version-427": [ + "version-4-2-7" + ] + }, + "changelogs/v4.2.8.md": { + "version-428": [ + "version-4-2-8" + ] + }, + "changelogs/v4.2.9.md": { + "version-429": [ + "version-4-2-9" + ] + }, + "changelogs/v4.3.0.md": { + "version-430": [ + "version-4-3-0" + ], + "time": [ + "v430-time-fix" + ], + "interface-changes": [ + "v430-interface-changes" + ], + "validation-changes": [ + "v430-validation-changes" + ], + "multiple-domain-support": [ + "v430-multiple-domain-support" + ] + }, + "changelogs/v4.3.1.md": { + "version-431": [ + "version-4-3-1" + ] + }, + "changelogs/v4.3.2.md": { + "version-432": [ + "version-4-3-2" + ], + "base_url": [ + "base-url" + ], + "uri_string": [ + "v432-uri-string", + "uri-string" + ] + }, + "changelogs/v4.3.3.md": { + "version-433": [ + "version-4-3-3" + ] + }, + "changelogs/v4.3.4.md": { + "version-434": [ + "version-4-3-4" + ], + "redirect-status-code": [ + "v434-redirect-status-code" + ], + "forgemodifycolumn": [ + "v434-forge-modifycolumn", + "forge-modifycolumn" + ] + }, + "changelogs/v4.3.5.md": { + "version-435": [ + "version-4-3-5" + ] + }, + "changelogs/v4.3.6.md": { + "version-436": [ + "version-4-3-6" + ], + "validationinterfacecheck": [ + "validationinterface-check" + ], + "validationcheck": [ + "validation-check" + ] + }, + "changelogs/v4.3.7.md": { + "version-437": [ + "version-4-3-7" + ] + }, + "changelogs/v4.3.8.md": { + "version-438": [ + "version-4-3-8" + ] + }, + "changelogs/v4.4.0.md": { + "version-440": [ + "version-4-4-0" + ], + "urisetsegment-and-non-existent-segment": [ + "uri-setsegment-and-non-existent-segment" + ], + "factories": [ + "v440-factories" + ], + "codeigniter-and-exit": [ + "v440-codeigniter-and-exit" + ], + "site-uri-changes": [ + "v440-site-uri-changes" + ], + "interface-changes": [ + "v440-interface-changes" + ], + "method-signature-changes": [ + "v440-method-signature-changes" + ], + "parameter-type-changes": [ + "v440-parameter-type-changes" + ] + }, + "changelogs/v4.4.1.md": { + "version-441": [ + "version-4-4-1" + ] + }, + "changelogs/v4.4.2.md": { + "version-442": [ + "version-4-4-2" + ] + }, + "changelogs/v4.4.3.md": { + "version-443": [ + "version-4-4-3" + ] + }, + "changelogs/v4.4.4.md": { + "version-444": [ + "version-4-4-4" + ], + "the-use-of-the-ssl_key-option-in-curlrequest-was-removed": [ + "the-use-of-the-ssl-key-option-in-curlrequest-was-removed" + ] + }, + "changelogs/v4.4.5.md": { + "version-445": [ + "version-4-4-5" + ] + }, + "changelogs/v4.4.6.md": { + "version-446": [ + "version-4-4-6" + ], + "timecreatefromtimestamp": [ + "time-createfromtimestamp" + ] + }, + "changelogs/v4.4.7.md": { + "version-447": [ + "version-4-4-7" + ] + }, + "changelogs/v4.4.8.md": { + "version-448": [ + "version-4-4-8" + ] + }, + "changelogs/v4.5.0.md": { + "version-450": [ + "version-4-5-0" + ], + "required-filters": [ + "v450-required-filters" + ], + "limit0-behavior": [ + "v450-query-builder-limit-0-behavior", + "limit-0-behavior" + ], + "findall0-behavior": [ + "v450-model-findall-limit-0-behavior", + "findall-0-behavior" + ], + "apiresponsetrait": [ + "api-responsetrait" + ], + "method-signature-changes": [ + "v450-method-signature-changes" + ], + "removed-deprecated-items": [ + "v450-removed-deprecated-items" + ] + }, + "changelogs/v4.5.1.md": { + "version-451": [ + "version-4-5-1" + ] + }, + "changelogs/v4.5.2.md": { + "version-452": [ + "version-4-5-2" + ] + }, + "changelogs/v4.5.3.md": { + "version-453": [ + "version-4-5-3" + ] + }, + "changelogs/v4.5.4.md": { + "version-454": [ + "version-4-5-4" + ] + }, + "changelogs/v4.5.5.md": { + "version-455": [ + "version-4-5-5" + ] + }, + "changelogs/v4.5.6.md": { + "version-456": [ + "version-4-5-6" + ] + }, + "changelogs/v4.5.7.md": { + "version-457": [ + "version-4-5-7" + ] + }, + "changelogs/v4.5.8.md": { + "version-458": [ + "version-4-5-8" + ] + }, + "changelogs/v4.6.0.md": { + "version-460": [ + "version-4-6-0" + ], + "exceptions": [ + "v460-behavior-changes-exceptions" + ], + "timecreatefromtimestamp": [ + "time-createfromtimestamp" + ], + "timesettimestamp": [ + "time-settimestamp" + ], + "headers": [ + "v460-interface-changes" + ], + "method-signature-changes": [ + "v460-method-signature-changes" + ], + "removed-deprecated-items": [ + "v460-removed-deprecated-items" + ] + }, + "changelogs/v4.6.1.md": { + "version-461": [ + "version-4-6-1" + ] + }, + "changelogs/v4.6.2.md": { + "version-462": [ + "version-4-6-2" + ] + }, + "changelogs/v4.6.3.md": { + "version-463": [ + "version-4-6-3" + ] + }, + "changelogs/v4.6.4.md": { + "version-464": [ + "version-4-6-4" + ] + }, + "changelogs/v4.6.5.md": { + "version-465": [ + "version-4-6-5" + ] + }, + "changelogs/v4.7.0.md": { + "version-470": [ + "version-4-7-0" + ], + "interface-changes": [ + "v470-interface-changes" + ], + "method-signature-changes": [ + "v470-method-signature-changes" + ], + "property-signature-changes": [ + "v470-property-signature-changes" + ], + "removed-deprecated-items": [ + "v470-removed-deprecated-items" + ] + }, + "changelogs/v4.7.1.md": { + "version-471": [ + "version-4-7-1" + ] + }, + "changelogs/v4.7.2.md": { + "version-472": [ + "version-4-7-2" + ] + }, + "changelogs/v4.7.3.md": { + "version-473": [ + "version-4-7-3" + ] + }, + "changelogs/v4.7.4.md": { + "version-474": [ + "version-4-7-4" + ] + }, + "changelogs/v4.7.5.md": { + "version-475": [ + "version-4-7-5" + ] + }, + "changelogs/v4.7.6.md": { + "version-476": [ + "version-4-7-6" + ] + }, + "changelogs/v4.7.7.md": { + "version-477": [ + "version-4-7-7" + ] + }, + "cli/cli_commands.md": { + "codeignitercli": [ + "namespace-CodeIgniter\\CLI" + ], + "basecommand_1": [ + "CodeIgniter\\CLI\\BaseCommand" + ], + "callstring-command-array-params": [ + "CodeIgniter\\CLI\\BaseCommand::call" + ], + "showerrorthrowable-e": [ + "CodeIgniter\\CLI\\BaseCommand::showError" + ], + "showhelp": [ + "CodeIgniter\\CLI\\BaseCommand::showHelp" + ], + "setpadstring-item-int-max-int-extra-2-int-indent-0-string": [ + "CodeIgniter\\CLI\\BaseCommand::setPad" + ], + "getpadarray-pad": [ + "CodeIgniter\\CLI\\BaseCommand::getPad" + ] + }, + "cli/cli_controllers.md": { + "lets-try-it-hello-world": [ + "let-s-try-it-hello-world" + ], + "thats-the-basics": [ + "that-s-the-basics" + ] + }, + "cli/cli_generators.md": { + "makecell": [ + "make-cell" + ], + "makecommand": [ + "make-command" + ], + "makeconfig": [ + "make-config" + ], + "makecontroller": [ + "make-controller" + ], + "makeentity": [ + "make-entity" + ], + "makefilter": [ + "make-filter" + ], + "makemodel": [ + "make-model" + ], + "makeseeder": [ + "make-seeder" + ], + "maketest": [ + "cli-generators-make-test", + "make-test" + ], + "maketransformer": [ + "make-transformer" + ], + "makemigration": [ + "make-migration" + ], + "makevalidation": [ + "make-validation" + ] + }, + "cli/cli_library.md": { + "promptbymultiplekeys": [ + "prompt-by-multiple-keys" + ], + "color": [ + "cli-library-color" + ] + }, + "cli/cli_request.md": { + "getoptionkey": [ + "getoption-key" + ] + }, + "cli/cli_signals.md": { + "how-pauseresume-works": [ + "how-pause-resume-works" + ], + "codeignitercli": [ + "namespace-CodeIgniter\\CLI" + ], + "signaltrait": [ + "CodeIgniter\\CLI\\SignalTrait" + ], + "registersignalssignals-sigterm-sigint-sighup-sigquit-methodmap": [ + "CodeIgniter\\CLI\\SignalTrait::registerSignals" + ], + "isrunning": [ + "CodeIgniter\\CLI\\SignalTrait::isRunning" + ], + "shouldterminate": [ + "CodeIgniter\\CLI\\SignalTrait::shouldTerminate" + ], + "requesttermination": [ + "CodeIgniter\\CLI\\SignalTrait::requestTermination" + ], + "resetstate": [ + "CodeIgniter\\CLI\\SignalTrait::resetState" + ], + "withsignalsblockedoperation": [ + "CodeIgniter\\CLI\\SignalTrait::withSignalsBlocked" + ], + "aresignalsblocked": [ + "CodeIgniter\\CLI\\SignalTrait::areSignalsBlocked" + ], + "mapsignalsignal-method": [ + "CodeIgniter\\CLI\\SignalTrait::mapSignal" + ], + "getsignalnamesignal": [ + "CodeIgniter\\CLI\\SignalTrait::getSignalName" + ], + "hassignals": [ + "CodeIgniter\\CLI\\SignalTrait::hasSignals" + ], + "getsignals": [ + "CodeIgniter\\CLI\\SignalTrait::getSignals" + ], + "getprocessstate": [ + "CodeIgniter\\CLI\\SignalTrait::getProcessState" + ], + "unregistersignals": [ + "CodeIgniter\\CLI\\SignalTrait::unregisterSignals" + ] + }, + "concepts/autoloader.md": { + "namespaces": [ + "autoloader-namespaces" + ], + "application-namespace": [ + "autoloader-application-namespace" + ], + "filelocator-caching": [ + "file-locator-caching" + ] + }, + "concepts/factories.md": { + "loading-classes": [ + "factories-loading-class" + ], + "passing-classname-without-namespace": [ + "factories-passing-classname-without-namespace" + ], + "passing-fully-qualified-classname": [ + "factories-passing-fully-qualified-classname" + ], + "config": [ + "factories-config" + ], + "defining-classname-to-be-loaded": [ + "factories-defining-classname-to-be-loaded" + ], + "config-caching": [ + "factories-config-caching" + ] + }, + "concepts/security.md": { + "a012021-broken-access-control": [ + "a01-2021-broken-access-control" + ], + "a022021-cryptographic-failures": [ + "a02-2021-cryptographic-failures" + ], + "a032021-injection": [ + "a03-2021-injection" + ], + "a042021-insecure-design": [ + "a04-2021-insecure-design" + ], + "a052021-security-misconfiguration": [ + "a05-2021-security-misconfiguration" + ], + "a062021-vulnerable-and-outdated-components": [ + "a06-2021-vulnerable-and-outdated-components" + ], + "a072021-identification-and-authentication-failures": [ + "a07-2021-identification-and-authentication-failures" + ], + "a082021-software-and-data-integrity-failures": [ + "a08-2021-software-and-data-integrity-failures" + ], + "a092021-security-logging-and-monitoring-failures": [ + "a09-2021-security-logging-and-monitoring-failures" + ], + "a102021-server-side-request-forgery-ssrf": [ + "a10-2021-server-side-request-forgery-ssrf" + ], + "api12023-broken-object-level-authorization": [ + "api1-2023-broken-object-level-authorization" + ], + "api22023-broken-authentication": [ + "api2-2023-broken-authentication" + ], + "api32023-broken-object-property-level-authorization": [ + "api3-2023-broken-object-property-level-authorization" + ], + "api42023-unrestricted-resource-consumption": [ + "api4-2023-unrestricted-resource-consumption" + ], + "api52023-broken-function-level-authorization": [ + "api5-2023-broken-function-level-authorization" + ], + "api62023-unrestricted-access-to-sensitive-business-flows": [ + "api6-2023-unrestricted-access-to-sensitive-business-flows" + ], + "api72023-server-side-request-forgery": [ + "api7-2023-server-side-request-forgery" + ], + "api82023-security-misconfiguration": [ + "api8-2023-security-misconfiguration" + ], + "api92023-improper-inventory-management": [ + "api9-2023-improper-inventory-management" + ], + "api102023-unsafe-consumption-of-apis": [ + "api10-2023-unsafe-consumption-of-apis" + ] + }, + "concepts/services.md": { + "single_service": [ + "single-service" + ] + }, + "concepts/structure.md": { + "public": [ + "application-structure-public" + ] + }, + "database/configuration.md": { + "configuring-with-env-file": [ + "database-config-with-env-file" + ], + "description-of-values": [ + "database-config-explanation-of-values" + ], + "encrypt": [ + "mysqli-encrypt" + ] + }, + "database/events.md": { + "dbquery": [ + "database-events-dbquery" + ] + }, + "database/metadata.md": { + "db-getfielddata": [ + "db-metadata-getfielddata" + ], + "db-getindexdata": [ + "db-metadata-getindexdata" + ], + "db-getforeignkeydata": [ + "metadata-getforeignkeydata" + ] + }, + "database/queries.md": { + "escaping-values": [ + "database-queries-escaping" + ], + "1-db-escape": [ + "database-queries-db-escape", + "db-escape" + ], + "2-db-escapestring": [ + "db-escapestring" + ], + "3-db-escapelikestring": [ + "db-escapelikestring" + ], + "query-bindings": [ + "database-queries-query-bindings" + ], + "close": [ + "database-queries-stmt-close" + ] + }, + "database/query_builder.md": { + "select": [ + "query-builder-select" + ], + "rawsql": [ + "query-builder-select-rawsql" + ], + "subqueries": [ + "query-builder-from-subquery" + ], + "builder-join": [ + "query-builder-join" + ], + "rawsql_1": [ + "query-builder-join-rawsql" + ], + "1-simple-keyvalue-method": [ + "simple-key-value-method" + ], + "2-custom-keyvalue-method": [ + "custom-key-value-method" + ], + "3-associative-array-method": [ + "associative-array-method" + ], + "4-custom-string": [ + "custom-string" + ], + "5-rawsql": [ + "query-builder-where-rawsql", + "rawsql" + ], + "6-subqueries": [ + "query-builder-where-subquery", + "subqueries" + ], + "1-simple-keyvalue-method_1": [ + "simple-key-value-method" + ], + "2-associative-array-method": [ + "associative-array-method" + ], + "3-rawsql": [ + "query-builder-like-rawsql", + "rawsql" + ], + "1-simple-keyvalue-method_2": [ + "simple-key-value-method" + ], + "2-associative-array-method_1": [ + "associative-array-method" + ], + "union-queries": [ + "query-builder-union" + ], + "insertbatch": [ + "insert-batch-data" + ], + "upserting-data": [ + "upsert-data" + ], + "updatebatch": [ + "update-batch" + ], + "deletebatch": [ + "delete-batch" + ], + "when": [ + "db-builder-when" + ], + "resetting-query-builder": [ + "ar-caching" + ], + "codeigniterdatabase": [ + "namespace-CodeIgniter\\Database" + ], + "basebuilder": [ + "CodeIgniter\\Database\\BaseBuilder" + ], + "db": [ + "CodeIgniter\\Database\\BaseBuilder::db" + ], + "resetquery_1": [ + "CodeIgniter\\Database\\BaseBuilder::resetQuery" + ], + "countallresultsreset-true": [ + "CodeIgniter\\Database\\BaseBuilder::countAllResults" + ], + "countallreset-true": [ + "CodeIgniter\\Database\\BaseBuilder::countAll" + ], + "getlimit-null-offset-null-reset-true": [ + "CodeIgniter\\Database\\BaseBuilder::get" + ], + "getwherewhere-null-limit-null-offset-null-reset-true": [ + "CodeIgniter\\Database\\BaseBuilder::getWhere" + ], + "selectselect-escape-null": [ + "CodeIgniter\\Database\\BaseBuilder::select" + ], + "selectavgselect-alias": [ + "CodeIgniter\\Database\\BaseBuilder::selectAvg" + ], + "selectmaxselect-alias": [ + "CodeIgniter\\Database\\BaseBuilder::selectMax" + ], + "selectminselect-alias": [ + "CodeIgniter\\Database\\BaseBuilder::selectMin" + ], + "selectsumselect-alias": [ + "CodeIgniter\\Database\\BaseBuilder::selectSum" + ], + "selectcountselect-alias": [ + "CodeIgniter\\Database\\BaseBuilder::selectCount" + ], + "selectsubquerybasebuilder-subquery-string-as": [ + "CodeIgniter\\Database\\BaseBuilder::selectSubquery" + ], + "distinctval-true": [ + "CodeIgniter\\Database\\BaseBuilder::distinct" + ], + "fromfrom-overwrite-false": [ + "CodeIgniter\\Database\\BaseBuilder::from" + ], + "fromsubqueryfrom-alias": [ + "CodeIgniter\\Database\\BaseBuilder::fromSubquery" + ], + "setqueryasdataquery-alias-columns-null": [ + "CodeIgniter\\Database\\BaseBuilder::setQueryAsData" + ], + "jointable-cond-type-escape-null": [ + "CodeIgniter\\Database\\BaseBuilder::join" + ], + "wherekey-value-null-escape-null": [ + "CodeIgniter\\Database\\BaseBuilder::where" + ], + "orwherekey-value-null-escape-null": [ + "CodeIgniter\\Database\\BaseBuilder::orWhere" + ], + "orwhereinkey-null-values-null-escape-null": [ + "CodeIgniter\\Database\\BaseBuilder::orWhereIn" + ], + "orwherenotinkey-null-values-null-escape-null": [ + "CodeIgniter\\Database\\BaseBuilder::orWhereNotIn" + ], + "whereinkey-null-values-null-escape-null": [ + "CodeIgniter\\Database\\BaseBuilder::whereIn" + ], + "wherenotinkey-null-values-null-escape-null": [ + "CodeIgniter\\Database\\BaseBuilder::whereNotIn" + ], + "groupstart": [ + "CodeIgniter\\Database\\BaseBuilder::groupStart" + ], + "orgroupstart": [ + "CodeIgniter\\Database\\BaseBuilder::orGroupStart" + ], + "notgroupstart": [ + "CodeIgniter\\Database\\BaseBuilder::notGroupStart" + ], + "ornotgroupstart": [ + "CodeIgniter\\Database\\BaseBuilder::orNotGroupStart" + ], + "groupend": [ + "CodeIgniter\\Database\\BaseBuilder::groupEnd" + ], + "likefield-match-side-both-escape-null-insensitivesearch-false": [ + "CodeIgniter\\Database\\BaseBuilder::like" + ], + "orlikefield-match-side-both-escape-null-insensitivesearch-false": [ + "CodeIgniter\\Database\\BaseBuilder::orLike" + ], + "notlikefield-match-side-both-escape-null-insensitivesearch-false": [ + "CodeIgniter\\Database\\BaseBuilder::notLike" + ], + "ornotlikefield-match-side-both-escape-null-insensitivesearch-false": [ + "CodeIgniter\\Database\\BaseBuilder::orNotLike" + ], + "havingkey-value-null-escape-null": [ + "CodeIgniter\\Database\\BaseBuilder::having" + ], + "orhavingkey-value-null-escape-null": [ + "CodeIgniter\\Database\\BaseBuilder::orHaving" + ], + "orhavinginkey-null-values-null-escape-null": [ + "CodeIgniter\\Database\\BaseBuilder::orHavingIn" + ], + "orhavingnotinkey-null-values-null-escape-null": [ + "CodeIgniter\\Database\\BaseBuilder::orHavingNotIn" + ], + "havinginkey-null-values-null-escape-null": [ + "CodeIgniter\\Database\\BaseBuilder::havingIn" + ], + "havingnotinkey-null-values-null-escape-null": [ + "CodeIgniter\\Database\\BaseBuilder::havingNotIn" + ], + "havinglikefield-match-side-both-escape-null-insensitivesearch-false": [ + "CodeIgniter\\Database\\BaseBuilder::havingLike" + ], + "orhavinglikefield-match-side-both-escape-null-insensitivesearch-false": [ + "CodeIgniter\\Database\\BaseBuilder::orHavingLike" + ], + "nothavinglikefield-match-side-both-escape-null-insensitivesearch-false": [ + "CodeIgniter\\Database\\BaseBuilder::notHavingLike" + ], + "ornothavinglikefield-match-side-both-escape-null-insensitivesearch-false": [ + "CodeIgniter\\Database\\BaseBuilder::orNotHavingLike" + ], + "havinggroupstart": [ + "CodeIgniter\\Database\\BaseBuilder::havingGroupStart" + ], + "orhavinggroupstart": [ + "CodeIgniter\\Database\\BaseBuilder::orHavingGroupStart" + ], + "nothavinggroupstart": [ + "CodeIgniter\\Database\\BaseBuilder::notHavingGroupStart" + ], + "ornothavinggroupstart": [ + "CodeIgniter\\Database\\BaseBuilder::orNotHavingGroupStart" + ], + "havinggroupend": [ + "CodeIgniter\\Database\\BaseBuilder::havingGroupEnd" + ], + "groupbyby-escape-null": [ + "CodeIgniter\\Database\\BaseBuilder::groupBy" + ], + "orderbyorderby-direction-escape-null": [ + "CodeIgniter\\Database\\BaseBuilder::orderBy" + ], + "limitvalue-offset-0": [ + "CodeIgniter\\Database\\BaseBuilder::limit" + ], + "offsetoffset": [ + "CodeIgniter\\Database\\BaseBuilder::offset" + ], + "unionunion": [ + "CodeIgniter\\Database\\BaseBuilder::union" + ], + "unionallunion": [ + "CodeIgniter\\Database\\BaseBuilder::unionAll" + ], + "setkey-value-escape-null": [ + "CodeIgniter\\Database\\BaseBuilder::set" + ], + "insertset-null-escape-null": [ + "CodeIgniter\\Database\\BaseBuilder::insert" + ], + "insertbatchset-null-escape-null-batch_size-100": [ + "CodeIgniter\\Database\\BaseBuilder::insertBatch" + ], + "setinsertbatchkey-value-escape-null": [ + "CodeIgniter\\Database\\BaseBuilder::setInsertBatch" + ], + "upsertset-null-escape-null": [ + "CodeIgniter\\Database\\BaseBuilder::upsert" + ], + "upsertbatchset-null-escape-null-batch_size-100": [ + "CodeIgniter\\Database\\BaseBuilder::upsertBatch" + ], + "updateset-null-where-null-limit-null": [ + "CodeIgniter\\Database\\BaseBuilder::update" + ], + "updatebatchset-null-constraints-null-batchsize-100": [ + "CodeIgniter\\Database\\BaseBuilder::updateBatch" + ], + "updatefieldsset-addtodefault-false-ignore-null": [ + "CodeIgniter\\Database\\BaseBuilder::updateFields" + ], + "onconstraintset": [ + "CodeIgniter\\Database\\BaseBuilder::onConstraint" + ], + "setdataset-escape-null-alias": [ + "CodeIgniter\\Database\\BaseBuilder::setData" + ], + "setupdatebatchkey-value-escape-null": [ + "CodeIgniter\\Database\\BaseBuilder::setUpdateBatch" + ], + "replaceset-null": [ + "CodeIgniter\\Database\\BaseBuilder::replace" + ], + "deletewhere-limit-null-reset_data-true": [ + "CodeIgniter\\Database\\BaseBuilder::delete" + ], + "deletebatchset-null-constraints-null-batchsize-100": [ + "CodeIgniter\\Database\\BaseBuilder::deleteBatch" + ], + "incrementcolumn-value-1": [ + "CodeIgniter\\Database\\BaseBuilder::increment" + ], + "decrementcolumn-value-1": [ + "CodeIgniter\\Database\\BaseBuilder::decrement" + ], + "truncate": [ + "CodeIgniter\\Database\\BaseBuilder::truncate" + ], + "emptytable": [ + "CodeIgniter\\Database\\BaseBuilder::emptyTable" + ], + "getcompiledselectreset-true": [ + "CodeIgniter\\Database\\BaseBuilder::getCompiledSelect" + ], + "getcompiledinsertreset-true": [ + "CodeIgniter\\Database\\BaseBuilder::getCompiledInsert" + ], + "getcompiledupdatereset-true": [ + "CodeIgniter\\Database\\BaseBuilder::getCompiledUpdate" + ], + "getcompileddeletereset-true": [ + "CodeIgniter\\Database\\BaseBuilder::getCompiledDelete" + ] + }, + "database/results.md": { + "codeigniterdatabase": [ + "namespace-CodeIgniter\\Database" + ], + "baseresult": [ + "CodeIgniter\\Database\\BaseResult" + ], + "getresulttype-object": [ + "CodeIgniter\\Database\\BaseResult::getResult" + ], + "getresultarray_1": [ + "CodeIgniter\\Database\\BaseResult::getResultArray" + ], + "getresultobject": [ + "CodeIgniter\\Database\\BaseResult::getResultObject" + ], + "getcustomresultobjectclassname": [ + "CodeIgniter\\Database\\BaseResult::getCustomResultObject" + ], + "getrown-0-type-object": [ + "CodeIgniter\\Database\\BaseResult::getRow" + ], + "getunbufferedrowtype-object": [ + "CodeIgniter\\Database\\BaseResult::getUnbufferedRow" + ], + "getrowarrayn-0": [ + "CodeIgniter\\Database\\BaseResult::getRowArray" + ], + "getrowobjectn-0": [ + "CodeIgniter\\Database\\BaseResult::getRowObject" + ], + "getcustomrowobjectn-classname": [ + "CodeIgniter\\Database\\BaseResult::getCustomRowObject" + ], + "dataseekn-0": [ + "CodeIgniter\\Database\\BaseResult::dataSeek" + ], + "setrowkey-value-null": [ + "CodeIgniter\\Database\\BaseResult::setRow" + ], + "getnextrowtype-object": [ + "CodeIgniter\\Database\\BaseResult::getNextRow" + ], + "getpreviousrowtype-object": [ + "CodeIgniter\\Database\\BaseResult::getPreviousRow" + ], + "getfirstrowtype-object": [ + "CodeIgniter\\Database\\BaseResult::getFirstRow" + ], + "getlastrowtype-object": [ + "CodeIgniter\\Database\\BaseResult::getLastRow" + ], + "getfieldcount_1": [ + "CodeIgniter\\Database\\BaseResult::getFieldCount" + ], + "getfieldnames_1": [ + "CodeIgniter\\Database\\BaseResult::getFieldNames" + ], + "getfielddata": [ + "CodeIgniter\\Database\\BaseResult::getFieldData" + ], + "getnumrows_1": [ + "CodeIgniter\\Database\\BaseResult::getNumRows" + ], + "freeresult_1": [ + "CodeIgniter\\Database\\BaseResult::freeResult" + ] + }, + "database/transactions.md": { + "codeigniters-approach-to-transactions": [ + "codeigniter-s-approach-to-transactions" + ], + "resetting-transaction-status": [ + "transactions-resetting-transaction-status" + ], + "managing-errors": [ + "transactions-managing-errors" + ], + "throwing-exceptions": [ + "transactions-throwing-exceptions" + ], + "running-transactions-manually": [ + "transactions-manual-transactions" + ] + }, + "dbmgmt/db_commands.md": { + "dbtable-show": [ + "db-table-show" + ], + "specify-the-database-group": [ + "db-command-specify-the-dbgroup" + ], + "dbtable-dbgroup": [ + "db-table-dbgroup" + ], + "dbtable": [ + "db-table" + ], + "dbtable-metadata": [ + "db-table-metadata" + ] + }, + "dbmgmt/forge.md": { + "forge-createdatabasedb_name": [ + "forge-createdatabase-db-name" + ], + "forge-dropdatabasedb_name": [ + "forge-dropdatabase-db-name" + ], + "raw-sql-strings-as-default-values": [ + "forge-addfield-default-value-rawsql" + ], + "forge-dropcolumn": [ + "db-forge-dropcolumn" + ], + "forge-modifycolumn": [ + "db-forge-modifycolumn" + ], + "adding-keys-to-a-table": [ + "db-forge-adding-keys-to-a-table" + ], + "codeigniterdatabase": [ + "namespace-CodeIgniter\\Database" + ], + "forge": [ + "CodeIgniter\\Database\\Forge" + ], + "addcolumntable-field": [ + "CodeIgniter\\Database\\Forge::addColumn" + ], + "addfieldfield": [ + "CodeIgniter\\Database\\Forge::addField" + ], + "addforeignkeyfieldname-tablename-tablefield-onupdate-ondelete-fkname": [ + "CodeIgniter\\Database\\Forge::addForeignKey" + ], + "addkeykey-primary-false-unique-false-keyname": [ + "CodeIgniter\\Database\\Forge::addKey" + ], + "addprimarykeykey-keyname": [ + "CodeIgniter\\Database\\Forge::addPrimaryKey" + ], + "adduniquekeykey-keyname": [ + "CodeIgniter\\Database\\Forge::addUniqueKey" + ], + "createdatabasedbname-ifnotexists-false": [ + "CodeIgniter\\Database\\Forge::createDatabase" + ], + "createtabletable-ifnotexists-false-array-attributes": [ + "CodeIgniter\\Database\\Forge::createTable" + ], + "dropcolumntable-columnnames": [ + "CodeIgniter\\Database\\Forge::dropColumn" + ], + "dropdatabasedbname": [ + "CodeIgniter\\Database\\Forge::dropDatabase" + ], + "dropkeytable-keyname-prefixkeyname-true": [ + "CodeIgniter\\Database\\Forge::dropKey" + ], + "dropprimarykeytable-keyname": [ + "CodeIgniter\\Database\\Forge::dropPrimaryKey" + ], + "droptabletablename-ifexists-false-cascade-false": [ + "CodeIgniter\\Database\\Forge::dropTable" + ], + "processindexestable": [ + "CodeIgniter\\Database\\Forge::processIndexes" + ], + "modifycolumntable-field": [ + "CodeIgniter\\Database\\Forge::modifyColumn" + ], + "renametabletablename-newtablename": [ + "CodeIgniter\\Database\\Forge::renameTable" + ] + }, + "dbmgmt/migration.md": { + "migraterollback": [ + "migrate-rollback" + ], + "migraterefresh": [ + "migrate-refresh" + ], + "migratestatus": [ + "migrate-status" + ], + "makemigration": [ + "make-migration" + ], + "codeigniterdatabase": [ + "namespace-CodeIgniter\\Database" + ], + "migrationrunner": [ + "CodeIgniter\\Database\\MigrationRunner" + ], + "findmigrations": [ + "CodeIgniter\\Database\\MigrationRunner::findMigrations" + ], + "latestgroup": [ + "CodeIgniter\\Database\\MigrationRunner::latest" + ], + "regresstargetbatch-group": [ + "CodeIgniter\\Database\\MigrationRunner::regress" + ], + "forcepath-namespace-group": [ + "CodeIgniter\\Database\\MigrationRunner::force" + ], + "setnamespacenamespace": [ + "CodeIgniter\\Database\\MigrationRunner::setNamespace" + ], + "setgroupgroup": [ + "CodeIgniter\\Database\\MigrationRunner::setGroup" + ] + }, + "extending/composer_packages.md": { + "creating-composerjson": [ + "creating-composer-json" + ], + "overriding-settings-in-appconfig": [ + "overriding-settings-in-app-config" + ] + }, + "extending/events.md": { + "for-cli-apps": [ + "event-points-for-cli-apps" + ] + }, + "general/ajax.md": { + "vuejs": [ + "vue-js" + ] + }, + "general/caching.md": { + "setting-cachestatuscodes": [ + "web-page-caching-cache-status-codes" + ] + }, + "general/common_functions.md": { + "cachekey": [ + "cache" + ], + "configstring-name-bool-getshared-true": [ + "config" + ], + "cookiestring-name-string-value-array-options": [ + "cookie" + ], + "cookiesarray-cookies-bool-getglobal-true": [ + "cookies" + ], + "envkey-default-null": [ + "env" + ], + "escdata-context-html-encoding": [ + "esc" + ], + "helperfilename": [ + "helper" + ], + "langline-args-locale": [ + "lang" + ], + "modelname-getshared-true-conn-null": [ + "model" + ], + "oldkey-default-null-escape-html": [ + "old" + ], + "sessionkey": [ + "session" + ], + "timername": [ + "timer" + ], + "viewname-data-options": [ + "view" + ], + "view_celllibrary-params-null-ttl-0-cachename-null": [ + "view_cell" + ], + "force_httpsduration-31536000-request-null-response-null": [ + "force_https" + ], + "function_usablefunctionname": [ + "function_usable" + ], + "is_really_writablefile": [ + "is_really_writable" + ], + "is_windowsmock-null": [ + "is_windows" + ], + "log_messagelevel-message-context": [ + "log_message" + ], + "redirectstring-route": [ + "redirect" + ], + "remove_invisible_charactersstr-urlencoded-true": [ + "remove_invisible_characters" + ], + "route_tomethod-params": [ + "route_to" + ], + "servicename-params": [ + "service" + ], + "single_servicename-params": [ + "single_service" + ], + "slash_item-item": [ + "slash_item" + ], + "stringify_attributesattributes-js": [ + "stringify_attributes" + ], + "apppath": [ + "APPPATH" + ], + "rootpath": [ + "ROOTPATH" + ], + "systempath": [ + "SYSTEMPATH" + ], + "fcpath": [ + "FCPATH" + ], + "writepath": [ + "WRITEPATH" + ], + "second": [ + "SECOND" + ], + "minute": [ + "MINUTE" + ], + "hour": [ + "HOUR" + ], + "day": [ + "DAY" + ], + "week": [ + "WEEK" + ], + "month": [ + "MONTH" + ], + "year": [ + "YEAR" + ], + "decade": [ + "DECADE" + ] + }, + "general/configuration.md": { + "config": [ + "configuration-config" + ], + "namespace-separator": [ + "env-var-namespace-separator" + ], + "environment-variables-as-replacements-for-data": [ + "env-var-replacements-for-data" + ], + "configcheck": [ + "spark-config-check", + "config-check" + ] + }, + "general/environments.md": { + "the-environment-constant": [ + "environment-constant" + ], + "apache": [ + "environment-apache" + ], + "nginx": [ + "environment-nginx" + ] + }, + "general/errors.md": { + "specify-http-status-code-in-your-exception": [ + "error-specify-http-status-code" + ], + "specify-exit-code-in-your-exception": [ + "error-specify-exit-code" + ] + }, + "general/helpers.md": { + "loading-from-specified-namespace": [ + "helpers-loading-from-specified-namespace" + ] + }, + "general/logging.md": { + "configuration": [ + "logging-configuration" + ] + }, + "general/managing_apps.md": { + "renaming-or-relocating-the-application-directory": [ + "renaming-app-directory" + ], + "running-multiple-applications-with-one-codeigniter-installation": [ + "running-multiple-app" + ] + }, + "general/modules.md": { + "enabledisable-discovery": [ + "enable-disable-discovery" + ], + "specify-composer-packages": [ + "modules-specify-composer-packages" + ], + "filters": [ + "modules-filters" + ] + }, + "general/urls.md": { + "url-structure": [ + "urls-url-structure" + ], + "uri-security": [ + "urls-uri-security" + ], + "removing-the-indexphp-file": [ + "urls-remove-index-php", + "removing-the-index-php-file" + ], + "apache-web-server": [ + "urls-remove-index-php-apache" + ], + "nginx": [ + "urls-remove-index-php-nginx" + ] + }, + "guides/api/controller.md": { + "building-a-restful-controller": [ + "ci47-rest-part4" + ] + }, + "guides/api/database-setup.md": { + "creating-the-database-and-model": [ + "ci47-rest-part3" + ] + }, + "guides/api/first-endpoint.md": { + "auto-routing-your-first-endpoint": [ + "ci47-rest-part2" + ] + }, + "guides/api/index.md": { + "getting-started-with-rest-apis": [ + "ci47-rest-part1" + ], + "whats-next": [ + "what-s-next" + ] + }, + "guides/first-app/create_news_items.md": { + "create-newscreate-view-file": [ + "create-news-create-view-file" + ], + "add-newsnew-to-display-the-form": [ + "add-news-new-to-display-the-form" + ], + "add-newscreate-to-create-a-news-item": [ + "add-news-create-to-create-a-news-item" + ] + }, + "guides/first-app/news_section.md": { + "add-newsmodelgetnews-method": [ + "add-newsmodel-getnews-method" + ], + "complete-newsindex-method": [ + "complete-news-index-method" + ], + "create-newsindex-view-file": [ + "create-news-index-view-file" + ], + "complete-newsshow-method": [ + "complete-news-show-method" + ], + "create-newsview-view-file": [ + "create-news-view-view-file" + ] + }, + "guides/first-app/static_pages.md": { + "lets-make-our-first-controller": [ + "let-s-make-our-first-controller" + ], + "create-homephp-and-aboutphp": [ + "create-home-php-and-about-php" + ], + "complete-pagesview-method": [ + "complete-pages-view-method" + ] + }, + "helpers/array_helper.md": { + "dot_array_searchstring-search-array-values": [ + "dot_array_search" + ], + "array_deep_searchkey-array-array": [ + "array_deep_search" + ], + "array_sort_by_multiple_keysarray-array-array-sortcolumns": [ + "array_sort_by_multiple_keys" + ], + "array_flatten_with_dotsiterable-array-string-id-array": [ + "array_flatten_with_dots" + ], + "array_group_byarray-array-array-indexes-bool-includeempty-false-array": [ + "array_group_by" + ] + }, + "helpers/cookie_helper.md": { + "set_cookiename-value-expire-0-domain-path-prefix-secure-false-httponly-false-samesite": [ + "set_cookie" + ], + "get_cookieindex-xssclean-false-prefix": [ + "get_cookie" + ], + "delete_cookiename-domain-path-prefix": [ + "delete_cookie" + ], + "has_cookiestring-name-string-value-null-string-prefix": [ + "has_cookie" + ] + }, + "helpers/date_helper.md": { + "nowtimezone-null": [ + "now" + ], + "timezone_selectclass-default-what-datetimezoneall-country-null": [ + "timezone_select" + ] + }, + "helpers/filesystem_helper.md": { + "directory_mapsourcedir-directorydepth-0-hidden-false": [ + "directory_map" + ], + "directory_mirrororiginal-target-overwrite-true": [ + "directory_mirror" + ], + "write_filepath-data-mode-wb": [ + "write_file" + ], + "delete_filespath-deldir-false-htdocs-false-hidden-false": [ + "delete_files" + ], + "get_filenamessourcedir-includepath-false-hidden-false-includedir-true": [ + "get_filenames" + ], + "get_dir_file_infosourcedir-toplevelonly-true": [ + "get_dir_file_info" + ], + "get_file_infofile-returnedvalues-name-server_path-size-date": [ + "get_file_info" + ], + "symbolic_permissionsperms": [ + "symbolic_permissions" + ], + "octal_permissionsperms": [ + "octal_permissions" + ], + "same_filefile1-file2": [ + "same_file" + ], + "set_realpathpath-checkexistence-false": [ + "set_realpath" + ] + }, + "helpers/form_helper.md": { + "form_openaction-attributes-hidden": [ + "form_open" + ], + "form_open_multipartaction-attributes-hidden": [ + "form_open_multipart" + ], + "form_hiddenname-value": [ + "form_hidden" + ], + "form_inputdata-value-extra-type-text": [ + "form_input" + ], + "form_passworddata-value-extra": [ + "form_password" + ], + "form_uploaddata-value-extra": [ + "form_upload" + ], + "form_textareadata-value-extra": [ + "form_textarea" + ], + "form_dropdownname-options-selected-extra": [ + "form_dropdown" + ], + "form_multiselectname-options-selected-extra": [ + "form_multiselect" + ], + "form_fieldsetlegend_text-attributes": [ + "form_fieldset" + ], + "form_fieldset_closeextra": [ + "form_fieldset_close" + ], + "form_checkboxdata-value-checked-false-extra": [ + "form_checkbox" + ], + "form_radiodata-value-checked-false-extra": [ + "form_radio" + ], + "form_labellabel_text-id-attributes": [ + "form_label" + ], + "form_submitdata-value-extra": [ + "form_submit" + ], + "form_resetdata-value-extra": [ + "form_reset" + ], + "form_buttondata-content-extra": [ + "form_button" + ], + "form_closeextra": [ + "form_close" + ], + "set_valuefield-default-html_escape-true": [ + "set_value" + ], + "set_selectfield-value-default-false": [ + "set_select" + ], + "set_checkboxfield-value-default-false": [ + "set_checkbox" + ], + "set_radiofield-value-default-false": [ + "set_radio" + ], + "validation_list_errorstemplate-list": [ + "validation_list_errors" + ], + "validation_show_errorfield-template-single": [ + "validation_show_error" + ] + }, + "helpers/html_helper.md": { + "imgsrc-indexpage-false-attributes": [ + "img" + ], + "img_datapath-mime-null": [ + "img_data" + ], + "link_taghref-rel-stylesheet-type-textcss-title-media-indexpage-false-hreflang": [ + "link_tag" + ], + "script_tagsrc-indexpage-false": [ + "script_tag" + ], + "ullist-attributes": [ + "ul" + ], + "ollist-attributes": [ + "ol" + ], + "videosrc-unsupportedmessage-attributes-tracks-indexpage-false": [ + "video" + ], + "audiosrc-unsupportedmessage-attributes-tracks-indexpage-false": [ + "audio" + ], + "sourcesrc-type-unknown-attributes-indexpage-false": [ + "source" + ], + "embedsrc-type-unknown-attributes-indexpage-false": [ + "embed" + ], + "objectdata-type-unknown-attributes-params-indexpage-false": [ + "object" + ], + "paramname-value-type-ref-attributes": [ + "param" + ], + "tracksrc-kind-srclanguage-label": [ + "track" + ], + "doctypetype-html5": [ + "doctype" + ] + }, + "helpers/inflector_helper.md": { + "singularstring": [ + "singular" + ], + "pluralstring": [ + "plural" + ], + "countedcount-string": [ + "counted" + ], + "camelizestring": [ + "camelize" + ], + "pascalizestring": [ + "pascalize" + ], + "underscorestring": [ + "underscore" + ], + "decamelizestring": [ + "decamelize" + ], + "humanizestring-separator-_": [ + "humanize" + ], + "is_pluralizableword": [ + "is_pluralizable" + ], + "dasherizestring": [ + "dasherize" + ], + "ordinalinteger": [ + "ordinal" + ], + "ordinalizeinteger": [ + "ordinalize" + ] + }, + "helpers/number_helper.md": { + "number_to_sizenum-precision-1-locale-null": [ + "number_to_size" + ], + "number_to_amountnum-precision-0-locale-null": [ + "number_to_amount" + ], + "number_to_currencynum-currency-locale-null-fraction-0": [ + "number_to_currency" + ], + "number_to_romannum": [ + "number_to_roman" + ] + }, + "helpers/security_helper.md": { + "sanitize_filenamefilename-relativepath-false": [ + "sanitize_filename" + ], + "strip_image_tagsstr": [ + "strip_image_tags" + ], + "encode_php_tagsstr": [ + "encode_php_tags" + ] + }, + "helpers/test_helper.md": { + "fakemodel-array-overrides-null-persist-true": [ + "fake" + ] + }, + "helpers/text_helper.md": { + "random_stringtype-alnum-len-8": [ + "random_string" + ], + "increment_stringstr-separator-_-first-1": [ + "increment_string" + ], + "alternatorargs": [ + "alternator" + ], + "reduce_double_slashesstr": [ + "reduce_double_slashes" + ], + "strip_slashesdata": [ + "strip_slashes" + ], + "reduce_multiplesstr-character-trim-false": [ + "reduce_multiples" + ], + "quotes_to_entitiesstr": [ + "quotes_to_entities" + ], + "strip_quotesstr": [ + "strip_quotes" + ], + "word_limiterstr-limit-100-endchar-8230": [ + "word_limiter" + ], + "character_limiterstring-limit-500-endchar-8230": [ + "character_limiter" + ], + "ascii_to_entitiesstr": [ + "ascii_to_entities" + ], + "entities_to_asciistr-all-true": [ + "entities_to_ascii" + ], + "convert_accented_charactersstr": [ + "convert_accented_characters" + ], + "word_censorstr-censored-replacement": [ + "word_censor" + ], + "highlight_codestr": [ + "highlight_code" + ], + "highlight_phrasestr-phrase-tag_open-mark-tag_close-mark": [ + "highlight_phrase" + ], + "word_wrapstr-charlim-76": [ + "word_wrap" + ], + "ellipsizestr-max_length-position-1-ellipsis-hellip": [ + "ellipsize" + ], + "excerpttext-phrase-false-radius-100-ellipsis": [ + "excerpt" + ] + }, + "helpers/url_helper.md": { + "site_urluri-protocol-null-altconfig-null": [ + "site_url" + ], + "base_urluri-protocol-null": [ + "base_url" + ], + "current_urlreturnobject-false-request-null": [ + "current_url" + ], + "previous_urlreturnobject-false": [ + "previous_url" + ], + "index_pagealtconfig-null": [ + "index_page" + ], + "anchoruri-title-attributes-altconfig-null": [ + "anchor" + ], + "anchor_popupuri-title-attributes-false-altconfig-null": [ + "anchor_popup" + ], + "mailtoemail-title-attributes": [ + "mailto" + ], + "safe_mailtoemail-title-attributes": [ + "safe_mailto" + ], + "auto_linkstr-type-both-popup-false": [ + "auto_link" + ], + "url_titlestr-separator-lowercase-false": [ + "url_title" + ], + "mb_url_titlestr-separator-lowercase-false": [ + "mb_url_title" + ], + "parse_subdomainhost-null": [ + "parse_subdomain" + ], + "prep_urlstr-secure-false": [ + "prep_url" + ], + "url_tocontroller-args": [ + "url_to" + ], + "url_ispath": [ + "url_is" + ] + }, + "helpers/xml_helper.md": { + "xml_convertstr-protect_all-false": [ + "xml_convert" + ] + }, + "incoming/auto_routing_improved.md": { + "enable-auto-routing-improved": [ + "enabled-auto-routing-improved" + ], + "lets-try-it-hello-world": [ + "let-s-try-it-hello-world" + ], + "default-method-fallback": [ + "auto-routing-improved-default-method-fallback" + ], + "examples-of-controllermethods-and-uris": [ + "examples-of-controller-methods-and-uris" + ], + "configuration-options": [ + "routing-auto-routing-improved-configuration-options" + ], + "default-method_1": [ + "routing-auto-routing-improved-default-method" + ], + "module-routing": [ + "auto-routing-improved-module-routing" + ] + }, + "incoming/controller_attributes.md": { + "controller-attributes": [ + "incoming-controller-attributes" + ] + }, + "incoming/controllers.md": { + "constructor": [ + "controller-constructor" + ], + "helpers": [ + "controllers-helpers" + ], + "validating-data": [ + "controllers-validating-data" + ], + "this-validatedata": [ + "controller-validatedata" + ], + "this-validate": [ + "controller-validate" + ], + "auto-routing-improved": [ + "controller-auto-routing-improved" + ], + "auto-routing-legacy": [ + "controller-auto-routing-legacy" + ], + "lets-try-it-hello-world-legacy": [ + "let-s-try-it-hello-world-legacy" + ], + "thats-it": [ + "that-s-it" + ] + }, + "incoming/filters.md": { + "appconfigfiltersphp": [ + "app-config-filters-php" + ], + "aliases": [ + "filters-aliases" + ], + "required": [ + "filters-required" + ], + "globals": [ + "filters-globals" + ], + "filter-arguments": [ + "filters-filters-filter-arguments" + ], + "filtercheck": [ + "spark-filter-check", + "filter-check" + ] + }, + "incoming/incomingrequest.md": { + "is": [ + "incomingrequest-is" + ], + "getting-data": [ + "incomingrequest-getting-data" + ], + "getting-json-data": [ + "incomingrequest-getting-json-data" + ], + "retrieving-raw-data-put-patch-delete": [ + "incomingrequest-retrieving-raw-data" + ], + "filtering-input-data": [ + "incomingrequest-filtering-input-data" + ], + "codeigniterhttp": [ + "namespace-CodeIgniter\\HTTP" + ], + "incomingrequest": [ + "CodeIgniter\\HTTP\\IncomingRequest" + ], + "iscli": [ + "CodeIgniter\\HTTP\\IncomingRequest::isCLI" + ], + "isajax": [ + "CodeIgniter\\HTTP\\IncomingRequest::isAJAX" + ], + "issecure": [ + "CodeIgniter\\HTTP\\IncomingRequest::isSecure" + ], + "getvarindex-null-filter-null-flags-null": [ + "CodeIgniter\\HTTP\\IncomingRequest::getVar" + ], + "getgetindex-null-filter-null-flags-null": [ + "CodeIgniter\\HTTP\\IncomingRequest::getGet" + ], + "getpostindex-null-filter-null-flags-null": [ + "CodeIgniter\\HTTP\\IncomingRequest::getPost" + ], + "getpostgetindex-null-filter-null-flags-null": [ + "CodeIgniter\\HTTP\\IncomingRequest::getPostGet" + ], + "getgetpostindex-null-filter-null-flags-null": [ + "CodeIgniter\\HTTP\\IncomingRequest::getGetPost" + ], + "getcookieindex-null-filter-null-flags-null": [ + "CodeIgniter\\HTTP\\IncomingRequest::getCookie" + ], + "getserverindex-null-filter-null-flags-null": [ + "CodeIgniter\\HTTP\\IncomingRequest::getServer" + ], + "getuseragent": [ + "CodeIgniter\\HTTP\\IncomingRequest::getUserAgent" + ], + "getpath": [ + "CodeIgniter\\HTTP\\IncomingRequest::getPath" + ] + }, + "incoming/message.md": { + "codeigniterhttp": [ + "namespace-CodeIgniter\\HTTP" + ], + "message": [ + "CodeIgniter\\HTTP\\Message" + ], + "getbody": [ + "CodeIgniter\\HTTP\\Message::getBody" + ], + "setbodydata": [ + "CodeIgniter\\HTTP\\Message::setBody" + ], + "appendbodydata": [ + "CodeIgniter\\HTTP\\Message::appendBody" + ], + "populateheaders": [ + "CodeIgniter\\HTTP\\Message::populateHeaders" + ], + "headers": [ + "CodeIgniter\\HTTP\\Message::headers" + ], + "headername": [ + "CodeIgniter\\HTTP\\Message::header" + ], + "hasheadername": [ + "CodeIgniter\\HTTP\\Message::hasHeader" + ], + "getheaderlinename": [ + "CodeIgniter\\HTTP\\Message::getHeaderLine" + ], + "setheadername-value": [ + "CodeIgniter\\HTTP\\Message::setHeader" + ], + "removeheadername": [ + "CodeIgniter\\HTTP\\Message::removeHeader" + ], + "appendheadername-value": [ + "CodeIgniter\\HTTP\\Message::appendHeader" + ], + "prependheadername-value": [ + "CodeIgniter\\HTTP\\Message::prependHeader" + ], + "addheadername-value": [ + "CodeIgniter\\HTTP\\Message::addHeader" + ], + "getprotocolversion": [ + "CodeIgniter\\HTTP\\Message::getProtocolVersion" + ], + "setprotocolversionversion": [ + "CodeIgniter\\HTTP\\Message::setProtocolVersion" + ] + }, + "incoming/request.md": { + "codeigniterhttp": [ + "namespace-CodeIgniter\\HTTP" + ], + "request": [ + "CodeIgniter\\HTTP\\Request" + ], + "getipaddress": [ + "CodeIgniter\\HTTP\\Request::getIPAddress" + ], + "isvalidipip-which": [ + "CodeIgniter\\HTTP\\Request::isValidIP" + ], + "getmethod": [ + "CodeIgniter\\HTTP\\Request::getMethod" + ], + "setmethodmethod": [ + "CodeIgniter\\HTTP\\Request::setMethod" + ], + "withmethodmethod": [ + "CodeIgniter\\HTTP\\Request::withMethod" + ], + "getserverindex-null-filter-null-flags-null": [ + "CodeIgniter\\HTTP\\Request::getServer" + ], + "getenvindex-null-filter-null-flags-null": [ + "CodeIgniter\\HTTP\\Request::getEnv" + ], + "setglobalmethod-value": [ + "CodeIgniter\\HTTP\\Request::setGlobal" + ], + "fetchglobalmethod-index-null-filter-null-flags-null": [ + "CodeIgniter\\HTTP\\Request::fetchGlobal" + ] + }, + "incoming/restful.md": { + "presentercontroller-comparison": [ + "presenter-controller-comparison" + ] + }, + "incoming/routing.md": { + "setting-routing-rules": [ + "defined-route-routing" + ], + "http-verb-routes": [ + "routing-http-verb-routes" + ], + "controllers-namespace": [ + "controller-s-namespace" + ], + "the-behavior-of-any": [ + "routing-placeholder-any" + ], + "named-routes": [ + "using-named-routes" + ], + "nesting-groups": [ + "routing-nesting-groups" + ], + "route-priority": [ + "routing-priority" + ], + "default-namespace": [ + "routing-default-namespace" + ], + "default-method": [ + "routing-default-method" + ], + "404-override": [ + "override" + ], + "configuration-options-legacy": [ + "routing-auto-routing-legacy-configuration-options" + ], + "default-method-legacy": [ + "routing-auto-routing-legacy-default-method" + ], + "spark-routes": [ + "routing-spark-routes" + ], + "sort-by-handler": [ + "routing-spark-routes-sort-by-handler" + ], + "specify-host": [ + "routing-spark-routes-specify-host" + ], + "retrieving-the-current-controllermethod-names": [ + "retrieving-the-current-controller-method-names" + ] + }, + "installation/installing_composer.md": { + "upgrading": [ + "app-starter-upgrading" + ], + "latest-dev": [ + "switch-to-dev-version" + ], + "upgrading_1": [ + "adding-codeigniter4-upgrading" + ] + }, + "installation/installing_manual.md": { + "upgrading": [ + "installing-manual-upgrading" + ] + }, + "installation/running.md": { + "checking-php-ini-settings": [ + "spark-phpini-check" + ], + "enabling-mod_rewrite": [ + "enabling-mod-rewrite" + ], + "enabling-vhost_alias_module": [ + "enabling-vhost-alias-module" + ], + "hosting-with-mod_userdir-shared-hosts": [ + "hosting-with-mod-userdir-shared-hosts" + ], + "removing-the-indexphp": [ + "removing-the-index-php" + ], + "defaultconf": [ + "default-conf" + ] + }, + "installation/troubleshooting.md": { + "i-have-to-include-indexphp-in-my-url": [ + "i-have-to-include-index-php-in-my-url" + ], + "whats-with-an-unhelpful-whoops-page": [ + "what-s-with-an-unhelpful-whoops-page" + ] + }, + "installation/upgrade_404.md": { + "upgrading-from-40x-to-404": [ + "upgrading-from-4-0-x-to-4-0-4" + ] + }, + "installation/upgrade_405.md": { + "upgrading-from-404-to-405": [ + "upgrading-from-4-0-4-to-4-0-5" + ], + "messagegetheaders": [ + "message-getheader-s" + ], + "configservices": [ + "config-services" + ] + }, + "installation/upgrade_410.md": { + "upgrading-from-405-to-410-or-411": [ + "upgrading-from-4-0-5-to-4-1-0-or-4-1-1" + ] + }, + "installation/upgrade_412.md": { + "upgrading-from-411-to-412": [ + "upgrading-from-4-1-1-to-4-1-2" + ], + "current_url-and-indexpage": [ + "current-url-and-indexpage" + ], + "baseconnectionquery-return-values": [ + "baseconnection-query-return-values" + ], + "connectioninterfaceiswritetype-declaration-added": [ + "connectioninterface-iswritetype-declaration-added" + ] + }, + "installation/upgrade_413.md": { + "upgrading-from-412-to-413": [ + "upgrading-from-4-1-2-to-4-1-3" + ] + }, + "installation/upgrade_414.md": { + "upgrading-from-413-to-414": [ + "upgrading-from-4-1-3-to-4-1-4" + ] + }, + "installation/upgrade_415.md": { + "upgrading-from-414-to-415": [ + "upgrading-from-4-1-4-to-4-1-5" + ], + "session-databasehandlers-database-table-change": [ + "session-databasehandler-s-database-table-change" + ], + "multiple-filters-for-a-route": [ + "upgrade-415-multiple-filters-for-a-route" + ] + }, + "installation/upgrade_416.md": { + "upgrading-from-415-to-416": [ + "upgrading-from-4-1-5-to-4-1-6" + ] + }, + "installation/upgrade_417.md": { + "upgrading-from-416-to-417": [ + "upgrading-from-4-1-6-to-4-1-7" + ] + }, + "installation/upgrade_418.md": { + "upgrading-from-417-to-418": [ + "upgrading-from-4-1-7-to-4-1-8" + ] + }, + "installation/upgrade_420.md": { + "upgrading-from-419-to-420": [ + "upgrading-from-4-1-9-to-4-2-0" + ], + "indexphp-and-spark": [ + "index-php-and-spark" + ], + "configconstantsphp": [ + "config-constants-php" + ], + "composerjson": [ + "composer-json" + ] + }, + "installation/upgrade_421.md": { + "upgrading-from-420-to-421": [ + "upgrading-from-4-2-0-to-4-2-1" + ], + "appconfigmimesphp": [ + "app-config-mimes-php" + ], + "get_cookie": [ + "upgrade-421-get-cookie", + "get-cookie" + ] + }, + "installation/upgrade_4210.md": { + "upgrading-from-429-to-4210": [ + "upgrading-from-4-2-9-to-4-2-10" + ] + }, + "installation/upgrade_4211.md": { + "upgrading-from-4210-to-4211": [ + "upgrading-from-4-2-10-to-4-2-11" + ], + "configappproxyips": [ + "upgrade-4211-proxyips", + "config-app-proxyips" + ], + "session-handler-key-changes": [ + "upgrade-4211-session-key" + ] + }, + "installation/upgrade_4212.md": { + "upgrading-from-4211-to-4212": [ + "upgrading-from-4-2-11-to-4-2-12" + ] + }, + "installation/upgrade_422.md": { + "upgrading-from-421-to-422": [ + "upgrading-from-4-2-1-to-4-2-2" + ] + }, + "installation/upgrade_423.md": { + "upgrading-from-422-to-423": [ + "upgrading-from-4-2-2-to-4-2-3" + ] + }, + "installation/upgrade_425.md": { + "upgrading-from-423-to-425": [ + "upgrading-from-4-2-3-to-4-2-5" + ] + }, + "installation/upgrade_426.md": { + "upgrading-from-425-to-426": [ + "upgrading-from-4-2-5-to-4-2-6" + ] + }, + "installation/upgrade_427.md": { + "upgrading-from-426-to-427": [ + "upgrading-from-4-2-6-to-4-2-7" + ], + "set_cookie": [ + "set-cookie" + ] + }, + "installation/upgrade_428.md": { + "upgrading-from-427-to-428": [ + "upgrading-from-4-2-7-to-4-2-8" + ] + }, + "installation/upgrade_430.md": { + "upgrading-from-4212-to-430": [ + "upgrading-from-4-2-12-to-4-3-0" + ], + "appconfigkintphp": [ + "app-config-kint-php" + ], + "appconfigexceptionsphp": [ + "app-config-exceptions-php" + ], + "composerjson": [ + "composer-json" + ], + "capturing-stderr-and-stdout-streams-in-tests": [ + "upgrade-430-stream-filter" + ], + "honeypot-and-csp": [ + "upgrade-430-honeypot-and-csp" + ], + "config": [ + "upgrade-430-config" + ] + }, + "installation/upgrade_431.md": { + "upgrading-from-430-to-431": [ + "upgrading-from-4-3-0-to-4-3-1" + ], + "appconfigemailphp": [ + "app-config-email-php" + ], + "appconfigexceptionsphp": [ + "app-config-exceptions-php" + ] + }, + "installation/upgrade_432.md": { + "upgrading-from-431-to-432": [ + "upgrading-from-4-3-1-to-4-3-2" + ], + "base_url": [ + "base-url" + ], + "uri_string": [ + "upgrade-432-uri-string", + "uri-string" + ], + "composerjson": [ + "composer-json" + ] + }, + "installation/upgrade_433.md": { + "upgrading-from-432-to-433": [ + "upgrading-from-4-3-2-to-4-3-3" + ] + }, + "installation/upgrade_434.md": { + "upgrading-from-433-to-434": [ + "upgrading-from-4-3-3-to-4-3-4" + ], + "forgemodifycolumn-and-null": [ + "forge-modifycolumn-and-null" + ] + }, + "installation/upgrade_435.md": { + "upgrading-from-434-to-435": [ + "upgrading-from-4-3-4-to-4-3-5" + ], + "sessionstop": [ + "session-stop" + ] + }, + "installation/upgrade_436.md": { + "upgrading-from-435-to-436": [ + "upgrading-from-4-3-5-to-4-3-6" + ] + }, + "installation/upgrade_437.md": { + "upgrading-from-436-to-437": [ + "upgrading-from-4-3-6-to-4-3-7" + ], + "feature-testing-request-body": [ + "upgrade-437-feature-testing" + ], + "return-value-of-validationloadrulegroup": [ + "return-value-of-validation-loadrulegroup" + ] + }, + "installation/upgrade_438.md": { + "upgrading-from-437-to-438": [ + "upgrading-from-4-3-7-to-4-3-8" + ] + }, + "installation/upgrade_440.md": { + "upgrading-from-438-to-440": [ + "upgrading-from-4-3-8-to-4-4-0" + ], + "urisetsegment-change": [ + "upgrade-440-uri-setsegment", + "uri-setsegment-change" + ], + "routecollectionroutes": [ + "routecollection-routes" + ], + "indexphp-and-spark": [ + "index-php-and-spark" + ], + "appconfigappphp": [ + "app-config-app-php" + ], + "appconfigroutingphp": [ + "upgrade-440-config-routing", + "app-config-routing-php" + ], + "appconfigtoolbarphp": [ + "app-config-toolbar-php" + ], + "appconfigeventsphp": [ + "app-config-events-php" + ], + "appconfigcookiephp": [ + "app-config-cookie-php" + ], + "appconfigsecurityphp": [ + "app-config-security-php" + ], + "appconfigsessionphp": [ + "app-config-session-php" + ] + }, + "installation/upgrade_441.md": { + "upgrading-from-440-to-441": [ + "upgrading-from-4-4-0-to-4-4-1" + ] + }, + "installation/upgrade_442.md": { + "upgrading-from-441-to-442": [ + "upgrading-from-4-4-1-to-4-4-2" + ] + }, + "installation/upgrade_443.md": { + "upgrading-from-442-to-443": [ + "upgrading-from-4-4-2-to-4-4-3" + ], + "error_exceptionphp": [ + "error-exception-php" + ] + }, + "installation/upgrade_444.md": { + "upgrading-from-443-to-444": [ + "upgrading-from-4-4-3-to-4-4-4" + ], + "validation-with-dot-array-syntax": [ + "upgrade-444-validation-with-dot-array-syntax" + ], + "the-use-of-the-ssl_key-option-in-curlrequest-was-removed": [ + "the-use-of-the-ssl-key-option-in-curlrequest-was-removed" + ] + }, + "installation/upgrade_445.md": { + "upgrading-from-444-to-445": [ + "upgrading-from-4-4-4-to-4-4-5" + ] + }, + "installation/upgrade_446.md": { + "upgrading-from-445-to-446": [ + "upgrading-from-4-4-5-to-4-4-6" + ], + "timecreatefromtimestamp-timezone-change": [ + "time-createfromtimestamp-timezone-change" + ] + }, + "installation/upgrade_447.md": { + "upgrading-from-446-to-447": [ + "upgrading-from-4-4-6-to-4-4-7" + ], + "paths-in-controller-filters": [ + "upgrade-447-filter-paths" + ], + "timedifference-and-dst": [ + "time-difference-and-dst" + ] + }, + "installation/upgrade_448.md": { + "upgrading-from-447-to-448": [ + "upgrading-from-4-4-7-to-4-4-8" + ] + }, + "installation/upgrade_450.md": { + "upgrading-from-448-to-450": [ + "upgrading-from-4-4-8-to-4-5-0" + ], + "indexphp-and-spark": [ + "index-php-and-spark" + ], + "lowercase-http-method-name": [ + "upgrade-450-lowercase-http-method-name" + ], + "requestgetmethod": [ + "request-getmethod" + ], + "appconfigfiltersphp": [ + "app-config-filters-php" + ], + "curlrequestrequest": [ + "curlrequest-request" + ], + "nested-route-groups-and-options": [ + "upgrade-450-nested-route-groups-and-options" + ], + "filter-execution-order": [ + "upgrade-450-filter-execution-order" + ], + "apiresponsetrait-and-string-data": [ + "upgrade-450-api-response-trait", + "api-responsetrait-and-string-data" + ], + "filelocatorfindqualifiednamefrompath": [ + "filelocator-findqualifiednamefrompath" + ], + "basemodelgetidvalue": [ + "basemodel-getidvalue" + ], + "404-override-status-code": [ + "upgrade-450-404-override", + "override-status-code" + ], + "validationrun-signature": [ + "validation-run-signature" + ], + "appconfigfiltersphp_1": [ + "app-config-filters-php" + ] + }, + "installation/upgrade_451.md": { + "upgrading-from-450-to-451": [ + "upgrading-from-4-5-0-to-4-5-1" + ] + }, + "installation/upgrade_452.md": { + "upgrading-from-451-to-452": [ + "upgrading-from-4-5-1-to-4-5-2" + ] + }, + "installation/upgrade_453.md": { + "upgrading-from-452-to-453": [ + "upgrading-from-4-5-2-to-4-5-3" + ] + }, + "installation/upgrade_454.md": { + "upgrading-from-453-to-454": [ + "upgrading-from-4-5-3-to-4-5-4" + ] + }, + "installation/upgrade_455.md": { + "upgrading-from-454-to-455": [ + "upgrading-from-4-5-4-to-4-5-5" + ] + }, + "installation/upgrade_456.md": { + "upgrading-from-455-to-456": [ + "upgrading-from-4-5-5-to-4-5-6" + ] + }, + "installation/upgrade_457.md": { + "upgrading-from-456-to-457": [ + "upgrading-from-4-5-6-to-4-5-7" + ] + }, + "installation/upgrade_458.md": { + "upgrading-from-457-to-458": [ + "upgrading-from-4-5-7-to-4-5-8" + ] + }, + "installation/upgrade_460.md": { + "upgrading-from-458-to-460": [ + "upgrading-from-4-5-8-to-4-6-0" + ], + "timecreatefromtimestamp-timezone-change": [ + "upgrade-460-time-create-from-timestamp", + "time-createfromtimestamp-timezone-change" + ], + "time-keeps-microseconds": [ + "upgrade-460-time-keeps-microseconds" + ], + "timesettimestamp-behavior-fix": [ + "upgrade-460-time-set-timestamp", + "time-settimestamp-behavior-fix" + ], + "registrars-with-dirty-hack": [ + "upgrade-460-registrars-with-dirty-hack" + ], + "session-id-sid-change": [ + "upgrade-460-sid-change" + ], + "filters-changes": [ + "upgrade-460-filters-changes" + ] + }, + "installation/upgrade_461.md": { + "upgrading-from-460-to-461": [ + "upgrading-from-4-6-0-to-4-6-1" + ] + }, + "installation/upgrade_462.md": { + "upgrading-from-461-to-462": [ + "upgrading-from-4-6-1-to-4-6-2" + ] + }, + "installation/upgrade_463.md": { + "upgrading-from-462-to-463": [ + "upgrading-from-4-6-2-to-4-6-3" + ] + }, + "installation/upgrade_464.md": { + "upgrading-from-463-to-464": [ + "upgrading-from-4-6-3-to-4-6-4" + ] + }, + "installation/upgrade_465.md": { + "upgrading-from-464-to-465": [ + "upgrading-from-4-6-4-to-4-6-5" + ] + }, + "installation/upgrade_470.md": { + "upgrading-from-46x-to-470": [ + "upgrading-from-4-6-x-to-4-7-0" + ], + "php-82-required": [ + "php-8-2-required" + ], + "validation-regex_match-placeholders": [ + "validation-regex-match-placeholders" + ] + }, + "installation/upgrade_471.md": { + "upgrading-from-470-to-471": [ + "upgrading-from-4-7-0-to-4-7-1" + ] + }, + "installation/upgrade_472.md": { + "upgrading-from-471-to-472": [ + "upgrading-from-4-7-1-to-4-7-2" + ] + }, + "installation/upgrade_473.md": { + "upgrading-from-472-to-473": [ + "upgrading-from-4-7-2-to-4-7-3" + ] + }, + "installation/upgrade_474.md": { + "upgrading-from-473-to-474": [ + "upgrading-from-4-7-3-to-4-7-4" + ] + }, + "installation/upgrade_475.md": { + "upgrading-from-474-to-475": [ + "upgrading-from-4-7-4-to-4-7-5" + ], + "view-parser-no-longer-parses-substituted-values": [ + "upgrade-475-view-parser-values" + ] + }, + "installation/upgrade_476.md": { + "upgrading-from-475-to-476": [ + "upgrading-from-4-7-5-to-4-7-6" + ], + "file-cache-deletematching-no-longer-matches-subdirectories": [ + "upgrade-476-cache-delete-matching" + ], + "model-field-protection-for-replace": [ + "upgrade-476-model-replace" + ], + "named-binds-are-no-longer-replaced-inside-quoted-values": [ + "upgrade-476-named-binds" + ] + }, + "installation/upgrade_477.md": { + "upgrading-from-476-to-477": [ + "upgrading-from-4-7-6-to-4-7-7" + ] + }, + "installation/upgrade_4xx.md": { + "upgrading-from-3x-to-4x": [ + "upgrading-from-3-x-to-4-x" + ] + }, + "installation/upgrade_configuration.md": { + "codeigniter-version-3x": [ + "codeigniter-version-3-x" + ], + "codeigniter-version-4x": [ + "codeigniter-version-4-x" + ] + }, + "installation/upgrade_controllers.md": { + "codeigniter-version-3x": [ + "codeigniter-version-3-x" + ], + "codeigniter-version-4x": [ + "codeigniter-version-4-x" + ] + }, + "installation/upgrade_database.md": { + "codeigniter-version-3x": [ + "codeigniter-version-3-x" + ], + "codeigniter-version-4x": [ + "codeigniter-version-4-x" + ] + }, + "installation/upgrade_emails.md": { + "codeigniter-version-3x": [ + "codeigniter-version-3-x" + ], + "codeigniter-version-4x": [ + "codeigniter-version-4-x" + ] + }, + "installation/upgrade_encryption.md": { + "codeigniter-version-3x": [ + "codeigniter-version-3-x" + ], + "codeigniter-version-4x": [ + "codeigniter-version-4-x" + ] + }, + "installation/upgrade_file_upload.md": { + "codeigniter-version-3x": [ + "codeigniter-version-3-x" + ], + "codeigniter-version-4x": [ + "codeigniter-version-4-x" + ] + }, + "installation/upgrade_html_tables.md": { + "codeigniter-version-3x": [ + "codeigniter-version-3-x" + ], + "codeigniter-version-4x": [ + "codeigniter-version-4-x" + ] + }, + "installation/upgrade_images.md": { + "codeigniter-version-3x": [ + "codeigniter-version-3-x" + ], + "codeigniter-version-4x": [ + "codeigniter-version-4-x" + ] + }, + "installation/upgrade_localization.md": { + "codeigniter-version-3x": [ + "codeigniter-version-3-x" + ], + "codeigniter-version-4x": [ + "codeigniter-version-4-x" + ] + }, + "installation/upgrade_migrations.md": { + "codeigniter-version-3x": [ + "codeigniter-version-3-x" + ], + "codeigniter-version-4x": [ + "codeigniter-version-4-x" + ] + }, + "installation/upgrade_models.md": { + "codeigniter-version-3x": [ + "codeigniter-version-3-x" + ], + "codeigniter-version-4x": [ + "codeigniter-version-4-x" + ] + }, + "installation/upgrade_pagination.md": { + "codeigniter-version-3x": [ + "codeigniter-version-3-x" + ], + "codeigniter-version-4x": [ + "codeigniter-version-4-x" + ] + }, + "installation/upgrade_responses.md": { + "codeigniter-version-3x": [ + "codeigniter-version-3-x" + ], + "codeigniter-version-4x": [ + "codeigniter-version-4-x" + ] + }, + "installation/upgrade_routing.md": { + "codeigniter-version-3x": [ + "codeigniter-version-3-x" + ], + "codeigniter-version-4x": [ + "codeigniter-version-4-x" + ] + }, + "installation/upgrade_security.md": { + "codeigniter-version-3x": [ + "codeigniter-version-3-x" + ], + "codeigniter-version-4x": [ + "codeigniter-version-4-x" + ] + }, + "installation/upgrade_sessions.md": { + "codeigniter-version-3x": [ + "codeigniter-version-3-x" + ], + "codeigniter-version-4x": [ + "codeigniter-version-4-x" + ] + }, + "installation/upgrade_validations.md": { + "codeigniter-version-3x": [ + "codeigniter-version-3-x" + ], + "codeigniter-version-4x": [ + "codeigniter-version-4-x" + ] + }, + "installation/upgrade_view_parser.md": { + "codeigniter-version-3x": [ + "codeigniter-version-3-x" + ], + "codeigniter-version-4x": [ + "codeigniter-version-4-x" + ] + }, + "installation/upgrade_views.md": { + "codeigniter-version-3x": [ + "codeigniter-version-3-x" + ], + "codeigniter-version-4x": [ + "codeigniter-version-4-x" + ] + }, + "installation/worker_mode.md": { + "reset-event-listeners": [ + "worker-mode-reset-event-listeners" + ] + }, + "intro/requirements.md": { + "supported-databases": [ + "requirements-supported-databases" + ] + }, + "libraries/caching.md": { + "configuring-the-cache": [ + "libraries-caching-configuring-the-cache" + ], + "cacheclear": [ + "cache-clear" + ], + "cacheinfo": [ + "cache-info" + ], + "codeignitercache": [ + "namespace-CodeIgniter\\Cache" + ], + "cacheinterface": [ + "CodeIgniter\\Cache\\CacheInterface" + ], + "issupported": [ + "CodeIgniter\\Cache\\CacheInterface::isSupported" + ], + "getkey-mixed": [ + "CodeIgniter\\Cache\\CacheInterface::get" + ], + "rememberstring-key-int-ttl-closure-callback": [ + "CodeIgniter\\Cache\\CacheInterface::remember" + ], + "savestring-key-data-int-ttl-60": [ + "CodeIgniter\\Cache\\CacheInterface::save" + ], + "deletekey-bool": [ + "CodeIgniter\\Cache\\CacheInterface::delete" + ], + "deletematchingpattern-integer": [ + "CodeIgniter\\Cache\\CacheInterface::deleteMatching" + ], + "incrementkey-offset-1-mixed": [ + "CodeIgniter\\Cache\\CacheInterface::increment" + ], + "decrementkey-offset-1-mixed": [ + "CodeIgniter\\Cache\\CacheInterface::decrement" + ], + "clean": [ + "CodeIgniter\\Cache\\CacheInterface::clean" + ], + "getcacheinfo": [ + "CodeIgniter\\Cache\\CacheInterface::getCacheInfo" + ], + "getmetadatastring-key": [ + "CodeIgniter\\Cache\\CacheInterface::getMetadata" + ], + "validatekeystring-key-string-prefix": [ + "CodeIgniter\\Cache\\CacheInterface::validateKey" + ] + }, + "libraries/cookies.md": { + "accessing-cookies-attributes": [ + "accessing-cookie-s-attributes" + ], + "validating-a-cookies-attributes": [ + "validating-a-cookie-s-attributes" + ], + "addingremoving-cookies-in-store": [ + "adding-removing-cookies-in-store" + ], + "codeignitercookie": [ + "namespace-CodeIgniter\\Cookie" + ], + "cookie": [ + "CodeIgniter\\Cookie\\Cookie" + ], + "setdefaultsconfig": [ + "CodeIgniter\\Cookie\\Cookie::setDefaults" + ], + "fromheaderstringstring-header-bool-raw-false": [ + "CodeIgniter\\Cookie\\Cookie::fromHeaderString" + ], + "__constructstring-name-string-value-array-options": [ + "CodeIgniter\\Cookie\\Cookie::__construct" + ], + "getid": [ + "CodeIgniter\\Cookie\\Cookie::getId" + ], + "getprefix-string": [ + "CodeIgniter\\Cookie\\Cookie::getPrefix" + ], + "getname-string": [ + "CodeIgniter\\Cookie\\Cookie::getName" + ], + "getprefixedname-string": [ + "CodeIgniter\\Cookie\\Cookie::getPrefixedName" + ], + "getvalue-string": [ + "CodeIgniter\\Cookie\\Cookie::getValue" + ], + "getexpirestimestamp-int": [ + "CodeIgniter\\Cookie\\Cookie::getExpiresTimestamp" + ], + "getexpiresstring-string": [ + "CodeIgniter\\Cookie\\Cookie::getExpiresString" + ], + "isexpired-bool": [ + "CodeIgniter\\Cookie\\Cookie::isExpired" + ], + "getmaxage-int": [ + "CodeIgniter\\Cookie\\Cookie::getMaxAge" + ], + "getdomain-string": [ + "CodeIgniter\\Cookie\\Cookie::getDomain" + ], + "getpath-string": [ + "CodeIgniter\\Cookie\\Cookie::getPath" + ], + "issecure-bool": [ + "CodeIgniter\\Cookie\\Cookie::isSecure" + ], + "ishttponly-bool": [ + "CodeIgniter\\Cookie\\Cookie::isHTTPOnly" + ], + "getsamesite-string": [ + "CodeIgniter\\Cookie\\Cookie::getSameSite" + ], + "israw-bool": [ + "CodeIgniter\\Cookie\\Cookie::isRaw" + ], + "getoptions-array": [ + "CodeIgniter\\Cookie\\Cookie::getOptions" + ], + "withrawbool-raw-true": [ + "CodeIgniter\\Cookie\\Cookie::withRaw" + ], + "withprefixstring-prefix": [ + "CodeIgniter\\Cookie\\Cookie::withPrefix" + ], + "withnamestring-name": [ + "CodeIgniter\\Cookie\\Cookie::withName" + ], + "withvaluestring-value": [ + "CodeIgniter\\Cookie\\Cookie::withValue" + ], + "withexpiresexpires": [ + "CodeIgniter\\Cookie\\Cookie::withExpires" + ], + "withexpired": [ + "CodeIgniter\\Cookie\\Cookie::withExpired" + ], + "withneverexpiring": [ + "CodeIgniter\\Cookie\\Cookie::withNeverExpiring" + ], + "withdomainstring-domain": [ + "CodeIgniter\\Cookie\\Cookie::withDomain" + ], + "withpathstring-path": [ + "CodeIgniter\\Cookie\\Cookie::withPath" + ], + "withsecurebool-secure-true": [ + "CodeIgniter\\Cookie\\Cookie::withSecure" + ], + "withhttponlybool-httponly-true": [ + "CodeIgniter\\Cookie\\Cookie::withHTTPOnly" + ], + "withsamesitestring-samesite": [ + "CodeIgniter\\Cookie\\Cookie::withSameSite" + ], + "toheaderstring": [ + "CodeIgniter\\Cookie\\Cookie::toHeaderString" + ], + "toarray": [ + "CodeIgniter\\Cookie\\Cookie::toArray" + ], + "cookiestore": [ + "CodeIgniter\\Cookie\\CookieStore" + ], + "fromcookieheadersarray-headers-bool-raw-false": [ + "CodeIgniter\\Cookie\\CookieStore::fromCookieHeaders" + ], + "__constructarray-cookies": [ + "CodeIgniter\\Cookie\\CookieStore::__construct" + ], + "hasstring-name-string-prefix-string-value-null-bool": [ + "CodeIgniter\\Cookie\\CookieStore::has" + ], + "getstring-name-string-prefix-cookie": [ + "CodeIgniter\\Cookie\\CookieStore::get" + ], + "putcookie-cookie-cookiestore": [ + "CodeIgniter\\Cookie\\CookieStore::put" + ], + "removestring-name-string-prefix-cookiestore": [ + "CodeIgniter\\Cookie\\CookieStore::remove" + ], + "dispatch-void": [ + "CodeIgniter\\Cookie\\CookieStore::dispatch" + ], + "display-array": [ + "CodeIgniter\\Cookie\\CookieStore::display" + ], + "clear-void": [ + "CodeIgniter\\Cookie\\CookieStore::clear" + ] + }, + "libraries/cors.md": { + "set-in-configfilters": [ + "set-in-config-filters" + ], + "codeigniterhttp": [ + "namespace-CodeIgniter\\HTTP" + ], + "cors": [ + "CodeIgniter\\HTTP\\Cors" + ], + "addresponseheadersrequestinterface-request-responseinterface-response-responseinterface": [ + "CodeIgniter\\HTTP\\Cors::addResponseHeaders" + ], + "handlepreflightrequestrequestinterface-request-responseinterface-response-responseinterface": [ + "CodeIgniter\\HTTP\\Cors::handlePreflightRequest" + ], + "ispreflightrequestincomingrequest-request-bool": [ + "CodeIgniter\\HTTP\\Cors::isPreflightRequest" + ] + }, + "libraries/curlrequest.md": { + "sharing-connection": [ + "curlrequest-sharing-connection" + ], + "sharing-options": [ + "curlrequest-sharing-options" + ], + "allow_redirects": [ + "allow-redirects" + ], + "connect_timeout": [ + "connect-timeout" + ], + "dns_cache_timeout": [ + "dns-cache-timeout" + ], + "form_params": [ + "form-params" + ], + "fresh_connect": [ + "fresh-connect" + ], + "headers": [ + "curlrequest-request-options-headers" + ], + "http_errors": [ + "http-errors" + ], + "proxy": [ + "curlrequest-request-options-proxy" + ], + "user_agent": [ + "user-agent" + ], + "force_ip_resolve": [ + "force-ip-resolve" + ], + "version": [ + "curlrequest-version" + ] + }, + "libraries/email.md": { + "ssl-versus-tls-for-smtp-protocol": [ + "email-ssl-tls-for-smtp" + ], + "codeigniteremail": [ + "namespace-CodeIgniter\\Email" + ], + "email": [ + "CodeIgniter\\Email\\Email" + ], + "setfromfrom-name-returnpath-null": [ + "CodeIgniter\\Email\\Email::setFrom" + ], + "setreplytoreplyto-name": [ + "CodeIgniter\\Email\\Email::setReplyTo" + ], + "settoto": [ + "CodeIgniter\\Email\\Email::setTo" + ], + "setcccc": [ + "CodeIgniter\\Email\\Email::setCC" + ], + "setbccbcc-limit": [ + "CodeIgniter\\Email\\Email::setBCC" + ], + "setsubjectsubject": [ + "CodeIgniter\\Email\\Email::setSubject" + ], + "setmessagebody": [ + "CodeIgniter\\Email\\Email::setMessage" + ], + "setaltmessagestr": [ + "CodeIgniter\\Email\\Email::setAltMessage" + ], + "setheaderheader-value": [ + "CodeIgniter\\Email\\Email::setHeader" + ], + "clearclearattachments-false": [ + "CodeIgniter\\Email\\Email::clear" + ], + "sendautoclear-true": [ + "CodeIgniter\\Email\\Email::send" + ], + "attachfilename-disposition-newname-null-mime": [ + "CodeIgniter\\Email\\Email::attach" + ], + "setattachmentcidfilename": [ + "CodeIgniter\\Email\\Email::setAttachmentCID" + ], + "printdebuggerinclude-headers-subject-body": [ + "CodeIgniter\\Email\\Email::printDebugger" + ] + }, + "libraries/encryption.md": { + "using-the-encryption-library": [ + "usage" + ], + "configuring-the-library": [ + "configuration" + ], + "configuration-to-maintain-compatibility-with-ci3": [ + "encryption-compatible-with-ci3" + ], + "codeigniterencryption": [ + "namespace-CodeIgniter\\Encryption" + ], + "encryption": [ + "CodeIgniter\\Encryption\\Encryption" + ], + "createkeylength-32": [ + "CodeIgniter\\Encryption\\Encryption::createKey" + ], + "initializeencryption-config-null": [ + "CodeIgniter\\Encryption\\Encryption::initialize" + ], + "codeigniterencryptionencrypterinterface": [ + "CodeIgniter\\Encryption\\CodeIgniter\\Encryption\\EncrypterInterface" + ], + "encryptdata-params-null": [ + "CodeIgniter\\Encryption\\CodeIgniter\\Encryption\\EncrypterInterface::encrypt" + ], + "decryptdata-params-null": [ + "CodeIgniter\\Encryption\\CodeIgniter\\Encryption\\EncrypterInterface::decrypt" + ] + }, + "libraries/file_collections.md": { + "__constructstring-files": [ + "construct-string-files" + ], + "setarray-files": [ + "set-array-files" + ], + "addstringstring-paths-bool-recursive-true": [ + "add-string-string-paths-bool-recursive-true" + ], + "addfilestring-file-addfilesarray-files": [ + "addfile-string-file-addfiles-array-files" + ], + "removefilestring-file-removefilesarray-files": [ + "removefile-string-file-removefiles-array-files" + ], + "adddirectorystring-directory-bool-recursive-false": [ + "adddirectory-string-directory-bool-recursive-false" + ], + "removepatternstring-pattern-string-scope-null": [ + "removepattern-string-pattern-string-scope-null" + ], + "retainpatternstring-pattern-string-scope-null": [ + "retainpattern-string-pattern-string-scope-null" + ], + "retainmultiplepatternsarray-patterns-string-scope-null": [ + "file-collections-retain-multiple-patterns", + "retainmultiplepatterns-array-patterns-string-scope-null" + ] + }, + "libraries/files.md": { + "getsizebybinaryunit": [ + "file-get-size-by-binary-unit" + ], + "getsizebymetricunit": [ + "file-get-size-by-metric-unit" + ] + }, + "libraries/publisher.md": { + "library-reference": [ + "reference" + ], + "static-discoverstring-directory-publishers-string-namespace-publisher": [ + "static-discover-string-directory-publishers-string-namespace-publisher" + ], + "geterrors-arraystring-throwable": [ + "geterrors-array-string-throwable" + ], + "addpathstring-path-bool-recursive-true": [ + "addpath-string-path-bool-recursive-true" + ], + "addpathsarray-paths-bool-recursive-true": [ + "addpaths-array-paths-bool-recursive-true" + ], + "adduristring-uri": [ + "adduri-string-uri" + ], + "addurisarray-uris": [ + "adduris-array-uris" + ], + "copybool-replace-true-bool": [ + "copy-bool-replace-true-bool" + ], + "mergebool-replace-true-bool": [ + "merge-bool-replace-true-bool" + ], + "modifying-files": [ + "publisher-modifying-files" + ], + "replacestring-file-array-replaces-bool": [ + "replace-string-file-array-replaces-bool" + ], + "addlineafterstring-file-string-line-string-after-bool": [ + "addlineafter-string-file-string-line-string-after-bool" + ], + "addlinebeforestring-file-string-line-string-before-bool": [ + "addlinebefore-string-file-string-line-string-before-bool" + ] + }, + "libraries/security.md": { + "cross-site-request-forgery-csrf": [ + "cross-site-request-forgery" + ], + "redirection-on-failure": [ + "csrf-redirection-on-failure" + ] + }, + "libraries/sessions.md": { + "flashdata": [ + "sessions-flashdata" + ], + "close": [ + "session-close" + ], + "destroy": [ + "session-destroy" + ], + "databasehandler-driver": [ + "sessions-databasehandler-driver" + ], + "redishandler-driver": [ + "sessions-redishandler-driver" + ], + "memcachedhandler-driver": [ + "sessions-memcachedhandler-driver" + ] + }, + "libraries/throttler.md": { + "checkstring-key-int-capacity-int-seconds-int-cost-1": [ + "check" + ], + "gettokentime": [ + "getTokenTime" + ], + "removestring-key-self": [ + "remove" + ] + }, + "libraries/time.md": { + "createfromtimestamp": [ + "time-createfromtimestamp" + ], + "todatetimestring": [ + "time-todatetimestring" + ], + "ispast": [ + "time-comparing-two-times-ispast" + ], + "isfuture": [ + "time-comparing-two-times-isfuture" + ], + "viewing-differences": [ + "time-viewing-differences" + ] + }, + "libraries/typography.md": { + "autotypographystr-reducelinebreaks-false": [ + "autoTypography" + ], + "formatcharactersstr": [ + "formatCharacters" + ], + "nl2brexceptprestr": [ + "nl2brExceptPre" + ] + }, + "libraries/uploaded_files.md": { + "accessing-files": [ + "uploaded-files-accessing-files" + ], + "moving-files": [ + "uploaded-files-moving-files" + ] + }, + "libraries/uri.md": { + "gettingsetting-query": [ + "getting-setting-query" + ] + }, + "libraries/user_agent.md": { + "codeigniterhttp": [ + "namespace-CodeIgniter\\HTTP" + ], + "useragent": [ + "CodeIgniter\\HTTP\\UserAgent" + ], + "isbrowserkey-null": [ + "CodeIgniter\\HTTP\\UserAgent::isBrowser" + ], + "ismobilekey-null": [ + "CodeIgniter\\HTTP\\UserAgent::isMobile" + ], + "isrobotkey-null": [ + "CodeIgniter\\HTTP\\UserAgent::isRobot" + ], + "isreferral": [ + "CodeIgniter\\HTTP\\UserAgent::isReferral" + ], + "getbrowser": [ + "CodeIgniter\\HTTP\\UserAgent::getBrowser" + ], + "getversion": [ + "CodeIgniter\\HTTP\\UserAgent::getVersion" + ], + "getmobile": [ + "CodeIgniter\\HTTP\\UserAgent::getMobile" + ], + "getrobot": [ + "CodeIgniter\\HTTP\\UserAgent::getRobot" + ], + "getplatform": [ + "CodeIgniter\\HTTP\\UserAgent::getPlatform" + ], + "getreferrer": [ + "CodeIgniter\\HTTP\\UserAgent::getReferrer" + ], + "getagentstring": [ + "CodeIgniter\\HTTP\\UserAgent::getAgentString" + ], + "parsestring": [ + "CodeIgniter\\HTTP\\UserAgent::parse" + ] + }, + "libraries/validation.md": { + "signupphp": [ + "signup-php" + ], + "formphp": [ + "form-php" + ], + "traditional-and-strict-rules": [ + "validation-traditional-and-strict-rules" + ], + "setting-rules-for-array-data": [ + "validation-dot-array-syntax" + ], + "withrequest": [ + "validation-withrequest" + ], + "getting-validated-data": [ + "validation-getting-validated-data" + ], + "saving-sets-of-validation-rules-to-the-config-file": [ + "saving-validation-rules-to-config-file" + ], + "how-to-save-your-rules": [ + "validation-array" + ], + "setting-custom-error-messages": [ + "validation-custom-errors" + ], + "getting-all-errors": [ + "validation-getting-all-errors" + ], + "redirect-and-validation-errors": [ + "validation-redirect-and-validation-errors" + ], + "customizing-error-display": [ + "validation-customizing-error-display" + ], + "using-rule-classes": [ + "validation-using-rule-classes" + ], + "using-closure-rule": [ + "validation-using-closure-rule" + ], + "using-callable-rule": [ + "validation-using-callable-rule" + ], + "available-rules": [ + "validation-available-rules" + ] + }, + "models/entities.md": { + "special-gettersetter": [ + "entities-special-getter-setter", + "special-getter-setter" + ], + "property-casting": [ + "entities-property-casting" + ], + "arrayjson-casting": [ + "array-json-casting" + ] + }, + "models/model.md": { + "using-codeigniters-model": [ + "using-codeigniter-s-model" + ], + "codeigniters-model": [ + "codeigniter-s-model" + ], + "usesoftdeletes": [ + "model-use-soft-deletes" + ], + "allowedfields": [ + "model-allowed-fields" + ], + "updateonlychanged": [ + "model-update-only-changed" + ], + "cleanvalidationrules": [ + "clean-validation-rules" + ], + "allowemptyinserts_1": [ + "model-allow-empty-inserts" + ], + "replace": [ + "model-replace" + ], + "save": [ + "model-save" + ], + "saving-dates": [ + "model-saving-dates" + ], + "setting-validation-rules": [ + "model-setting-validation-rules" + ], + "codeigniter": [ + "namespace-CodeIgniter" + ], + "model": [ + "CodeIgniter\\Model" + ], + "setvalidationrulefield-fieldrules": [ + "CodeIgniter\\Model::setValidationRule" + ], + "setvalidationrulesvalidationrules": [ + "CodeIgniter\\Model::setValidationRules" + ], + "setvalidationmessagefield-fieldmessages": [ + "CodeIgniter\\Model::setValidationMessage" + ], + "setvalidationmessagesvalidationmessages": [ + "CodeIgniter\\Model::setValidationMessages" + ], + "getting-validation-errors": [ + "model-getting-validation-errors" + ], + "getting-query-builder-for-the-models-table": [ + "getting-query-builder-for-the-model-s-table" + ], + "model-events": [ + "model-events-callbacks" + ] + }, + "outgoing/api_responses.md": { + "handling-response-types": [ + "api-response-trait-handling-response-types" + ], + "setresponseformatformat": [ + "setResponseFormat" + ], + "responddata-statuscode-200-message": [ + "respond" + ], + "failmessages-int-status-400-string-code-null-string-message": [ + "fail" + ], + "respondcreateddata-null-string-message": [ + "respondCreated" + ], + "responddeleteddata-null-string-message": [ + "respondDeleted" + ], + "respondnocontentstring-message-no-content": [ + "respondNoContent" + ], + "failunauthorizedstring-description-unauthorized-string-code-null-string-message": [ + "failUnauthorized" + ], + "failforbiddenstring-description-forbidden-string-codenull-string-message": [ + "failForbidden" + ], + "failnotfoundstring-description-not-found-string-codenull-string-message": [ + "failNotFound" + ], + "failvalidationerrorserrors-string-codenull-string-message": [ + "failValidationErrors" + ], + "failresourceexistsstring-description-conflict-string-codenull-string-message": [ + "failResourceExists" + ], + "failresourcegonestring-description-gone-string-codenull-string-message": [ + "failResourceGone" + ], + "failtoomanyrequestsstring-description-too-many-requests-string-codenull-string-message": [ + "failTooManyRequests" + ], + "failservererrorstring-description-internal-server-error-string-code-null-string-message": [ + "failServerError" + ], + "pagination-responses": [ + "api-response-trait-paginate" + ], + "paginatemodelbasebuilder-resource-int-perpage-20-string-transformwith-null": [ + "paginate" + ] + }, + "outgoing/api_transformers.md": { + "api-resources": [ + "api-transformers" + ], + "codeigniterapi": [ + "namespace-CodeIgniter\\API" + ], + "basetransformer": [ + "CodeIgniter\\API\\BaseTransformer" + ], + "__constructincomingrequest-request-null": [ + "CodeIgniter\\API\\BaseTransformer::__construct" + ], + "toarraymixed-resource": [ + "CodeIgniter\\API\\BaseTransformer::toArray" + ], + "transformresource-null": [ + "CodeIgniter\\API\\BaseTransformer::transform" + ], + "transformmanyarray-resources": [ + "CodeIgniter\\API\\BaseTransformer::transformMany" + ], + "getallowedfields": [ + "CodeIgniter\\API\\BaseTransformer::getAllowedFields" + ], + "getallowedincludes": [ + "CodeIgniter\\API\\BaseTransformer::getAllowedIncludes" + ], + "apiexception": [ + "CodeIgniter\\API\\ApiException" + ], + "forinvalidfieldsstring-field": [ + "CodeIgniter\\API\\ApiException::forInvalidFields" + ], + "forinvalidincludesstring-include": [ + "CodeIgniter\\API\\ApiException::forInvalidIncludes" + ], + "formissingincludestring-include": [ + "CodeIgniter\\API\\ApiException::forMissingInclude" + ] + }, + "outgoing/csp.md": { + "clear-directives": [ + "csp-clear-directives" + ], + "using-functions": [ + "csp-using-functions" + ] + }, + "outgoing/localization.md": { + "in-routes": [ + "localization-in-routes" + ], + "synchronizing-translation-files-via-command": [ + "sync-translations-command" + ] + }, + "outgoing/response.md": { + "redirect": [ + "response-redirect" + ], + "redirect-status-code": [ + "response-redirect-status-code" + ], + "codeigniterhttp": [ + "namespace-CodeIgniter\\HTTP" + ], + "response": [ + "CodeIgniter\\HTTP\\Response" + ], + "getstatuscode": [ + "CodeIgniter\\HTTP\\Response::getStatusCode" + ], + "setstatuscodecode-reason": [ + "CodeIgniter\\HTTP\\Response::setStatusCode" + ], + "getreasonphrase": [ + "CodeIgniter\\HTTP\\Response::getReasonPhrase" + ], + "setdatedate": [ + "CodeIgniter\\HTTP\\Response::setDate" + ], + "setcontenttypemime-charsetutf-8": [ + "CodeIgniter\\HTTP\\Response::setContentType" + ], + "nocache": [ + "CodeIgniter\\HTTP\\Response::noCache" + ], + "setcacheoptions": [ + "CodeIgniter\\HTTP\\Response::setCache" + ], + "setlastmodifieddate": [ + "CodeIgniter\\HTTP\\Response::setLastModified" + ], + "send-response": [ + "CodeIgniter\\HTTP\\Response::send" + ], + "setcookiename-value-expire-0-domain-path-prefix-secure-null-httponly-null-samesite-null": [ + "CodeIgniter\\HTTP\\Response::setCookie" + ], + "deletecookiename-domain-path-prefix": [ + "CodeIgniter\\HTTP\\Response::deleteCookie" + ], + "hascookiename-value-null-prefix": [ + "CodeIgniter\\HTTP\\Response::hasCookie" + ], + "getcookiename-prefix": [ + "CodeIgniter\\HTTP\\Response::getCookie" + ], + "getcookies": [ + "CodeIgniter\\HTTP\\Response::getCookies" + ] + }, + "outgoing/table.md": { + "synchronizing-rows-with-headings": [ + "table-sync-rows-with-headings" + ], + "codeigniterview": [ + "namespace-CodeIgniter\\View" + ], + "table": [ + "CodeIgniter\\View\\Table" + ], + "generatetabledata-null": [ + "CodeIgniter\\View\\Table::generate" + ], + "setcaptioncaption": [ + "CodeIgniter\\View\\Table::setCaption" + ], + "setheadingargs": [ + "CodeIgniter\\View\\Table::setHeading" + ], + "setfootingargs": [ + "CodeIgniter\\View\\Table::setFooting" + ], + "addrowargs": [ + "CodeIgniter\\View\\Table::addRow" + ], + "makecolumnsarray-columnlimit-0": [ + "CodeIgniter\\View\\Table::makeColumns" + ], + "settemplatetemplate": [ + "CodeIgniter\\View\\Table::setTemplate" + ], + "setemptyvalue": [ + "CodeIgniter\\View\\Table::setEmpty" + ], + "clear": [ + "CodeIgniter\\View\\Table::clear" + ], + "setsyncrowswithheadingbool-orderbykey": [ + "CodeIgniter\\View\\Table::setSyncRowsWithHeading" + ] + }, + "outgoing/view_cells.md": { + "calling-a-view-cell": [ + "app-cells" + ], + "passing-parameters-as-keyvalue-string": [ + "passing-parameters-as-key-value-string" + ] + }, + "outgoing/view_parser.md": { + "restricting-conditionals": [ + "parser-restricting-conditionals" + ], + "codeigniterview": [ + "namespace-CodeIgniter\\View" + ], + "parser": [ + "CodeIgniter\\View\\Parser" + ], + "renderview-options-savedata": [ + "CodeIgniter\\View\\Parser::render" + ], + "renderstringtemplate-options-savedata": [ + "CodeIgniter\\View\\Parser::renderString" + ], + "setdatadata-context-null": [ + "CodeIgniter\\View\\Parser::setData" + ], + "setvarname-value-null-context-null": [ + "CodeIgniter\\View\\Parser::setVar" + ], + "setdelimitersleftdelimiter-rightdelimiter": [ + "CodeIgniter\\View\\Parser::setDelimiters" + ], + "setconditionaldelimitersleftdelimiter-rightdelimiter": [ + "CodeIgniter\\View\\Parser::setConditionalDelimiters" + ] + }, + "outgoing/view_renderer.md": { + "codeigniterview": [ + "namespace-CodeIgniter\\View" + ], + "view": [ + "CodeIgniter\\View\\View" + ], + "renderview-options-savedata-false": [ + "CodeIgniter\\View\\View::render" + ], + "renderstringview-options-savedata-false": [ + "CodeIgniter\\View\\View::renderString" + ], + "setdatadata-context-null": [ + "CodeIgniter\\View\\View::setData" + ], + "setvarname-value-null-context-null": [ + "CodeIgniter\\View\\View::setVar" + ] + }, + "outgoing/views.md": { + "overriding-namespaced-views": [ + "views-overriding-namespaced-views" + ] + }, + "testing/benchmark.md": { + "timerstart": [ + "timer-start" + ], + "timerstop": [ + "timer-stop" + ], + "timerrecord": [ + "benchmark-timer-record", + "timer-record" + ] + }, + "testing/cli.md": { + "using-mockinputoutput": [ + "using-mock-input-output" + ], + "getoutputint-index-null-string": [ + "getoutput-int-index-null-string" + ], + "streamfiltertrait": [ + "stream-filter-trait" + ], + "citeststreamfilter": [ + "ci-test-stream-filter" + ], + "phpstreamwrapper": [ + "php-stream-wrapper" + ] + }, + "testing/controllers.md": { + "controllerclass": [ + "controller-class" + ], + "executestring-method-params": [ + "execute-string-method-params" + ], + "withconfigconfig": [ + "withconfig-config" + ], + "withrequestrequest": [ + "withrequest-request" + ], + "withresponseresponse": [ + "withresponse-response" + ], + "withloggerlogger": [ + "withlogger-logger" + ], + "withuristring-uri": [ + "withuri-string-uri" + ], + "withbodybody": [ + "withbody-body" + ], + "getfiltersforrouteroute-position": [ + "getFiltersForRoute" + ], + "getfiltercallerfilter-position": [ + "getFilterCaller" + ] + }, + "testing/database.md": { + "seedname": [ + "seed-name" + ], + "hasindatabasetable-data": [ + "hasindatabase-table-data" + ], + "grabfromdatabasetable-column-criteria": [ + "grabfromdatabase-table-column-criteria" + ], + "dontseeindatabasetable-criteria": [ + "dontseeindatabase-table-criteria" + ], + "seeindatabasetable-criteria": [ + "seeindatabase-table-criteria" + ], + "seenumrecordsexpected-table-criteria": [ + "seenumrecords-expected-table-criteria" + ] + }, + "testing/debugging.md": { + "replacing-var_dump": [ + "replacing-var-dump" + ], + "hot-reloading": [ + "debug-toolbar-hot-reload" + ] + }, + "testing/fabricator.md": { + "getcountstring-table-int": [ + "getcount-string-table-int" + ], + "setcountstring-table-int-count-int": [ + "setcount-string-table-int-count-int" + ], + "upcountstring-table-int": [ + "upcount-string-table-int" + ], + "downcountstring-table-int": [ + "downcount-string-table-int" + ] + }, + "testing/feature.md": { + "requesting-a-page": [ + "feature-requesting-a-page" + ], + "setting-session-values": [ + "feature-setting-session-values" + ], + "formatting-the-request": [ + "feature-formatting-the-request" + ], + "setting-the-body": [ + "feature-setting-the-body" + ] + }, + "testing/overview.md": { + "traits": [ + "testing-overview-traits" + ], + "assertloggedlevel-expectedmessage": [ + "assertlogged-level-expectedmessage" + ], + "assertlogcontainslevel-logmessage": [ + "assertlogcontains-level-logmessage" + ], + "asserteventtriggeredeventname": [ + "asserteventtriggered-eventname" + ], + "assertheaderemittedheader-ignorecase-false": [ + "assertheaderemitted-header-ignorecase-false" + ], + "assertheadernotemittedheader-ignorecase-false": [ + "assertheadernotemitted-header-ignorecase-false" + ], + "assertcloseenoughexpected-actual-message-tolerance-1": [ + "assertcloseenough-expected-actual-message-tolerance-1" + ], + "assertcloseenoughstringexpected-actual-message-tolerance-1": [ + "assertcloseenoughstring-expected-actual-message-tolerance-1" + ], + "accessing-protectedprivate-properties": [ + "accessing-protected-private-properties" + ], + "getprivatemethodinvokerinstance-method": [ + "getprivatemethodinvoker-instance-method" + ], + "getprivatepropertyinstance-property": [ + "getprivateproperty-instance-property" + ], + "setprivatepropertyinstance-property-value": [ + "setprivateproperty-instance-property-value" + ], + "servicesinjectmock": [ + "services-injectmock" + ], + "servicesreset": [ + "services-reset" + ], + "servicesresetsinglestring-name": [ + "services-resetsingle-string-name" + ] + }, + "testing/response.md": { + "accessing-requestresponse": [ + "accessing-request-response" + ], + "assertstatusint-code": [ + "assertstatus-int-code" + ], + "session-assertions": [ + "response-session-assertions" + ], + "assertsessionhasstring-key-value-null": [ + "assertsessionhas-string-key-value-null" + ], + "assertsessionmissingstring-key": [ + "assertsessionmissing-string-key" + ], + "assertheaderstring-key-value-null": [ + "assertheader-string-key-value-null" + ], + "assertheadermissingstring-key": [ + "assertheadermissing-string-key" + ], + "assertcookiestring-key-value-null-string-prefix": [ + "assertcookie-string-key-value-null-string-prefix" + ], + "assertcookiemissingstring-key": [ + "assertcookiemissing-string-key" + ], + "assertcookieexpiredstring-key-string-prefix": [ + "assertcookieexpired-string-key-string-prefix" + ], + "assertseestring-search-null-string-element-null": [ + "assertsee-string-search-null-string-element-null" + ], + "assertdontseestring-search-null-string-element-null": [ + "assertdontsee-string-search-null-string-element-null" + ], + "assertseeelementstring-search": [ + "assertseeelement-string-search" + ], + "assertdontseeelementstring-search": [ + "assertdontseeelement-string-search" + ], + "assertseelinkstring-text-string-details-null": [ + "assertseelink-string-text-string-details-null" + ], + "assertseeinfieldstring-field-string-value-null": [ + "assertseeinfield-string-field-string-value-null" + ], + "assertjsonfragmentarray-fragment": [ + "assertjsonfragment-array-fragment" + ], + "assertjsonexacttest": [ + "assertjsonexact-test" + ] + } +} diff --git a/docs/.nav.yml b/docs/.nav.yml new file mode 100644 index 000000000000..ab7bb8d95e85 --- /dev/null +++ b/docs/.nav.yml @@ -0,0 +1,346 @@ +nav: + - Home: index.md + - "Welcome to CodeIgniter4": + - intro/index.md + - intro/requirements.md + - intro/credits.md + - intro/psr.md + - "License Agreement": license.md + - "Installation": + - installation/index.md + - installation/installing_composer.md + - installation/installing_manual.md + - installation/running.md + - installation/worker_mode.md + - installation/troubleshooting.md + - installation/deployment.md + - "Change Logs": + - changelogs/index.md + - changelogs/v4.7.7.md + - changelogs/v4.7.6.md + - changelogs/v4.7.5.md + - changelogs/v4.7.4.md + - changelogs/v4.7.3.md + - changelogs/v4.7.2.md + - changelogs/v4.7.1.md + - changelogs/v4.7.0.md + - changelogs/v4.6.5.md + - changelogs/v4.6.4.md + - changelogs/v4.6.3.md + - changelogs/v4.6.2.md + - changelogs/v4.6.1.md + - changelogs/v4.6.0.md + - changelogs/v4.5.8.md + - changelogs/v4.5.7.md + - changelogs/v4.5.6.md + - changelogs/v4.5.5.md + - changelogs/v4.5.4.md + - changelogs/v4.5.3.md + - changelogs/v4.5.2.md + - changelogs/v4.5.1.md + - changelogs/v4.5.0.md + - changelogs/v4.4.8.md + - changelogs/v4.4.7.md + - changelogs/v4.4.6.md + - changelogs/v4.4.5.md + - changelogs/v4.4.4.md + - changelogs/v4.4.3.md + - changelogs/v4.4.2.md + - changelogs/v4.4.1.md + - changelogs/v4.4.0.md + - changelogs/v4.3.8.md + - changelogs/v4.3.7.md + - changelogs/v4.3.6.md + - changelogs/v4.3.5.md + - changelogs/v4.3.4.md + - changelogs/v4.3.3.md + - changelogs/v4.3.2.md + - changelogs/v4.3.1.md + - changelogs/v4.3.0.md + - changelogs/v4.2.12.md + - changelogs/v4.2.11.md + - changelogs/v4.2.10.md + - changelogs/v4.2.9.md + - changelogs/v4.2.8.md + - changelogs/v4.2.7.md + - changelogs/v4.2.6.md + - changelogs/v4.2.5.md + - changelogs/v4.2.4.md + - changelogs/v4.2.3.md + - changelogs/v4.2.2.md + - changelogs/v4.2.1.md + - changelogs/v4.2.0.md + - changelogs/v4.1.9.md + - changelogs/v4.1.8.md + - changelogs/v4.1.7.md + - changelogs/v4.1.6.md + - changelogs/v4.1.5.md + - changelogs/v4.1.4.md + - changelogs/v4.1.3.md + - changelogs/v4.1.2.md + - changelogs/v4.1.1.md + - changelogs/v4.1.0.md + - changelogs/v4.0.5.md + - changelogs/v4.0.4.md + - changelogs/v4.0.3.md + - changelogs/v4.0.0.md + - changelogs/v4.0.0-rc.4.md + - changelogs/v4.0.0-rc.3.md + - changelogs/v4.0.0-rc.2.md + - changelogs/v4.0.0-rc.1.md + - changelogs/v4.0.0-beta.4.md + - changelogs/v4.0.0-beta.3.md + - changelogs/v4.0.0-beta.2.md + - changelogs/v4.0.0-beta.1.md + - changelogs/v4.0.0-alpha.5.md + - changelogs/v4.0.0-alpha.4.md + - changelogs/v4.0.0-alpha.3.md + - changelogs/v4.0.0-alpha.2.md + - changelogs/v4.0.0-alpha.1.md + - "Upgrading From a Previous Version": + - installation/upgrading.md + - installation/backward_compatibility_notes.md + - installation/upgrade_477.md + - installation/upgrade_476.md + - installation/upgrade_475.md + - installation/upgrade_474.md + - installation/upgrade_473.md + - installation/upgrade_472.md + - installation/upgrade_471.md + - installation/upgrade_470.md + - installation/upgrade_465.md + - installation/upgrade_464.md + - installation/upgrade_463.md + - installation/upgrade_462.md + - installation/upgrade_461.md + - installation/upgrade_460.md + - installation/upgrade_458.md + - installation/upgrade_457.md + - installation/upgrade_456.md + - installation/upgrade_455.md + - installation/upgrade_454.md + - installation/upgrade_453.md + - installation/upgrade_452.md + - installation/upgrade_451.md + - installation/upgrade_450.md + - installation/upgrade_448.md + - installation/upgrade_447.md + - installation/upgrade_446.md + - installation/upgrade_445.md + - installation/upgrade_444.md + - installation/upgrade_443.md + - installation/upgrade_442.md + - installation/upgrade_441.md + - installation/upgrade_440.md + - installation/upgrade_438.md + - installation/upgrade_437.md + - installation/upgrade_436.md + - installation/upgrade_435.md + - installation/upgrade_434.md + - installation/upgrade_433.md + - installation/upgrade_432.md + - installation/upgrade_431.md + - installation/upgrade_430.md + - installation/upgrade_4212.md + - installation/upgrade_4211.md + - installation/upgrade_4210.md + - installation/upgrade_428.md + - installation/upgrade_427.md + - installation/upgrade_426.md + - installation/upgrade_425.md + - installation/upgrade_423.md + - installation/upgrade_422.md + - installation/upgrade_421.md + - installation/upgrade_420.md + - installation/upgrade_418.md + - installation/upgrade_417.md + - installation/upgrade_416.md + - installation/upgrade_415.md + - installation/upgrade_414.md + - installation/upgrade_413.md + - installation/upgrade_412.md + - installation/upgrade_410.md + - installation/upgrade_405.md + - installation/upgrade_404.md + - "Upgrading from 3.x to 4.x": + - installation/upgrade_4xx.md + - installation/upgrade_models.md + - installation/upgrade_views.md + - installation/upgrade_controllers.md + - installation/upgrade_configuration.md + - installation/upgrade_database.md + - installation/upgrade_emails.md + - installation/upgrade_encryption.md + - installation/upgrade_file_upload.md + - installation/upgrade_html_tables.md + - installation/upgrade_images.md + - installation/upgrade_localization.md + - installation/upgrade_migrations.md + - installation/upgrade_responses.md + - installation/upgrade_pagination.md + - installation/upgrade_routing.md + - installation/upgrade_security.md + - installation/upgrade_sessions.md + - installation/upgrade_validations.md + - installation/upgrade_view_parser.md + - installation/repositories.md + - "Guides": + - guides/index.md + - "Build Your First Application": + - guides/first-app/index.md + - guides/first-app/static_pages.md + - guides/first-app/news_section.md + - guides/first-app/create_news_items.md + - guides/first-app/conclusion.md + - "Getting Started with REST APIs": + - guides/api/index.md + - guides/api/first-endpoint.md + - guides/api/database-setup.md + - guides/api/controller.md + - guides/api/conclusion.md + - "CodeIgniter4 Overview": + - concepts/index.md + - concepts/structure.md + - concepts/mvc.md + - concepts/autoloader.md + - concepts/services.md + - concepts/factories.md + - concepts/http.md + - concepts/security.md + - concepts/goals.md + - "General Topics": + - general/index.md + - general/configuration.md + - general/urls.md + - general/helpers.md + - general/common_functions.md + - general/logging.md + - general/errors.md + - general/caching.md + - general/ajax.md + - general/modules.md + - general/managing_apps.md + - general/environments.md + - "Controllers and Routing": + - incoming/index.md + - incoming/routing.md + - incoming/controllers.md + - incoming/filters.md + - incoming/controller_attributes.md + - incoming/auto_routing_improved.md + - incoming/message.md + - incoming/request.md + - incoming/incomingrequest.md + - incoming/content_negotiation.md + - incoming/methodspoofing.md + - incoming/restful.md + - "Building Responses": + - outgoing/index.md + - outgoing/views.md + - outgoing/view_renderer.md + - outgoing/view_layouts.md + - outgoing/view_cells.md + - outgoing/view_parser.md + - outgoing/view_decorators.md + - outgoing/table.md + - outgoing/response.md + - outgoing/api_responses.md + - outgoing/api_transformers.md + - outgoing/csp.md + - outgoing/localization.md + - outgoing/alternative_php.md + - "Working with Databases": + - database/index.md + - "Quick Start: Usage Examples": database/examples.md + - "Database Configuration": database/configuration.md + - "Connecting to a Database": database/connecting.md + - "Running Queries": database/queries.md + - "Generating Query Results": database/results.md + - "Query Helper Methods": database/helpers.md + - "Query Builder Class": database/query_builder.md + - "Transactions": database/transactions.md + - "Getting Metadata": database/metadata.md + - "Custom Function Calls": database/call_function.md + - "Database Events": database/events.md + - "Database Utilities": database/utilities.md + - "Modeling Data": + - models/index.md + - "Using CodeIgniter's Model": models/model.md + - "Using Entity Classes": models/entities.md + - "Managing Databases": + - dbmgmt/index.md + - "Database Forge": dbmgmt/forge.md + - "Database Migrations": dbmgmt/migration.md + - "Database Seeding": dbmgmt/seeds.md + - dbmgmt/db_commands.md + - "Library Reference": + - libraries/index.md + - libraries/caching.md + - libraries/cookies.md + - libraries/cors.md + - libraries/curlrequest.md + - libraries/email.md + - libraries/encryption.md + - libraries/files.md + - libraries/file_collections.md + - libraries/honeypot.md + - libraries/images.md + - libraries/pagination.md + - libraries/publisher.md + - libraries/security.md + - libraries/sessions.md + - libraries/throttler.md + - libraries/time.md + - libraries/typography.md + - libraries/uploaded_files.md + - libraries/uri.md + - libraries/user_agent.md + - libraries/validation.md + - "Helpers": + - helpers/index.md + - helpers/array_helper.md + - helpers/cookie_helper.md + - helpers/date_helper.md + - helpers/filesystem_helper.md + - helpers/form_helper.md + - helpers/html_helper.md + - helpers/inflector_helper.md + - helpers/number_helper.md + - helpers/security_helper.md + - helpers/test_helper.md + - helpers/text_helper.md + - helpers/url_helper.md + - helpers/xml_helper.md + - "Testing": + - testing/index.md + - "Getting Started": testing/overview.md + - "Database": testing/database.md + - "Generating Data": testing/fabricator.md + - "Controller Testing": testing/controllers.md + - "HTTP Testing": testing/feature.md + - testing/response.md + - testing/cli.md + - "Mocking": testing/mocking.md + - testing/benchmark.md + - testing/debugging.md + - "Session Testing": testing/session_testing.md + - "Command Line Usage": + - cli/index.md + - cli/cli_overview.md + - cli/cli_controllers.md + - cli/spark_commands.md + - cli/cli_commands.md + - cli/cli_generators.md + - cli/cli_library.md + - cli/cli_signals.md + - cli/cli_request.md + - "Extending CodeIgniter": + - extending/index.md + - extending/core_classes.md + - extending/common.md + - extending/events.md + - extending/basecontroller.md + - extending/authentication.md + - extending/composer_packages.md + - extending/contributing.md + - libraries/official_packages.md diff --git a/docs/changelogs/index.md b/docs/changelogs/index.md new file mode 100644 index 000000000000..3f8f322cf192 --- /dev/null +++ b/docs/changelogs/index.md @@ -0,0 +1,89 @@ +# Change Logs + +## Version 4.7 + +**List of all CodeIgniter4 releases** + +See all the changes. + +- [Version 4.7.7](v4.7.7.md) +- [Version 4.7.6](v4.7.6.md) +- [Version 4.7.5](v4.7.5.md) +- [Version 4.7.4](v4.7.4.md) +- [Version 4.7.3](v4.7.3.md) +- [Version 4.7.2](v4.7.2.md) +- [Version 4.7.1](v4.7.1.md) +- [Version 4.7.0](v4.7.0.md) +- [Version 4.6.5](v4.6.5.md) +- [Version 4.6.4](v4.6.4.md) +- [Version 4.6.3](v4.6.3.md) +- [Version 4.6.2](v4.6.2.md) +- [Version 4.6.1](v4.6.1.md) +- [Version 4.6.0](v4.6.0.md) +- [Version 4.5.8](v4.5.8.md) +- [Version 4.5.7](v4.5.7.md) +- [Version 4.5.6](v4.5.6.md) +- [Version 4.5.5](v4.5.5.md) +- [Version 4.5.4](v4.5.4.md) +- [Version 4.5.3](v4.5.3.md) +- [Version 4.5.2](v4.5.2.md) +- [Version 4.5.1](v4.5.1.md) +- [Version 4.5.0](v4.5.0.md) +- [Version 4.4.8](v4.4.8.md) +- [Version 4.4.7](v4.4.7.md) +- [Version 4.4.6](v4.4.6.md) +- [Version 4.4.5](v4.4.5.md) +- [Version 4.4.4](v4.4.4.md) +- [Version 4.4.3](v4.4.3.md) +- [Version 4.4.2](v4.4.2.md) +- [Version 4.4.1](v4.4.1.md) +- [Version 4.4.0](v4.4.0.md) +- [Version 4.3.8](v4.3.8.md) +- [Version 4.3.7](v4.3.7.md) +- [Version 4.3.6](v4.3.6.md) +- [Version 4.3.5](v4.3.5.md) +- [Version 4.3.4](v4.3.4.md) +- [Version 4.3.3](v4.3.3.md) +- [Version 4.3.2](v4.3.2.md) +- [Version 4.3.1](v4.3.1.md) +- [Version 4.3.0](v4.3.0.md) +- [Version 4.2.12](v4.2.12.md) +- [Version 4.2.11](v4.2.11.md) +- [Version 4.2.10](v4.2.10.md) +- [Version 4.2.9](v4.2.9.md) +- [Version 4.2.8](v4.2.8.md) +- [Version 4.2.7](v4.2.7.md) +- [Version 4.2.6](v4.2.6.md) +- [Version 4.2.5](v4.2.5.md) +- [Version 4.2.4](v4.2.4.md) +- [Version 4.2.3](v4.2.3.md) +- [Version 4.2.2](v4.2.2.md) +- [Version 4.2.1](v4.2.1.md) +- [Version 4.2.0](v4.2.0.md) +- [Version 4.1.9](v4.1.9.md) +- [Version 4.1.8](v4.1.8.md) +- [Version 4.1.7](v4.1.7.md) +- [Version 4.1.6](v4.1.6.md) +- [Version 4.1.5](v4.1.5.md) +- [Version 4.1.4](v4.1.4.md) +- [Version 4.1.3](v4.1.3.md) +- [Version 4.1.2](v4.1.2.md) +- [Version 4.1.1](v4.1.1.md) +- [Version 4.1.0](v4.1.0.md) +- [Version 4.0.5](v4.0.5.md) +- [Version 4.0.4](v4.0.4.md) +- [Version 4.0.3](v4.0.3.md) +- [Version 4.0.0](v4.0.0.md) +- [Version 4.0.0-rc.4](v4.0.0-rc.4.md) +- [Version 4.0.0-rc.3](v4.0.0-rc.3.md) +- [Version 4.0.0-rc.2](v4.0.0-rc.2.md) +- [Version 4.0.0-rc.1](v4.0.0-rc.1.md) +- [Version 4.0.0-beta.4](v4.0.0-beta.4.md) +- [Version 4.0.0-beta.3](v4.0.0-beta.3.md) +- [Version 4.0.0-beta.2](v4.0.0-beta.2.md) +- [Version 4.0.0-beta.1](v4.0.0-beta.1.md) +- [Version 4.0.0-alpha.5](v4.0.0-alpha.5.md) +- [Version 4.0.0-alpha.4](v4.0.0-alpha.4.md) +- [Version 4.0.0-alpha.3](v4.0.0-alpha.3.md) +- [Version 4.0.0-alpha.2](v4.0.0-alpha.2.md) +- [Version 4.0.0-alpha.1](v4.0.0-alpha.1.md) diff --git a/docs/changelogs/v4.0.0-alpha.1.md b/docs/changelogs/v4.0.0-alpha.1.md new file mode 100644 index 000000000000..69915b2b3404 --- /dev/null +++ b/docs/changelogs/v4.0.0-alpha.1.md @@ -0,0 +1,107 @@ +# Version 4.0.0-alpha.1 + +Release Date: September 28, 2018 + +**Rewrite of the CodeIgniter framework** + +## New Packages List + +``` +. +├── API/ +│ └── ResponseTrait +├── Autoloader/ +│ └── AutoLoader, FileLocator +├── CLI/ +│ └── BaseCommand, CLI, CommandRunner, Console +├── Cache/ +│ ├── CacheFactory, CacheInterface +│ └── Handlers/ +│ └── Dummy, File, Memcached, Predis, Redis, Wincache +├── Commands/ +│ ├── Help, ListCommands +│ ├── Database/ +│ │ └── CreateMigration, MigrateCurrent, MigrateLatest, MigrateRefresh, MigrateRollback, MigrateStatus, +│ │ MigrateVersion, Seed +│ ├── Server/ +│ │ └── Serve +│ ├── Sessions/ +│ │ └── CreateMigration +│ └── Utilities/ +│ └── Namespaces, Routes +├── Config/ +│ └── AutoloadConfig, BaseConfig, BaseService, Config, DotEnv, ForeignCharacters, Routes, Services, View +├── Database/ +│ ├── BaseBuilder, BaseConnection, BasePreparedQuery, BaseResult, BaseUtils, Config, ConnectionInterface, +│ │ Database, Forge, Migration, MigrationRunner, PreparedQueryInterface, Query, QueryInterface, +│ │ ResultInterface, Seeder +│ ├── MySQLi/ +│ │ └── Builder, Connection, Forge, PreparedQuery, Result +│ ├── Postgre/ +│ │ └── Builder, Connection, Forge, PreparedQuery, Result, Utils +│ └── SQLite3/ +│ └── Builder, Connection, Forge, PreparedQuery, Result, Utils +├── Debug/ +│ ├── Exceptions, Iterator, Timer, Toolbar +│ └── Toolbar/ +│ └── Collectors... +├── Email/ +│ └── Email +├── Events/ +│ └── Events +├── Files/ +│ └── File +├── Filters/ +│ └── FilterInterface, Filters +├── Format/ +│ └── FormatterInterface, JSONFormatter, XMLFormatter +├── HTTP/ +│ ├── CLIRequest, CURLRequest, ContentSecurityPolicy, Header, IncomingRequest, Message, Negotiate, Request, +│ │ RequestInterface, Response, ResponseInterface, URI, UserAgent +│ └── Files/ +│ └── FileCollection, UploadedFile, UploadedFileInterface +├── Helpers/ +│ └── array, cookie, date, filesystem, form, html, inflector, number, security, text, url +├── Honeypot/ +│ └── Honeypot +├── I18n/ +│ └── Time, TimeDifference +├── Images/ +│ ├── Image, ImageHandlerInterface +│ └── Handlers/ +│ └── Base, GD, ImageMagick +├── Language/ +│ └── Language +├── Log/ +│ ├── Logger, LoggerAwareTrait +│ └── Handlers/ +│ └── Base, ChromeLogger, File, HandlerInterface +├── Pager/ +│ └── Pager, PagerInterface, PagerRenderer +├── Router/ +│ └── RouteCollection, RouteCollectionInterface, Router, RouterInterface +├── Security/ +│ └── Security +├── Session/ +│ ├── Session, SessionInterface +│ └── Handlers/ +│ └── Base, File, Memcached, Redis +├── Test/ +│ ├── CIDatabaseTestCase, CIUnitTestCase, FeatureResponse, FeatureTestCase, ReflectionHelper +│ └── Filters/ +│ └── CITestStreamFilter +├── ThirdParty/ (bundled) +│ ├── Kint (for Debug) +│ ├── PSR/ +│ │ └── Log (for Log) +│ └── ZendEscaper/ +│ └── Escaper (for View) +├── Throttle/ +│ └── Throttler, ThrottlerInterface +├── Typography/ +│ └── Typography +├── Validation/ +│ └── CreditCardRules, FileRules, FormatRules, Rules, Validation, ValidationInterface +└── View/ + └── Cell, Filters, Parser, Plugins, RendererInterface, View +``` diff --git a/docs/changelogs/v4.0.0-alpha.2.md b/docs/changelogs/v4.0.0-alpha.2.md new file mode 100644 index 000000000000..12d96ade43b7 --- /dev/null +++ b/docs/changelogs/v4.0.0-alpha.2.md @@ -0,0 +1,195 @@ +# Version 4.0.0-alpha.2 + +Release Date: Oct 26, 2018 + +**Second alpha release of CodeIgniter4** + +## Changed Files + +The list of changed files follows, with PR numbers shown. + +```text +. +├── application/ +│ ├── composer.json #1312 +│ ├── Config/Boot/development, production, testing #1312 +│ ├── Config/Paths #1341 +│ ├── Config/Routes #1281 +│ ├── Filters/Honeypot #1314 +│ ├── Views/errors/cli/error_404 #1272 +│ └── Views/welcome_message #1342 +├── public/ +│ ├── .htaccess #1281 +│ └── index #1295, #1313 +├── system/ +│ ├── CLI/ +│ │ └── CommandRunner #1350, #1356 +│ ├── Commands/ +│ │ └── Server/Serve #1313 +│ ├── Config/ +│ │ ├── AutoloadConfig #1271 +│ │ └── Services #1341 +│ ├── Database/ +│ │ ├── BaseBuilder #1217 +│ │ ├── BaseUtils #1209, #1329 +│ │ ├── Database #1339 +│ │ └── MySQLi/Utils #1209 +│ ├── Debug/Toolbar/ +│ │ └── Views/toolbar.css #1342 +│ ├── Exceptions/ +│ │ ├── CastException #1283 +│ │ ├── DownloadException #1239 +│ │ └── FrameworkException #1313 +│ ├── Filters/ +│ │ └── Filters #1239 +│ ├── Helpers/ +│ │ ├── cookie_helper #1286 +│ │ ├── form_helper #1244, #1327 +│ │ ├── url_helper #1321 +│ │ └── xml_helper #1209 +│ ├── Honeypot/ +│ │ └── Honeypot #1314 +│ ├── HTTP/ +│ │ ├── CliRequest #1303 +│ │ ├── CURLRequest #1303 +│ │ ├── DownloadResponse #1239 +│ │ ├── Exceptions/HTTPException #1303 +│ │ ├── IncomingRequest #1304, #1313 +│ │ ├── Negotiate #1306 +│ │ ├── RedirectResponse #1300, #1306, #1329 +│ │ ├── Response #1239, #1286 +│ │ ├── ResponseInterface #1239 +│ │ └── URI #1300 +│ ├── Language/en/ +│ │ ├── Cast #1283 +│ │ └── HTTP #1239 +│ ├── Router/ +│ │ └── RouteCollection #1285, #1355 +│ ├── Test/ +│ │ ├── CIUnitTestCase #1312, #1361 +│ │ └── FeatureTestCase #1282 +│ ├── CodeIgniter #1239 #1337 +│ ├── Common #1291 +│ ├── Entity #1283, #1311 +│ └── Model #1311 +├── tests/ +│ ├── API/ +│ │ └── ResponseTraitTest #1302 +│ ├── Commands/ +│ │ └── CommandsTest #1356 +│ ├── Database/ +│ │ ├── BaseBuilderTest #1217 +│ │ └── Live/ModelTest #1311 +│ ├── Debug/ +│ │ └── TimerTest #1273 +│ ├── Helpers/ +│ │ └── CookieHelperTest #1286 +│ ├── Honeypot/ +│ │ └── HoneypotTest #1314 +│ ├── HTTP/ +│ │ ├── Files/ +│ │ │ ├── FileMovingTest #1302 +│ │ │ └── UploadedFileTest #1302 +│ │ ├── CLIRequestTest #1303 +│ │ ├── CURLRequestTest #1303 +│ │ ├── DownloadResponseTest #1239 +│ │ ├── NegotiateTest #1306 +│ │ ├── RedirectResponseTest #1300, #1306, #1329 +│ │ └── ResponseTest #1239 +│ ├── I18n/ +│ │ └── TimeTest #1273, #1316 +│ ├── Router/ +│ │ └── RouteTest #1285, #1355 +│ ├── Test/ +│ │ ├── TestCaseEmissionsTest #1312 +│ │ └── TestCaseTest #1312 +│ ├── View/ +│ │ └── ParserTest #1311 +│ └── EntityTest #1319 +├── user_guide_src/source/ +│ ├── cli/ +│ │ └── cli_request #1303 +│ ├── database/ +│ │ ├── query_builder #1217 +│ │ └── utilities #1209 +│ ├── extending/ +│ │ └── contributing #1280 +│ ├── general/ +│ │ ├── common_functions #1300, #1329 +│ │ ├── helpers #1291 +│ │ └── managing_apps #1341 +│ ├── helpers/ +│ │ └── xml_helper #1321 +│ ├── incoming/ +│ │ ├── controllers #1323 +│ │ └── routing #1337 +│ ├── intro/ +│ │ └── requirements #1280, #1303 +│ ├── installation/ #1280, #1303 +│ │ └── troubleshooting #1265 +│ ├── libraries/ +│ │ ├── curlrequest #1303 +│ │ ├── honeypot #1314 +│ │ ├── sessions #1333 +│ │ └── uploaded_files #1302 +│ ├── models/ +│ │ └── entities #1283 +│ ├── outgoing/ +│ │ └── response #1340 +│ ├── testing/ +│ │ └── overview #1312 +│ └── tutorial... #1265, #1281, #1294 +└── spark #1305 +``` + +## PRs merged + +- \#1361 Add timing assertion to CIUnitTestCase +- \#1312 Add headerEmitted assertions to CIUnitTestCase +- \#1356 Testing/commands +- \#1355 Handle duplicate HTTP verb and generic rules properly +- \#1350 Checks if class is instantiable and is a command +- \#1348 Fix sphinx formatting in sessions +- \#1347 Fix sphinx formatting in sessions +- \#1342 Toolbar Styles +- \#1341 Make viewpath configurable in Paths.php. Fixes #1296 +- \#1340 Update docs for downloads to reflect the need to return it. Fixes #1331 +- \#1339 Fix error where Forge class might not be returned. Fixes #1225 +- \#1337 Filter in the router Fixes #1315 +- \#1336 Revert alpha.2 +- \#1334 Proposed changelog for alpha.2 +- \#1333 Error in user guide for session config. Fixes #1330 +- \#1329 Tweaks +- \#1327 FIX form_hidden and form_open - value escaping as is in form_input. +- \#1323 Fix doc error: show_404() doesn't exist any more +- \#1321 Added missing xml_helper UG page +- \#1319 Testing/entity +- \#1316 Refactor TimeTest +- \#1314 Fix & expand Honeypot & its tests +- \#1313 Clean exception +- \#1311 Entities store an original stack of values to compare against so we d... +- \#1306 Testing3/http +- \#1305 Change chdir('public') to chdir($public) +- \#1304 Refactor script name stripping in parseRequestURI() +- \#1303 Testing/http +- \#1302 Exception: No Formatter defined for mime type '' +- \#1300 Allow redirect with Query Vars from the current request. +- \#1295 Fix grammar in front controller comment. +- \#1294 Updated final tutorial page. Fixes #1292 +- \#1291 Allows extending of helpers. Fixes #1264 +- \#1286 Cookies +- \#1285 Ensure current HTTP verb routes are matched prior to any \* matched ro... +- \#1283 Entities +- \#1282 system/Test/FeatureTestCase::setupRequest(), minor fixes phpdoc block... +- \#1281 Tut +- \#1280 Add contributing reference to user guide +- \#1273 Fix/timing +- \#1272 Fix undefined variable "heading" in cli 404 +- \#1271 remove nonexistent "CodeIgniterLoader" from AutoloadConfig::classmap +- \#1269 Release notes & process +- \#1266 Adjusting the release build scripts +- \#1265 WIP Fix docs re PHP server +- \#1245 Fix #1244 (form_hidden declaration) +- \#1239 [Unsolicited PR] I changed the download method to testable. +- \#1217 Optional parameter for resetSelect() call in Builder's countAll(); +- \#1209 Fix undefined function xml_convert at DatabaseBaseUtils diff --git a/docs/changelogs/v4.0.0-alpha.3.md b/docs/changelogs/v4.0.0-alpha.3.md new file mode 100644 index 000000000000..cbae1b28e06a --- /dev/null +++ b/docs/changelogs/v4.0.0-alpha.3.md @@ -0,0 +1,374 @@ +# Version 4.0.0-alpha.3 + +Release Date: November 30, 2018 + +**Next alpha release of CodeIgniter4** + +## Changed Files + +The list of changed files follows, with PR numbers shown. + +```text +. +├── admin/ +│ ├── framework/* #1553 +│ ├── starter/* #1553 +│ ├── docbot #1553 +│ ├── release* #1484, +│ ├── pre-commit #1388 +│ ├── README.md #1553 +│ └── setup.sh #1388 +├── application/ +│ ├── Config/ +│ │ ├── Autoload #1396, #1416 +│ │ ├── Mimes #1368, #1465 +│ │ ├── Pager #622 +│ │ └── Services #1469 +│ ├── Filters/Honeypot #1376 +│ └── Views/ +│ ├── errors/* #1415, #1413, #1469 +│ └── form.php removed #1442 +├── public/ +│ └── index.php #1388, #1457 +├── system/ +│ ├── Autoloader/ +│ │ ├── Autoloader #1547 +│ │ └── FileLocator #1547, #1550 +│ ├── Cache/ +│ │ ├── Exceptions/CacheException #1525 +│ │ ├── Handlers/FileHandler #1547, #1525 +│ │ └── Handlers/MemcachedHandler #1383 +│ ├── CLI/ +│ │ └── CLI #1432, #1489 +│ ├── Commands/ +│ │ ├── Database/ +│ │ │ ├── CreateMigration #1374, #1422, #1431 +│ │ │ ├── MigrateCurrent #1431 +│ │ │ ├── MigrateLatest #1431 +│ │ │ ├── MigrateRollback #1431 +│ │ │ ├── MigrateStatus #1431 +│ │ │ └── MigrateVersion #1431 +│ │ └── Sessions/CreateMigration #1357 +│ ├── Config/ +│ │ ├── AutoloadConfig #1416 +│ │ ├── BaseService #1469 +│ │ ├── Mimes #1453 +│ │ └── Services #1180, #1469 +│ ├── Database/ +│ │ ├── BaseBuilder #1335, #1491, #1522 +│ │ ├── BaseConnection #1335, #1407, #1491, #1522 +│ │ ├── BaseResult #1426 +│ │ ├── Config #1465, #1469, #1554 +│ │ ├── Forge #1343, #1449, #1470, #1530 +│ │ ├── MigrationRunner #1371 +│ │ ├── MySQLi/Connection #1335, #1449 +│ │ ├── MySQLi/Forge #1343, #1344, #1530 +│ │ ├── MySQLi/Result #1530 +│ │ ├── Postgre/Connection #1335, #1449 +│ │ ├── Postgre/Forge #1530 +│ │ ├── SQLite3/Connection #1335, #1449 +│ │ └── SQLite3/Forge #1470, #1547 +│ ├── Debug +│ │ ├── Exceptions #1500 +│ │ ├── Toolbar #1370, #1465, #1469, #1547 +│ │ └── Toolbar/Views/toolbar.tpl #1469 +│ ├── Email/ +│ │ └── Email #1389, #1413, #1438, #1454, #1465, #1469, #1547 +│ ├── Events/ +│ │ └── Events #1465, #1469, #1547 +│ ├── Files/ +│ │ └── File #1399, #1547 +│ ├── Format/ +│ │ └── XMLFormatter #1471 +│ ├── Helpers/ +│ │ ├── array_helper #1412 +│ │ └── filesystem_helper #1547 +│ ├── Honeypot/ +│ │ └── Honeypot #1460 +│ ├── HTTP/ +│ │ ├── CURLRequest #1547, #1498 +│ │ ├── DownloadResponse #1375 +│ │ ├── Exceptions/DownloadException #1405 +│ │ ├── Files/FileCollection #1506 +│ │ ├── Files/UploadedFile #1335, #1399, #1500, #1506, #1547 +│ │ ├── IncomingRequest #1445, #1469, #1496 +│ │ ├── Message #1497 +│ │ ├── RedirectResponse #1387, #1451, #1464 +│ │ ├── Response #1456, #1472, #1477, #1486, #1504, #1505, #1497, #622 +│ │ ├── ResponseInterface #1384 +│ │ ├── UploadedFile #1368, #1456 +│ │ └── URI #1213, #1469, #1508 +│ ├── Images/Handlers/ +│ │ └── ImageMagickHandler #1546 +│ ├── Language/ +│ │ ├── en/Cache #1525 +│ │ ├── en/Database #1335 +│ │ ├── en/Filters #1378 +│ │ ├── en/Migrations #1374 +│ │ └── Language #1480, #1489 +│ ├── Log/ +│ │ └── Handlers/FileHandler #1547 +│ ├── Pager/ +│ │ ├── Pager #1213, #622 +│ │ ├── PagerInterface #622 +│ │ ├── PagerRenderer #1213, #622 +│ │ ├── Views/default_full #622 +│ │ ├── Views/default_head #622 +│ │ └── Views/default_simple #622 +│ ├── Router/ +│ │ ├── RouteCollection #1464, #1524 +│ │ ├── RouteCollectionInterface #1406, #1410 +│ │ └── Router #1523, #1547 +│ ├── Session/Handlers/ +│ │ ├── BaseHandler #1180, #1483 +│ │ ├── DatabaseHandler #1180 +│ │ ├── FileHandler #1180, #1547 +│ │ ├── MemcachedHandler #1180 +│ │ └── RedisHandler #1180 +│ ├── Test/ +│ │ ├── CIUnitTestCase #1467 +│ │ ├── FeatureTestCase #1427, #1468 +│ │ └── Filters/CITestStreamFilter #1465 +│ ├── Validation/ +│ │ ├── CreditCardRules #1447, #1529 +│ │ ├── FormatRules #1507 +│ │ ├── Rules #1345 +│ │ └── Validation #1345 +│ ├── View/ +│ │ ├── Filters #1469 +│ │ ├── Parser #1417, #1547 +│ │ └── View #1357, #1377, #1410, #1547 +│ ├── bootstrap #1547 +│ ├── CodeIgniter #1465, #1505, #1523, 2047b5a, #1547 +│ ├── Common #1486, #1496, #1504, #1513 +│ ├── ComposerScripts #1469, #1547 +│ ├── Controller #1423 +│ ├── Entity #1369, #1373 +│ └── Model #1345, #1380, #1373, #1440 +├── tests/ +│ ├── _support/ +│ │ ├── HTTP/MockResponse #1456 +│ │ └── _bootstrap.php #1397, #1443 +│ ├── Cache/Handlers/ +│ │ ├── FileHandlerTest #1547, #1525 +│ │ ├── MemcachedHandlerTest #1180, #1383 +│ │ └── RedisHandlerTest #1180, #1481 +│ ├── CLI/ +│ │ └── CLITest #1467, #1489 +│ ├── Commands/ +│ │ └── SessionCommandsTest #1455 +│ ├── Database/Live/ +│ │ ├── ConnectTest #1554 +│ │ └── ForgeTest #1449, #1470 +│ ├── HTTP/ +│ │ ├── CURLRequestTest#1498 +│ │ ├── Files/FileCollectionTest #1506 +│ │ ├── Files/FileMovingTest #1424 +│ │ ├── DownloadResponseTest #1375 +│ │ ├── IncomingRequestTest #1496 +│ │ ├── RedirectResponseTest #1387, #1456 +│ │ ├── ResponseCookieTest #1472, #1509 +│ │ ├── ResponseSendTest #1477, #1486, #1509 +│ │ ├── ResponseTest #1375, #1456, #1472, #1486, #622 +│ │ └── URITest #1456, #1495 +│ ├── Helpers/ +│ │ └── DateHelperTest #1479 +│ ├── I18n/ +│ │ └── TimeTest #1467, #1473 +│ ├── Language/ +│ │ └── LanguageTest #1480 +│ ├── Log/ +│ │ └── FileHandlerTest #1425 +│ ├── Pager/ +│ │ ├── PagerRendererTest #1213, #622 +│ │ └── PagerTest #622 +│ ├── Router/ +│ │ ├── RouteCollectionTest #1438, #1524 +│ │ └── RouterTest #1438, #1523 +│ ├── Session/ +│ │ └── SessionTest #1180 +│ ├── Test/ +│ │ ├── BootstrapFCPATHTest #1397 +│ │ ├── FeatureTestCase #1468 +│ │ ├── TestCaseEmissionsTest #1477 +│ │ └── TestCaseTest #1390 +│ ├── Throttle/ +│ │ └── ThrottleTest #1398 +│ ├── Validation/ +│ │ └── FormatRulesTest #1507 +│ ├── View/ +│ │ └── ParserTest #1335 +│ ├── CodeIgniterTest #1500 +│ ├── CommonFunctionsSendTest #1486, #1509 +│ └── CommonFunctionsTest #1180, #1486, #1496 +├── user_guide_src/source/ +│ ├── changelogs/ #1385, #1490, #1553 +│ ├── concepts/ +│ │ ├── autoloader #1547 +│ │ ├── security #1540 +│ │ ├── services #1469 +│ │ └── structure #1448 +│ ├── database/ +│ │ └── queries #1407 +│ ├── dbmgmt/ +│ │ ├── forge #1470 +│ │ ├── migration #1374, #1385, #1431 +│ │ └── seeds #1482 +│ ├── extending/ +│ │ └── core_classes #1469 +│ ├── helpers/ +│ │ └── form_helper #1499 +│ ├── installation/ +│ │ └── index #1388 +│ ├── libraries/ +│ │ ├── caching #1525 +│ │ ├── pagination #1213 +│ │ └── validation #27868b, #1540 +│ ├── models/ +│ │ └── entities #1518, #1540 +│ ├── outgoing/ +│ │ └── response #1472, #1494 +│ ├── testing/ +│ │ └── overview #1467 +│ └── tutorial/ +│ ├── create_news_item #1442 +│ └── static_pages #1547 +├── composer.json #1388, #1418, #1536, #1553 +├── README.md #1553 +├── spark 2047b5a +└── .travis.yml #1394 +``` + +## PRs merged + +- \#1554 Serviceinstances +- \#1553 Admin/scripts +- \#1550 remove commented CLI::newLine($tempFiles) at FileLocator +- \#1549 use .gitkeep instead of .gitignore in Database/Seeds directory +- \#1547 Change file exists to is file +- \#1546 ImageMagickHandler::\__construct ... +- \#1540 Update validation class User Guide +- \#1530 database performance improvement: use foreach() when possible +- 2047b5a Don't run filters when using spark. +- \#1539 remove mb_\* (mb string usage) in CreditCardRules +- \#1536 ext-json in composer.json +- \#1525 remove unneeded try {} catch {} +- \#1524 Test routes resource with 'websafe' option +- \#1523 Check if the matched route regex is filtered +- \#1522 add property_exists check on BaseBuilder +- \#1521 .gitignore clean up +- \#1518 Small typo: changed setCreatedOn to setCreatedAt +- \#1517 move .htaccess from per-directory in writable/{directory} to writable/ +- \#1513 More secure redirection +- \#1509 remove unused use statements +- \#1508 remove duplicate strtolower() call in URI::setScheme() call +- \#1507 Fix multi "empty" string separated by "," marked as valid emails +- \#1506 Flesh out HTTP/File unit testing +- \#1505 Do not exit until all Response is completed +- 27868b Add missing docs for {field} and {param} placeholders +- \#1504 Revert RedirectResponse changes +- \#1500 Ignoring errors suppressed by @ +- \#1499 Fix form_helper's set_value writeup +- \#1498 Add CURLRequest helper methods +- \#1497 Remove unused RedirectException +- \#1496 Fix Common::old() +- \#1495 Add URI segment test +- \#1494 Method naming in user guide +- \#1491 Error logging +- \#1490 Changelog(s) restructure +- \#1489 Add CLI::strlen() +- \#1488 Load Language strings from other locations +- \#1486 Test RedirectResponse problem report +- \#1484 missing slash +- \#1483 Small typo in SessionHandlersBaseHandler.php +- \#1482 doc fix: query binding fix in Seeds documentation +- \#1481 RedisHandler test clean up +- \#1480 Fix Language Key-File confusion +- \#1479 Yet another time test to fix +- \#1477 Add Response send testing +- \#1475 Correct phpdocs for Forge::addField() +- \#1473 Fuzzify another time test +- \#1472 HTTPResponse cookie testing & missing functionality +- \#1471 remove unused local variable $result in XMLFormatter::format() +- \#1470 Allow create table with array field constraints +- \#1469 use static:: instead of self:: to call protected/public functions as well +- \#1468 Fix FeatureTestCaseTest output buffer +- \#1467 Provide time testing within tolerance +- \#1466 Fix phpdocs for BaseBuilder +- \#1465 use static:: instead of self:: for protected and public properties +- \#1464 remove unused use statements +- \#1463 Fix the remaining bcit-ci references +- \#1461 Typo fix: donload -> download +- \#1460 remove unneeded ternary check at HoneyPot +- \#1457 use $paths->systemDirectory in public/index.php +- \#1456 Beef up HTTP URI & Response testing +- \#1455 un-ignore app/Database/Migrations directory +- \#1454 add missing break; in loop at Email::getEncoding() +- \#1453 BugFix if the extension has only one mime type +- \#1451 remove unneeded $session->start(); check on RedirectResponse +- \#1450 phpcbf: fix all at once +- \#1449 Simplify how to get indexData from mysql/mariadb +- \#1448 documentation: add missing application structures +- \#1447 add missing break; on loop cards to get card info at CreditCardRules +- \#1445 using existing is_cli() function in HTTPIncomingRequest +- \#1444 Dox for reorganized repo admin (4 of 4) +- \#1443 Fixes unit test output not captured +- \#1442 remove form view in app/View/ and form helper usage in create new items tutorial +- \#1440 Access to model's last inserted ID +- \#1438 Tailor the last few repo org names (3 of 4) +- \#1437 Replace repo org name in MOST php docs (2 of 4) +- \#1436 Change github organization name in docs (1 of 4) +- \#1432 Use mb_strlen to get length of columns +- \#1431 can't call run() method with params from commands migrations +- \#1427 Fixes "options" request call parameter in FeatureTestCase +- \#1416 performance improvement in DatabaseBaseResult +- \#1425 Ensure FileHandlerTest uses MockFileHandler +- \#1424 Fix FileMovingTest leaving cruft +- \#1423 Fix Controller use validate bug +- \#1422 fix Migrations.classNotFound +- \#1418 normalize composer.json +- \#1417 fix Parser::parsePairs always escapes +- \#1416 remove $psr4['TestsSupport'] definition in applicationConfigAutoload +- \#1415 remove unneeded "defined('BASEPATH') ... +- \#1413 set more_entropy = true in all uniqid() usage +- \#1412 function_exists() typo fixes on array_helper +- \#1411 add missing break; in loop in View::render() +- \#1410 Fix spark serve not working from commit 2d0b325 +- \#1407 Database: add missing call initialize() check on BaseConnection->prepare() +- \#1406 Add missing parameter to RouteCollectionInterface +- \#1405 Fix language string used in DownloadException +- \#1402 Correct class namespacing in the user guide +- \#1399 optional type hinting in guessExtension +- \#1398 Tweak throttle testing +- \#1397 Correcting FCPATH setting in tests/\_support/\_bootstrap.php +- \#1396 only register PSR4 "TestsSupport" namespace in "testing" environment +- \#1395 short array syntax in docs +- \#1394 add php 7.3 to travis config +- \#1390 Fixed not to output "Hello" at test execution +- \#1389 Capitalize email filename +- \#1388 Phpcs Auto-fix on commit +- \#1387 Redirect to named route +- \#1385 Fix migration page and update changelog +- \#1384 add missing ResponseInterface constants +- \#1383 fix TypeError in MemcachedHandler::\__construct() +- \#1381 Remove unused use statements +- \#1380 count() improvement, use truthy check +- \#1378 Update Filters language file +- \#1377 fix monolog will cause an error +- \#1376 Fix cannot use class Honeypot because already in use in AppFiltersHoneypot +- \#1375 Give download a header conforming to RFC 6266 +- \#1374 Missing feature migration. +- \#1373 Turning off casting for db insert/save +- \#1371 update method name in coding style +- \#1370 Toolbar needs logging. Fixes #1258 +- \#1369 Remove invisible character +- \#1368 UploadedFile->guessExtenstion()... +- \#1360 rm --cached php_errors.log file +- \#1357 Update template file is not .php compatibility +- \#1345 is_unique tried to connect to default database instead of defined in DBGroup +- \#1344 Do not quote unnecessary table options +- \#1343 Avoid adding two single quotes to constraint +- \#1335 Review and improvements in database drivers MySQLi, Postgre and SQLite +- \#1213 URI segment as page number in Pagination +- \#1180 using HTTPRequest instance to pull ip address +- \#622 Add Header Link Pagination diff --git a/docs/changelogs/v4.0.0-alpha.4.md b/docs/changelogs/v4.0.0-alpha.4.md new file mode 100644 index 000000000000..3b0adb21b9e4 --- /dev/null +++ b/docs/changelogs/v4.0.0-alpha.4.md @@ -0,0 +1,211 @@ +# Version 4.0.0-alpha.4 + +Release Date: Dec 15, 2018 + +**Next alpha release of CodeIgniter4** + +## Highlights + +- Refactor for consistency: folder application renamed to **app/**; constant `BASEPATH` renamed to `SYSTEMPATH` +- Debug toolbar gets its own config, history collector +- Numerous corrections and enhancements + +## Changed Files + +The list of changed files follows, with PR numbers shown. + +```text +. +├── admin/ +│ ├── docbot #1573 +│ ├── framework/composer.json #1555 +│ ├── release #1573 +│ ├── release-deploy #1573 +│ └── starter/composer.json #1573, #1600 +├── app/ +│ ├── Config/ +│ │ ├── App #1571 +│ │ ├── Autoload #1579 +│ │ ├── ContentSecurityPolicy #1581 +│ │ ├── Events #1571, #1595 +│ │ ├── Paths #1579 +│ │ ├── Routes #1579 +│ │ ├── Services #1579 +│ │ └── Toolbar #1571, #1579 +│ ├── Filters/ +│ │ └── Toolbar #1571 +│ └── Views/ +│ └── errors/* #1579 +├── public/ +│ └── index #1579 +├── system/ +│ ├── Autoloader/ +│ │ ├── Autoloader #1562 +│ │ └── FileLocator #1562, #1579 +│ ├── CLI/ +│ │ └── CommandRunner #1562 +│ ├── Config/ +│ │ ├── AutoloadConfig #1555, #1579 +│ │ ├── BaseConfig #1562 +│ │ └── Services #1571, #1562 +│ ├── Database/ +│ │ ├── BaseBuilder #a0fc68 +│ │ ├── MigrationRunner #1585 +│ │ └── MySQLi/Connection #1561, #8f205a +│ ├── Debug/ +│ │ ├── Collectors/* #1571, #1589, #1579 +│ │ ├── Exceptions #1579 +│ │ ├── Toolbar #1571 +│ │ ├── Views/toolbar.tpl #1571 +│ │ └── Views/toolbarloader.js #1594 +│ ├── Helpers/ +│ │ ├── form_helper #1548 +│ │ └── url_helper #1588 +│ ├── HTTP/ +│ │ ├── ContentSecurityPolicy #1581 +│ │ └── DownloadResponse +│ ├── I18n/ +│ │ └── Time #1603 +│ ├── Language/ +│ │ ├── Language #1587, #1562, #1610 +│ │ └── en/ +│ │ ├── CLI #1562 +│ │ └── HTTP #d7dfc5 +│ ├── Log/ +│ │ ├── Handlers/FileHandler #1579 +│ │ └── Logger #1562, #1579 +│ ├── Session/ +│ │ └── Handlers/DatabaseHandler #1598 +│ ├── Test/ +│ │ ├── CIUnitTest #1581, #1593, #1579 +│ │ ├── FeatureResponse #1593 +│ │ └── FeatureTestCase #1593 +│ ├── View/ +│ │ └── View #1571, #1579 +│ ├── bootstrap #1579 +│ ├── CodeIgniter #ab8b5b, #1579 +│ ├── Common #1569, #1563, #1562, #1601, #1579 +│ ├── Entity #4c7bfe, #1575 +│ └── Model #1602, #a0fc68 +├── tests/ +│ ├── Autoloader/ +│ │ ├── AutoloaderTest #1562, #1579 +│ │ └── FileLocatorTest #1562, #1579 +│ ├── Config/ +│ │ └── ServicesTest #1562 +│ ├── Database/ +│ │ └── Live/ModelTest #1602, #a0fc68 +│ ├── Files/ +│ │ └── FileTest #1579 +│ ├── Helpers/ +│ │ ├── FormHelperTest #1548 +│ │ └── URLHelperTest #1588 +│ ├── HTTP/ +│ │ ├── ContentSecurityPolicyTest #1581 +│ │ ├── DownloadResponseTest #1576, #1579 +│ │ ├── IncomingRequestDetectingTest #1576 +│ │ ├── IncomingRequestTest #1576 +│ │ ├── RedirectResponseTest #1562 +│ │ └── ResponseTest #1576 +│ ├── I18n/ +│ │ ├── TimeDifferenceTest #1603 +│ │ └── TimeTest #1603 +│ ├── Language/ +│ │ └── LanguageTest #1587, #1610 +│ ├── Log/ +│ │ └── FileHandlerTest #1579 +│ ├── Router/ +│ │ ├── RouterCollectionTest #1562 +│ │ └── RouterTest #1562 +│ ├── Test/ +│ │ ├── FeatureResponseTest #1593 +│ │ ├── FeatureTestCaseTest #1593 +│ │ └── TestCaseTest #1593 +│ ├── Validation/ +│ │ └── ValidationTest #1562 +│ ├── View/ +│ │ ├── ParserPluginTest #1562 +│ │ ├── ParserTest #1562 +│ │ └── ViewTest #1562 +│ ├── CodeIgniterTest #1562 +│ ├── CommonFunctionsTest #1569, #1562 +│ └── EntityTest #4c7bfe, #1575 +├── user_guide_src/source/ +│ ├── cli/ +│ │ ├── cli #1579 +│ │ └── cli_commands #1579 +│ ├── concepts/ +│ │ ├── autoloader #1579 +│ │ ├── mvc #1579 +│ │ ├── services #1579 +│ │ └── structure #1579 +│ ├── database/ +│ │ └── configuration #1579 +│ ├── dbmgt/ +│ │ ├── migration #1579 +│ │ └── seeds #1579 +│ ├── general/ +│ │ ├── common_functions #d7dfc5, #1579 +│ │ ├── configuration #1608 +│ │ └── errors #1579 +│ ├── installation/ +│ │ └── downloads #1579 +│ ├── models/ +│ │ └── entities #547792, #1575 +│ ├── outgoing/ +│ │ ├── localization #1610 +│ │ ├── response #1581, #1579 +│ │ └── view_parser #1579 +│ ├── testing/ +│ │ ├── debugging #1579 +│ │ └── overview #1593, #1579 +│ └── tutorial/ +│ ├── news_section #1586 +│ └── static_pages #1579 +├── composer.json #1555 +├── ComposerScripts #1551 +├── spark #1579 +└── Vagrantfile.dist #1459 +``` + +## PRs merged + +- \#1610 Test, fix & enhance Language +- \#a0fc68 Clear binds after inserts, updates, and find queries +- \#1608 Note about environment configuration in UG +- \#1606 release framework script clean up +- \#1603 Flesh out I18n testing +- \#8f305a Catch mysql connection errors and sanitize username and password +- \#1602 Model's first and update didn't work with primary key-less tables +- \#1601 clean up ConfigServices in Common.php +- \#1600 admin/starter/composer.json clean up +- \#1598 use $defaultGroup as default value for database session DBGroup +- \#1595 handle fatal error via pre_system +- \#1594 Fix Toolbar invalid css +- \#1593 Flesh out the Test package testing +- \#1589 Fix Toolbar file loading throw exception +- \#1588 Fix site_url generate invalid url +- \#1587 Add Language fallback +- \#1586 Fix model namespace in tutorial +- \#1585 Type hint MigrationRunner methods +- \#4c7bfe Entity fill() now respects mapped properties +- \#547792 Add \_get and \_set notes for Entity class +- \#1582 Fix changelog index & common functions UG indent +- \#1581 ContentSecurityPolicy testing & enhancement +- \#1579 Use Absolute Paths +- \#1576 Testing13/http +- \#1575 Adds ?integer, ?double, ?string, etc. cast types +- \#ab8b5b Set baseURL to example.com during testing by default. +- \#d7dfc5 Doc tweaks for redirects +- \#1573 Lessons learned +- \#1571 Toolbar updates +- \#1569 Test esc() with different encodings and ignore app-only helpers +- \#1563 id attribute support added for csrf_field +- \#1562 Integrates Autoloader and FileLocator +- \#1561 Update Connection.php +- \#1557 remove prefix on use statements +- \#1556 using protected instead of public modifier for setUp() function in tests +- \#1555 autoload clean up: remove PsrLog namespace from composer.json +- \#1551 remove manual define "system/" directory prefix at ComposerScripts +- \#1548 allows setting empty html attr +- \#1459 Add Vagrantfile diff --git a/docs/changelogs/v4.0.0-alpha.5.md b/docs/changelogs/v4.0.0-alpha.5.md new file mode 100644 index 000000000000..4e955cb182d2 --- /dev/null +++ b/docs/changelogs/v4.0.0-alpha.5.md @@ -0,0 +1,259 @@ +# Version 4.0.0-alpha.5 + +Release Date: Jan 30, 2019 + +**Next alpha release of CodeIgniter4** + +## Highlights + +- Added `$maxQueries` setting to **app/Config/Toolbar.php** +- Updated PHP dependency to 7.2 +- New feature branches have been created for the email and queue modules, so they don't impact the release of 4.0.0 +- Dropped several language messages that were unused (e.g., `Migrations.missingTable`) and added some new ones (e.g., `Migrations.invalidType`) +- Lots of bug fixes, especially for the database support +- Provided filters (`CSRF`, `Honeypot`, `DebugToolbar`) have been moved from **app/Filters/** to **system/Filters/** +- Revisited the installation and tutorial sections of the user guide +- Code coverage is at 77% ... getting ever closer to our target of 80% :) + +We hope this will be the last alpha, and that the next pre-release will be our first beta ... fingers crossed! + +## Changed Files + +The list of changed files follows, with PR numbers shown. + +```text +. +├── admin/ +│ ├── starter/ +│ │ ├── README.md #1637 +│ │ └── app/Config/Paths.php #1685 +│ └── release-appstarter #1685 +├── app/ +│ └── Config/ +│ ├── Filters #1686 +│ ├── Modules #1665 +│ └── Services #614216 +│ └── Toolbar +├── contributing/ +│ ├── guidelines.rst #1671, #1673 +│ └── internals.rst #1671 +├── public/ +│ └── index.php #1648, #1670 +├── system/ +│ ├── Autoloader/ +│ │ ├── Autoloader #1665, #1672 +│ │ └── FileLocator #1665 +│ ├── Commands/ +│ │ └── Database/MigrationRollback #1683 +│ ├── Config/ +│ │ ├── BaseConfig #1635 +│ │ ├── BaseService #1635, #1665 +│ │ ├── Paths #1626 +│ │ ├── Services #614216, #3a4ade, #1643 +│ │ └── View #1616 +│ ├── Database/ +│ │ ├── BaseBuilder #1640, #1663, #1677 +│ │ ├── BaseConnection #1677 +│ │ ├── Config #6b8b8b, #1660 +│ │ ├── MigrationRunner #81d371, #1660 +│ │ └── Query #1677 +│ ├── Database/Postgre/ +│ │ └── Builder #d2b377 +│ ├── Debug/Toolbar/Collectors/ +│ │ ├── Logs #1654 +│ │ └── Views #3a4ade +│ ├── Events/ +│ │ └── Events #1635 +│ ├── Exceptions/ +│ │ └── ConfigException #1660 +│ ├── Files/ +│ │ ├── Exceptions/FileException #1636 +│ │ └── File #1636 +│ ├── Filters/ +│ │ ├── Filters #1635, #1625, #6dab8f +│ │ ├── CSRF #1686 +│ │ ├── DebugToolbar #1686 +│ │ └── Honeypot #1686 +│ ├── Helpers/ +│ │ ├── form_helper #1633 +│ │ ├── html_helper #1538 +│ │ └── xml_helper #1641 +│ ├── HTTP/ +│ │ ├── ContentSecurityPolicy #1641, #1642 +│ │ └── URI #2e698a +│ ├── Language/ +│ │ ├── /en/Files #1636 +│ │ └── Language #1641 +│ ├── Log/ +│ │ └── Handlers/FileHandler #1641 +│ ├── Router/ +│ │ ├── RouteCollection #1665, #5951c3 +│ │ └── Router #9e435c, #7993a7, #1678 +│ ├── Session/ +│ │ ├── Handlers/BaseHandler #1684 +│ │ ├── Handlers/FileHandler #1684 +│ │ ├── Handlers/MemcachedHandler #1679 +│ │ └── Session #1679 +│ ├── bootstrap #81d371, #1665 +│ ├── Common #1660 +│ ├── Entity #1623, #1622 +│ └── Model #1617, #1632, #1656, #1689 +├── tests/ +│ └── README.md #1671 +├── tests/system/ +│ ├── API/ +│ │ └── ResponseTraitTest #1635 +│ ├── Autoloader/ +│ │ ├── AutoloaderTest #1665 +│ │ └── FileLocatorTest #1665, #1686 +│ ├── CLI/ +│ │ ├── CommandRunnerTest #1635 +│ │ └── CommandsTest #1635 +│ ├── Config/ +│ │ ├── BaseConfigTest #1635 +│ │ ├── ConfigTest #1643 +│ │ └── ServicesTest #1635, #1643 +│ ├── Database/Builder/ +│ │ ├── AliasTest #bea1dd +│ │ ├── DeleteTest #1677 +│ │ ├── GroupTest #1640 +│ │ ├── InsertTest #1640, #1677 +│ │ ├── LikeTest #1640, #1677 +│ │ ├── SelectTest #1663 +│ │ ├── UpdateTest #1640, #1677 +│ │ └── WhereTest #1640, #1677 +│ ├── Database/Live/ +│ │ ├── AliasTest #1675 +│ │ ├── ConnectTest #1660, #1675 +│ │ ├── ForgeTest #6b8b8b +│ │ ├── InsertTest #1677 +│ │ ├── Migrations/MigrationRunnerTest #1660, #1675 +│ │ └── ModelTest #1617, #1689 +│ ├── Events/ +│ │ └── EventTest #1635 +│ ├── Filters/ +│ │ ├── CSRFTest #1686 +│ │ ├── DebugToolbarTest #1686 +│ │ ├── FiltersTest #1635, #6dab8f, #1686 +│ │ └── HoneypotTest #1686 +│ ├── Helpers/ +│ │ ├── FormHelperTest #1633 +│ │ └── XMLHelperTest #1641 +│ ├── Honeypot/ +│ │ └── HoneypotTest #1686 +│ ├── HTTP/ +│ │ ├── ContentSecurityPolicyTest #1641 +│ │ └── IncomingRequestTest #1641 +│ ├── Language/ +│ │ └── LanguageTest #1643 +│ ├── Router/ +│ │ ├── RouteCollectionTest #5951c3 +│ │ └── RouterTest #9e435c +│ ├── Validation/ +│ │ └── RulesTest #1689 +│ └── View/ +│ ├── ParserPluginTest #1669 +│ └── ParserTest #1669 +├── user_guide_src/ +│ ├── concepts/ +│ │ ├── autoloader #1665 +│ │ └── structure #1648 +│ ├── database/ +│ │ ├── connecting #1660 +│ │ └── transactions #1645 +│ ├── general/ +│ │ ├── configuration #1643 +│ │ ├── managing_apps #5f305a, #1648 +│ │ └── modules #1613, #1665 +│ ├── helpers/ +│ │ └── form_helper #1633 +│ ├── incoming/ +│ │ ├── filters #1686 +│ │ ├── index #4a1886 +│ │ └── methodspoofing #4a1886 +│ ├── installation/ +│ │ ├── index #1690, #1693 +│ │ ├── installing_composer #1673, #1690 +│ │ ├── installing_git #1673, #1690 +│ │ ├── installing_manual #1673, #1690 +│ │ ├── repositories #1673, #1690 +│ │ ├── running #1690, #1691 +│ │ └── troubleshooting #1690, #1693 +│ ├── libraries/ +│ │ ├── honeypot #1686 +│ │ ├── index #1643, #1690 +│ │ └── throttler #1686 +│ └── tutorial/ +│ ├── create_news_item #1693 +│ ├── index #1693 +│ ├── news_section #1693 +│ └── static_pages #1693 +├── composer.json #1670 +├── contributing.md #1670 +├── README.md #1670 +├── spark #1648 +└── .travis.yml #1649, #1670 +``` + +## PRs merged + +- \#1693 Docs/tutorial +- \#5951c3 Allow domain/sub-domain routes to overwrite existing routes +- \#1691 Update the running docs +- \#1690 Rework install docs +- \#bea1dd Additional AliasTests for potential LeftJoin issue +- \#1689 Model Validation Fix +- \#1687 Add copyright blocks to filters +- \#1686 Refactor/filters +- \#1685 Fix admin - app starter creation +- \#1684 Updating session id cleanup for filehandler +- \#1683 Fix migrate:refresh bug +- \#d2b377 Fix Postgres replace command to work with the new way of storing binds +- \#4a1886 Document method spoofing +- \#2e698a urldecode URI keys as well as values. +- \#1679 save_path - for memcached +- \#1678 fix route not replacing forward slashes +- \#1677 Implement Don't Escape feature for db engine +- \#1675 Add missing test group directives +- \#1674 Update changelog +- \#1673 Updated download & installation docs +- \#1672 Update Autoloader.php +- \#1670 Update PHP dependency to 7.2 +- \#1671 Update docs +- \#1669 Enhance Parser & Plugin testing +- \#1665 Composer PSR4 namespaces are now part of the modules auto-discovery +- \#6dab8f Filters match case-insensitively +- \#1663 Fix bind issue that occurred when using whereIn +- \#1660 Migrations Tests and database tweaks +- \#1656 DBGroup in \__get() allows validating "database" data outside the model +- \#1654 Toolbar - Return Logger::$logCache items +- \#1649 remove php 7.3 from "allow_failures" in travis config +- \#1648 Update "managing apps" docs +- \#1645 Fix confusion about enabling transactions (docu) +- \#1643 Remove email module +- \#1642 CSP nonce attribute value in "" +- \#81d371 Safety checks for config files during autoload and migrations +- \#1641 More unit testing tweaks +- \#1640 Update getCompiledX methods in BaseBuilder +- \#1637 Fix starter README +- \#1636 Refactor Files module +- \#5f305a UG - Typo in managing apps +- \#1635 Unit testing enhancements +- \#1633 Uses csrf_field and form_hidden +- \#1632 DBGroup should be passed to ->run instead of ->setRules +- \#1631 move use statement after License doc at UploadedFile class +- \#1630 Update copyright to 2019 +- \#1629 "application" to "app" directory doc and comments +- \#3a4ade view() now properly reads the app config again +- \#7993a7 Final piece to get translateURIDashes working appropriately +- \#9e435c TranslateURIDashes fix +- \#1626 clean up Paths::$viewDirectory property +- \#1625 After matches is not set empty +- \#1623 Property was not cast if it was defined as nullable +- \#1622 Nullable support for \__set +- \#1617 countAllResults() should respect soft deletes +- \#1616 Fix View config merge order +- \#614216 Moved honeypot service out of the app Services file to the system Services where it belongs +- \#6b8b8b Allow db forge and utils to take an array of connection info instead of a group name +- \#1613 Typo in documentation +- \#1538 img fix(?) - html_helper diff --git a/docs/changelogs/v4.0.0-beta.1.md b/docs/changelogs/v4.0.0-beta.1.md new file mode 100644 index 000000000000..41947c0b37cf --- /dev/null +++ b/docs/changelogs/v4.0.0-beta.1.md @@ -0,0 +1,178 @@ +# Version 4.0.0-beta.1 + +Release Date: Mar 1, 2019 + +## Highlights + +- New View Layouts provide a simple way to create site view templates. +- Fixed user guide CSS for proper wide table display +- Converted UploadedFile to use system messages +- Numerous database, migration & model bugs fixed +- Refactored unit testing for appstarter & framework distributions + +## New Messages + +- `Database.tableNotFound` +- `HTTP.uploadErr...` + +## App Changes + +- **app/Config/Cache** has a new setting: database +- **app/Views/welcome_message** has logo tinted +- **composer.json** has a case correction +- **.env** adds `CI_ENVIRONMENT` suggestion + +## Changed Files + +The list of changed files follows, with PR numbers shown. + +```text +. +├── app/ +│ ├── Config/ +│ │ └── Cache #1719 +│ └── Views/ +│ └── welcome_message #1774 +├── system/ +│ ├── Cache/Handlers/ +│ │ └── RedisHandler #1719, #1723 +│ ├── Config/ +│ │ ├── Config #37dbc1 +│ │ └── Services #1704, #37dbc1 +│ ├── Database/ +│ │ ├── Exceptions/DatabaseException #1739 +│ │ ├── Postgre/ +│ │ │ └── Builder #1733 +│ │ ├── SQLite3/ +│ │ │ ├── Connection #1739 +│ │ │ ├── Forge #1739 +│ │ │ └── Table #1739 +│ │ ├── BaseBuilder #36fbb8, #549d7d +│ │ ├── BaseConnection #549d7d, #1739 +│ │ ├── Forge #1739 +│ │ ├── MigrationRunner #1743 +│ │ ├── Query #36fbb8 +│ │ └── Seeder #1722 +│ ├── Debug/ +│ │ └── Exceptions #1704 +│ ├── Files/ +│ │ └── UploadedFile #1708 +│ ├── Helpers/ +│ │ ├── date_helper #1768 +│ │ ├── number_helper #1768 +│ │ ├── security_helper #1768 +│ │ ├── text_helper #1768 +│ │ └── url_helper #1768 +│ ├── HTTP/ +│ │ └── Request #1725 +│ ├── Language/en/ +│ │ ├── Database #1739 +│ │ ├── HTTP #1708 +│ │ └── View #1757 +│ ├── Router/ +│ │ ├── RouteCollection #1709, #1732 +│ │ └── Router #1764 +│ ├── Test/ +│ │ ├── ControllerResponse #1740 +│ │ ├── ControllerTester #1740 +│ │ ├── DOMParser #1740 +│ │ └── FeatureResponse #1740 +│ ├── Validation/ +│ │ ├── Rules #1738, #1743 +│ │ └── Validation #37dbc1, #1763 +│ ├── View/ +│ │ └── View #1729 +│ ├── Common #1741 +│ ├── Entity #6e549a, #1739 +│ └── Model #4f4a37, #6e549a, #37dbc1, #1712, #1763 +├── tests/system/ +│ ├── Database/ +│ │ ├── BaseQueryTest #36fbb8 +│ │ ├── Live/ +│ │ │ ├── SQLite3/AlterTableTest #1739, #1740 +│ │ │ ├── ForgeTest #1739, #1745 +│ │ │ └── ModelTest #37dbc1, #4ff1f5, #1763 +│ │ └── Migrations/MigrationRunnerTest #1743 +│ ├── Helpers/ +│ │ └── FilesystemHelperTest #1740 +│ ├── I18n/ +│ │ └── TimeTest # 1736 +│ ├── Test/ +│ │ └── DOMParserTest #1740 +│ ├── Validation/ +│ │ └── ValidationTest #1763 +│ ├── View/ +│ │ └── ViewTest #1729 +│ └── EntityTest #6e549a, #1736 +├── user_guide_src/ +│ ├── _themes/.../ +│ │ └── citheme.css #1696 +│ ├── changelogs/ +│ │ └── v4.0.0-alpha.5 #1699 +│ ├── database/ +│ │ └── migrate #1696 +│ ├── dbmgmt/ +│ │ └── forge #1751 +│ ├── installation/ +│ │ ├── install_manual #1699 +│ │ └── running #1750 +│ ├── intro/ +│ │ └── psr #1752 +│ ├── libraries/ +│ │ ├── caching #1719 +│ │ └── validation #1742 +│ ├── models/ +│ │ └── entities #1744 +│ ├── outgoing/ +│ │ ├── index #1729 +│ │ └── view_layouts #1729 +│ ├── testing/ +│ │ └── controllers #1740 +│ └── tutorial/ +│ └── static_pages #1763 +├── composer.json #1755 +└── .env #1749 +``` + +## PRs merged + +- \#1774 Housekeeping for beta.1 +- \#1768 Helper changes - signatures & typos +- \#1764 Fix routing when no default route has been specified. Fixes #1758 +- \#1763 Ensure validation works in Model with errors as part of rules. Fixes #1574 +- \#1757 Correct the unneeded double-quote (typo) +- \#1755 lowercase 'vfsStream' in composer files +- \#1752 Fixed typo preventing link format +- \#1751 Guide: Moving misplaced text under correct heading +- \#1750 Remove reference to Encryption Key in User Guide +- \#1749 Adding environment to .env +- \#1745 Updated composite key tests for SQLite3 support. Fixes #1478 +- \#1744 Update entity docs for current framework state. Fixes #1727 +- \#1743 Manually sort migrations found instead of relying on the OS. Fixes #1666 +- \#1742 Fix required_without rule bug. +- \#1741 Helpers with a specific namespace can be loaded now. Fixes #1726 +- \#1740 Refactor test support for app starter +- \#1739 Fix typo +- \#1738 Fix required_with rule bug. Fixes #1728 +- \#1737 Added support for dropTable and modifyTable with SQLite driver +- \#1736 Accommodate long travis execution times +- \#1733 Fix increment and decrement errors with Postgres +- \#1732 Don't check from CLI in Routes. Fixes #1724 +- \#1729 New View Layout functionality for simple template +- \#1725 Update Request.php +- \#1723 Log an error if redis authentication fails +- \#1722 Seeder adds default namespace to seeds +- \#1719 Update Cache RedisHandler to support selecting a database +- \#4ff1f5 Additional tests for inserts and required validation failing (#1717) +- \#549d7d Another try at getting escaping working correctly both when in and out of models +- \#1712 Minor readability changes +- \#37dbc1 Ensure Model validation rules can be a group name +- \#1709 Fix resource routing websafe method order checking +- \#1708 Language for UploadedFile +- \#36fbb8 BaseBuilder should only turn off Connection's setEscapeFlags when running a query... +- \#6e549a Provide default baseURL that works with the development server for easier first time setup (Fixes #1646) +- \#1704 Fix viewsDirectory bug (#1701) +- \#4f4a37 remove debugging from Model. +- \#1699 Fix install link in user guide +- \#1696 Fix page structure etc +- \#1695 Tidy up code blocks in the user guide diff --git a/docs/changelogs/v4.0.0-beta.2.md b/docs/changelogs/v4.0.0-beta.2.md new file mode 100644 index 000000000000..3bd8fc35d889 --- /dev/null +++ b/docs/changelogs/v4.0.0-beta.2.md @@ -0,0 +1,265 @@ +# Version 4.0.0-beta.2 + +Release Date: April 4, 2019 + +## Highlights + +- A number of fixes & improvements, importantly for the `Model` and testing classes +- Models now require a primary key +- Generated API docs accessible at +- Validation rules have been enhanced +- **.htaccess** beefed up + +## New messages + +- `Database.noPrimaryKey` +- `Database.forFindColumnHaveMultipleColumns` +- `Database.forEmptyInputGiven` + +## App Changes + +- Updated **app/Config/Events** +- Added **app/Controllers/BaseController** +- Added **tests/** folder for unit testing +- Added **phpunit.xml.dist** for unit testing configuration + +## Changed Files + +The list of changed files follows, with PR numbers shown. + +```text +. +├── .htaccess #1900 +├── app/ +│ ├── Config/ +│ │ └── Events #1856 +│ └── Controllers/ +│ ├── BaseController #1847 +│ └── Home #1847 +├── contributing/ +│ ├── README.rst #1846 +│ └── styleguide #1872 +├── contributing.md #1846 +├── phpdoc.dist.xml #1872 +├── system/ +│ ├── Autoloader/ +│ │ └── FileLocator #1860 +│ ├── Cache/Handlers/ +│ │ ├── FileHandler #1895 +│ │ ├── MemcachedHandler #1895 +│ │ ├── PredisHandler #1895 +│ │ ├── RedisHandler #1863, #1895 +│ │ └── WincacheHandler #1895 +│ ├── CLI/ +│ │ └── CLI #1891, #1910 +│ ├── Commands/ +│ │ ├── Server/Serve #1893 +│ │ └── Utilities/Routes #1859 +│ ├── Config/ +│ │ ├── BaseConfig #1811 +│ │ └── Routes #1847, #1850 +│ ├── Database/ +│ │ ├── BaseBuilder $1776, #1902 +│ │ ├── BaseConnection #1899 +│ │ ├── Forge #1844, #1899 +│ │ ├── MigrationRunner #1860, #1865 +│ │ ├── MySQLi/Connection #1896 +│ │ ├── MySQLi/Forge #1899 +│ │ ├── Postgre/Builder #1902 +│ │ ├── Postgre/Forge #1899 +│ │ ├── Query #1805, #1771 +│ │ ├── SQLite3/Builder #1902 +│ │ └── SQLite3/Forge #1899 +│ ├── Debug/ +│ │ ├── Toolbar/Collectors/History #1869 +│ │ └── Toolbar #1897 +│ ├── Events/ +│ │ └── Events #1867 +│ ├── Exceptions/ +│ │ ├── ModelException #1829 +│ │ └── PageNotFoundException #1844 +│ ├── Files/ +│ │ └── File #1809, #1854 +│ ├── Helpers/ +│ │ ├── date_helper #d08b68 +│ │ ├── form_helper #1803 +│ │ ├── html_helper #1803 +│ │ ├── number_helper #d08b68, #1803 +│ │ ├── security_helper #d08b68 +│ │ ├── text_helper #d08b68, #1803 +│ │ ├── url_helper #d08b68, #1803 +│ │ └── xml_helper #1803 +│ ├── Honeypot/ +│ │ └── Honeypot #1894 +│ ├── HTTP/ +│ │ ├── Header #1769 +│ │ └── IncomingRequest #1831 +│ ├── Language/en/ +│ │ └── Database #1829, #1861, #1902 +│ ├── Router/ +│ │ ├── RouteCollection #1769 +│ │ └── Router #1839, #1882 +│ ├── Session/ +│ │ └── Session #1769 +│ ├── Test/ +│ │ ├── ControllerTester #1769, #1848, #1855 +│ │ └── DOMParser #1848 +│ ├── Validation/ +│ │ ├── FormatRules #1762, #1863 +│ │ ├── Rules #1791, #1814, #1818, #1862 +│ │ ├── Validation #1769 +│ │ └── Views/list #1828 +│ ├── View/ +│ │ ├── Filters #1769 +│ │ ├── Parser #1769 +│ │ └── View #1769, #1827 +│ ├── CodeIgniter #1769, #1804, #1590 +│ ├── Common #1802, #895ae0 +│ ├── ComposerScripts #1804 +│ ├── Controller #1769, #1850 +│ ├── Entity #1769, #1804 +│ └── Model #1793, #1769, #1804, #1808, #1812, #1813, #1817, #1829, #1746, #1861 +├── tests/system/ +│ ├── Cache/ +│ │ ├── Handlers/ +│ │ │ ├── FileHandlerTest #1796, #1895 +│ │ │ ├── MemcachedHandlerTest #1895 +│ │ │ └── RedisHandlerTest #1895 +│ │ └── CacheFactoryTest #1796 +│ ├── CLI/ +│ │ └── CLITest #1910 +│ ├── Config/ +│ │ ├── BaseConfigTest #1811 +│ │ └── ConfigTest #1811 +│ ├── Database/ +│ │ ├── Builder/EmptyTest #1902 +│ │ ├── Builder/SelectTest #1902 +│ │ ├── Live/ModelTest #1817, #1829, #1861 +│ │ └── Live/WhereTest #1906 +│ ├── Events/ +│ │ └── EventsTest #1867 +│ ├── HTTP/ +│ │ └── ContentSecurityPolicyTest #1848 +│ ├── Router/ +│ │ └── RouteCollectionTest #1822, #1912, #1913 +│ ├── Test/ +│ │ ├── ControllerTesterTest #1848, #1855 +│ │ └── DOMParserTest #1848 +│ ├── Validation/ +│ │ ├── FormatRulesTest #1762 +│ │ └── RulesTest #1791 +│ ├── View/ +│ │ └── ViewTest #1827, #1836 +│ └── ControllerTest #1850 +└── user_guide_src/ + ├── cli/ + │ ├── cli_commands #1777 + │ └── cli_library #1892, #1910 + ├── concepts/ + │ └── services #1811 + ├── database/ + │ └── examples #1794 + ├── dbmgmt/ + │ ├── forge #1844, #1899 + │ └── migration #1860, #1865 + ├── extending/ + │ ├── basecontroller #1847 + │ └── core_classes #1847 + ├── general/ + │ └── common_functions #1802, #1895 + ├── helpers/ + │ ├── number_helper #d08b68 + │ └── url_helper #1803 + ├── incoming/ + │ └── routing #1908 + ├── libraries/ + │ ├── caching #1895 + │ ├── files #1790, #1854 + │ ├── pagination #1823 + │ ├── sessions #1843 + │ └── validation #1814, #1828, #1862 + ├── models/ + │ └── models #1817, #1820, #1829, #1746, #1861 + ├── outgoing/ + │ └── view_layouts #1827 + └── testing/ + └── controllers #1848 +``` + +## PRs merged + +- \#1913 More RouteCollection tests for overwriting. Closes #1692 +- \#1912 Additional RouteCollectionTests +- \#1910 Added print method to CLI library so you can print multiple times on same line +- \#1908 Add filter parameters to User Guide +- \#1906 SubQuery related test cases w.r.t #1775 +- \#1902 BaseBuilder corrections +- \#1900 Update .htaccess for better security and caching +- \#1899 Database Forge correction +- \#1897 Toolbar fix w.r.t #1779 +- \#1896 Mysql connection issue with SSL cert (#1219) +- \#1894 Typo fixes +- \#1893 Fix spark serve with remove escapeshellarg() +- \#1892 Add CLI background color list to the user guide +- \#1891 Allow CLI::strlen null parameter +- \#1886 Fixed issue #1880, fixed a few typos and updated code style +- \#1882 Router Changes w.r.t #1541 +- \#1873-1889 Docs: move namespace declarations & add missing class docblocks +- \#1872 Docs: fix phpdoc config +- \#1871 Unmatched Cache Library `get()` return null +- \#1869 History::SetFiles check #1778 +- \#1863 Module wise Typos changes +- \#1861 New method Find Column w.r.t. #1619 +- \#1860 Migrationrunner use autoloader +- \#1867 Events should actually work with any callable now. Fixes #1835 +- \#1865 MigrationRunner issue with definition resolved +- \#1862 required_with and required_without definition changes +- \#1859 Ignore callbacks in routes list +- \#1858 Typos correction in DB module +- \#1856 ensure ob_end_flush() when ob_get_level() \> 0 on pre_system event +- \#1855 Fix: ControllerTester::execute. Fixes #1834 +- \#1854 File::move now returns new file instance for relocated file. Fixes #1782 +- \#1851 Replace old CI3 .gitignore with root CI4 version +- \#1850 Secure routable controller methods +- \#1848 Test: fix & test Test/ControllerTest, tested +- \#1847 Extend Controller to BaseController by default +- \#1846 Fix contributing links +- \#1844 Model Fix +- \#1843 Replace CI3 $this->input reference +- \#1842 Exception 'forPageNotFound' missing default value +- \#1839 Don't replace slashes with backslashes in the to route +- \#1836 Test: Improve ViewView coverage +- \#1831 Fix some PHPDoc comment errors +- \#1829 Improve: Models now require a primary key. This is partially to keep the code ... +- \#1828 Fix: Remove bootstrap styles from validation views. +- \#1827 Fix: Adding include method to View library to render view partials... views. +- \#1823 Docs: Remove legacy Bootstrap references in Pagination class +- \#1822 Test: enhance RouteCollection coverage +- \#1820 Fix: Correct sphinx errors in model.rst +- \#1819 Improve: Add apibot for API docs using phpDocumentor +- \#1818 Improve: Code improvement in exact_length Rule +- \#1817 Improve: Model setValidationMessage functions introduced +- \#895ae0 Fix: Start session whenever using the old command +- \#1814 Enhance: extended exact_length[1,3,5] +- \#1813 Fix: Model::save fix for earlier PRs +- \#1812 Test: Improve Filters coverage +- \#1811 Test: Config module coverage improved +- \#1809 Fix failed file move. Fixes #1785 +- \#1808 Fix: Fix save method return value +- \#1805 Docs: Query Class Changes +- \#1804 Docs: Some Base Functional Changes +- \#1803 Docs: Some Helper Changes +- \#1802 Docs: Common function correction +- \#1796 Test: Improve Cache coverage +- \#1794 Replace nonexistent "getAffectedRows" +- \#1793 Set Model->chunk return type +- \#1791 Fix: Remove is_numeric tests in ValidationRules +- \#d08b68 Fix in ControllerTester for missing UserAgent +- \#1790 Correction of typos in documentation as mentioned in issue #1781 +- \#1777 Add CLI namespace to example +- \#1776 Fix: replace only last operator in field name +- \#1771 Fix: fix typo in matchSimpleBinds +- \#1769 Correction in Methods and Spellings +- \#1762 Fix: decimal rule. shouldn't it accept integers? +- \#1746 Improve: Update Model, to selective update created_at / updated_at field. +- \#1590 Improve: Enhance 404Override diff --git a/docs/changelogs/v4.0.0-beta.3.md b/docs/changelogs/v4.0.0-beta.3.md new file mode 100644 index 000000000000..25f3ebc5fd63 --- /dev/null +++ b/docs/changelogs/v4.0.0-beta.3.md @@ -0,0 +1,183 @@ +# Version 4.0.0-beta.3 + +Release Date: May 7, 2019 + +## Highlights + +- Type hinting added throughout & typos corrected (see API docs) +- Fixed a number of model, database, validation & debug toolbar issues + +## New Messages + +- `Database.fieldNotExists` +- `Validation.equals` +- `Validation.not_equals` + +## App Changes + +- Removed `$salt` config item in **app/Config/App** +- Enabled migrations by default in **app/Config/Migrations** +- Simplified **public/.htaccess** + +## Changed Files + +The list of changed files follows, with PR numbers shown. + +```text +. +├── admin/ +│ ├── framework/composer.json #1935 +│ └── starter/composer.json #1935 +├── app/ +│ └── Config/ +│ ├── App #1973 +│ └── Migrations #1973 +├── public/ +│ └── .htaccess #1973 +├── system/ +│ ├── API/ +│ │ └── ResponseTrait #1962 +│ ├── Commands/ +│ │ └── Server/rewrite #1925 +│ ├── Config/ +│ │ ├── AutoloadConfig #1974 +│ │ └── BaseConfig #1947 +│ ├── Database/ #1938 +│ │ ├── BaseBuilder #1923, #1933, #1950 +│ │ ├── BaseConnection #1950 +│ │ ├── BaseResult #1917 +│ │ ├── BaseUtils #1917 +│ │ ├── Forge #1917 +│ │ └── SQLite3/ +│ │ ├── Connection #1917 +│ │ └── Result #1917 +│ ├── Debug/ +│ │ ├── Toolbar #1916 +│ │ ├── Toolbar/Collectors/ +│ │ │ ├── BaseCollector #1972 +│ │ │ ├── Config #1973 +│ │ │ ├── History #1945 +│ │ │ └── Routes #1949 +│ │ └── Toolbar/Views/ +│ │ ├── _config.tpl.php #1973 +│ │ ├── toolbar.tpl.php #1972 +│ │ └── toolbarloader.js #1931, #1961 +│ ├── Exceptions/ +│ │ └── EntityException #1927 +│ ├── Filters/ +│ │ └── Filters #1970, #1985 +│ ├── Format/ +│ │ ├── FormatterInterface #1918 +│ │ ├── JSONFormatter #1918 +│ │ └── XMLFormatter #1918 +│ ├── HTTP/ +│ │ ├── CLIRequest #1956 +│ │ └── CURLRequest #1915 +│ ├── Images/Handlers/ +│ │ └── BaseHandler #1956 +│ ├── Language/en/ +│ │ ├── Database #1917 +│ │ └── Validation #1952 +│ ├── Router/ +│ │ ├── Router #1968 +│ │ └── RouteCollection #1977 +│ ├── Session/Handlers/ +│ │ └── RedisHandler #1980 +│ ├── Test/ +│ │ ├── FeatureResponse #1977 +│ │ └── FeatureTestCase #1977 +│ ├── Validation/ +│ │ ├── FormatRules #1957 +│ │ └── Rules #1952 +│ ├── View/ +│ │ └── Table #1984 +│ ├── Entity #1911, #1927, #1943, #1950, #1955 +│ └── Model #1930, #1943, #1963, #1981 +├── tests/system/ +│ ├── Config/ +│ │ └── BaseConfigTest #1947 +│ ├── Database/ +│ │ ├── BaseQueryTest #1917 +│ │ ├── Live/ +│ │ │ ├── DbUtilsTest #1917, #1943 +│ │ │ ├── ForgeTest #1917 +│ │ │ ├── GetTest #1917, #1943 +│ │ │ └── ModelTest #1930, #1943, #1981 +│ │ └── Migrations/ +│ │ ├── MigrationRunnerTest #1917 +│ │ └── MigrationTest #1943 +│ ├── Filters/ +│ │ └── FilterTest #1985 +│ ├── Test/ +│ │ └── FeatureTestCaseTest #1977 +│ ├── Validation/ +│ │ ├── FormatRulesTest #1957 +│ │ └── RulesTest #1952, #cbe4b1d +│ ├── View/ +│ │ └── TableTest #1978, #1984 +│ └── EntityTest #1911 +├── user_guide_src/ +│ ├── dbmgmt/ +│ │ └── migrations #1973 +│ ├── installation/ +│ │ ├── installing_composer #1926 +│ │ └── running #1935 +│ ├── libraries/ +│ │ └── validation #1952, #1954, #1957 +│ ├── outgoing/ +│ │ ├── index #1978 +│ │ └── table #1978, #1984 +│ └── testing/ +│ ├── feature #1977 +│ └── overview #1936 +├── .htaccess #1939 +├── composer.json #1935 +└── phpdoc.dist.xml #1987 +``` + +## PRs merged + +- \#1987 Correct API docblock problems for phpdocs +- \#1986 Update docblock version to 4.0.0 +- \#1985 Fix filter processing. Fixes #1907 +- \#cbe4b1d Fix SQLite tests +- \#1984 Add footing to HTML Table +- \#1981 Using soft deletes should not return an ambiguous field message when joining tables +- \#1980 Corrected return value for Session/RedisHandler::read +- \#1978 Implement HTML Table for CI4 (missed feature) +- \#1977 Test/featuretestcase +- \#1974 Remove framework classes from the autoloader classmap +- \#1973 Defaultfixes +- \#1972 Toolbar fix for custom collectors +- \#1970 Add back filter arguments +- \#1968 Fixed pathinfo mode 404 error +- \#1963 String type primary key should also wrap into an array during db update +- \#1962 Fix side issue +- \#1961 Fix Debugbar url tail slash issue +- \#1957 New generic string validation rule +- \#1956 Use Null Coalesce Operator +- \#1955 Travis-CI build failed fix +- \#1954 Fix validation table format +- \#1952 Add Validations for `equals()` and `not_equals()` +- \#1951 System typos changes & code cleanup +- \#1950 Fix some side issues +- \#1949 Toolbar/Routes correction +- \#1947 Fix BaseConfig didn't load Registrar files properly +- \#1945 Fix datetime extraction from debugbar file +- \#1943 Model, Entity, Exception & Migration test cases +- \#1939 Remove section that prevents hotlinking +- \#1938 Database typos changes +- \#1936 Docs: improve app testing writeup +- \#1935 Update phpunit.xml scripts. Fixes #1932 +- \#1933 having (Is NULL deletion) +- \#1931 Toolbar IE11 fix +- \#1930 Model Changes w.r.t. #1773 +- \#1927 Entity exception for nonexistent props +- \#1926 Docs: update installation guide +- \#1925 removed $_SERVER['CI_ENVIRONMENT'] +- \#1923 missing return +- \#1918 JSONFormatter +- \#1917 Database Test Cases +- \#1916 Check if the value is a string +- \#1915 Fix for POST + JSON (Content-Length added) +- \#1911 JSON Cast exception test cases diff --git a/docs/changelogs/v4.0.0-beta.4.md b/docs/changelogs/v4.0.0-beta.4.md new file mode 100644 index 000000000000..7664631aaa67 --- /dev/null +++ b/docs/changelogs/v4.0.0-beta.4.md @@ -0,0 +1,192 @@ +# Version 4.0.0-beta.4 + +Release Date: Jul 25, 2019 + +## Highlights + +There are some breaking changes... + +- The Entity class has been refactored +- The Model class has been updated to better handle soft deletes +- The routing has been beefed up + +## New Messages + +- New translation key: `Database.noDateFormat` + +## Testing Changes + +- Enhanced database & migration testing in **tests/\_support/** + +## Changed Files + +The list of changed files follows, with PR numbers shown. + +```text +. +├── admin/ +├── app/ +│ └── Controllers/ +│ └── Home #1999 +├── public/ +├── system/ +│ ├── Autoloader/ +│ │ └── FileLocator #2059, #2064 +│ ├── Cache/ +│ │ ├── CacheFactory #2060 +│ │ └── Handlers/ +│ │ ├── MemcachedHandler #2060 +│ │ ├── PredisHandler #2060 +│ │ └── RedisHandler #2060 +│ ├── Commands/ +│ │ └── Utilities/Routes #2008 +│ ├── Config/ +│ │ ├── Config #2079 +│ │ └── Services #2024 +│ ├── Database/ +│ │ ├── MySQLi/ +│ │ │ ├── Connection #2042 +│ │ │ └── Result #2011 +│ │ ├── Postgre/ +│ │ │ ├── Connection #2042 +│ │ │ └── Result #2011 +│ │ ├── SQLite3/ +│ │ │ ├── Connection #2042 +│ │ │ ├── Forge #2042 +│ │ │ ├── Result #2011 +│ │ │ └── Table #2042 +│ │ ├── BaseBuilder #1989 +│ │ ├── BaseConnection #2042 +│ │ ├── BaseResult #2002 +│ │ ├── Forge #2042 +│ │ ├── MigrateRollback #2035 +│ │ └── MigrationRunner #2019 +│ ├── Debug/ +│ │ └── Toolbar/Collectors/Routes #2030 +│ ├── Exceptions. +│ │ └── ModelException #2054 +│ ├── Files/ +│ │ └── File #2104 +│ ├── Filters/ +│ │ └── Filters #2039 +│ ├── helpers/ +│ │ └── date_helper #2091 +│ ├── HTTP/ +│ │ ├── CLIRequest #2024 +│ │ ├── CURLRequest #1996, #2050 +│ │ ├── IncomingRequest #2063 +│ │ └── Request #2024 +│ ├── Language/en/ +│ │ └── Database #2054 +│ ├── Pager/ +│ │ └── Pager #2026 +│ ├── Router/ +│ │ ├── RouteCollection #1959, #2012, #2024 +│ │ ├── Router #2024, #2031, #2043 +│ │ └── RouterInterface #2024 +│ ├── Session/ +│ │ └── Handlers/ArrayHandler #2014 +│ ├── Test/ +│ │ ├── CIUnitTestCase #2002 +│ │ └── FeatureTestCase #2043 +│ ├── Throttle/ +│ │ └── Throttler #2074 +│ ├── CodeIgniter #2012, #2024 +│ ├── Common #2036 +│ ├── Entity #2002, #2004, #2011, #2081 +│ └── Model #2050, #2051, #2053, #2054 +├── tests/system/ +│ ├── CLI/ +│ │ └── ConsoleTest #2024 +│ ├── Database/ +│ │ ├── Live/ +│ │ │ ├── DbUtilsTest #2051, #2053 +│ │ │ ├── ForgeTest #2019, #2042 +│ │ │ ├── ModelTest #2002, #2051, #2053, #2054 +│ │ │ ├── SQLite/AlterTablesTest #2042 +│ │ │ └── WhereTest #2052 +│ │ └── Migrations/MigrationRunnerTest #2019 +│ ├── HTTP/ +│ │ ├── CLIRequest #2024 +│ │ └── CURLRequestTest #1996 +│ ├── Router/ +│ │ ├── RouteCollectionTest #1959, #2012, #2024 +│ │ └── RouterTest #2024, #2043 +│ ├── Test/ +│ │ └── FeatureTestCaseTest #2043 +│ ├── Throttle/ +│ │ └── ThrottleTest #2074 +│ ├── View/ +│ │ └── ParserTest #2005 +│ ├── CodeIgniterTest #2024 +│ └── EntityTest #2002, #2004 +└── user_guide_src/ + ├── concepts/ + │ └── autoloader #2035, #2071 + ├── database/ + │ └── query_builder #2035 + ├── dbmgmt/ + │ ├── forge #2042 + │ └── migration #2042 + ├── helpers/ + │ └── date_helper #2091 + ├── incoming/ + │ └── routing #2035 + ├── installation/ + │ └── installing_composer #2015, #2035 + ├── libraries/ + │ ├── pagination #2026 + │ ├── sessions #2014, #2035 + │ ├── validation #2069 + │ └── uploaded_files #2104 + ├── models/ + │ ├── entities #2002, #2004, #2035 + │ └── model #2051, #2053, #2054 + ├── outgoing/ + │ └── view_parser #e21823, 32005 + └── testing/ + └── database #2051, #2053 +``` + +## PRs merged + +- \#2104 File & UploadFile Fixes +- \#2091 Timezone select +- \#2081 JSON format checking improved +- \#2079 Update config() to check all namespaces +- \#2074 Throttler can access bucket for bucket life time +- \#2071 Fix autoloader.rst formatting +- \#2069 validation rule: then -> than (spelling) +- \#2064 Bugfix file locator slash error +- \#2063 Ensure query vars are part of request->uri. Fixes #2062 +- \#2060 Cache Drive Backups +- \#2059 Add multi-path support to `locateFile()` +- \#2054 Add model exceptions for missing/invalid dateFormat +- \#2053 Change Model's deleted flag to a deleted_at datetime/timestamp. Fixes #2041 +- \#2052 Add various tests for (not) null +- \#2051 Soft deletes use deleted_at +- \#2050 Stash insert ID before event trigger +- \#2043 Zero params should be passed through when routing. Fixes #2032 +- \#2042 SQLite3 now supports dropping foreign keys. Fixes #1982 +- \#2040 Update CURLRequest.php +- \#2039 Restrict filter matching of uris so they require an exact match. Fixes #2038 +- \#2036 Make `force_https()` send headers before exit +- \#2035 Various typos and Guide corrections +- \#2031 Fallback to server request for default method +- \#2030 Support the new `router` service in Debug Toolbar +- \#2026 Extension Pager::makeLinks (optional group name) +- \#2024 Refactor the way the router and route collection determine the current HTTP verb +- \#2019 SQLite and Mysql driver additional tests and migration runner test fixes +- \#2015 Direct user to follow the upgrade steps after installation +- \#2014 Added a new Session/ArrayHandler that can be used during testing +- \#2012 Use request->method for HTTP verb +- \#2011 Set the raw data array without any mutations for the Entity +- \#2008 Add `patch` method to command "routes" +- \#2005 Plugin closures docs update and test +- \#2004 Allow hasChanged() without parameter +- \#2002 Entity Refactor +- \#1999 use CodeIgniterController; not needed since Home Controller extends ... +- \#1996 Attempting to fix CURLRequest debug issue. #1994 +- \#e21823 Corrected docs for parser plugins. Closes #1995 +- \#1989 argument set() must be of type string - cannot agree +- \#1959 Prevent reverseRoute from searching closures diff --git a/docs/changelogs/v4.0.0-rc.1.md b/docs/changelogs/v4.0.0-rc.1.md new file mode 100644 index 000000000000..823dc0e159b7 --- /dev/null +++ b/docs/changelogs/v4.0.0-rc.1.md @@ -0,0 +1,229 @@ +# Version 4.0.0-rc.1 + +Release Date: Sep 3, 2019 + +**RC.1 release of CodeIgniter4** + +## Enhancements + +- CI3 Email ported to CI4 +- Encryption (basic) added +- Migrations refactored and streamlined for more holistic functionality (BC) +- Added `convert()` to `ImageHandlerInterface` +- Disabled debug toolbar for downloads +- CLI commands return an error code now ("spark" changed) +- RESTful controllers added to shorten dev time for RESTful APIs +- Added `RouteCollection::presenter()` as part of the RESTful support + +## App Changes + +- Added **app/Common.php** to make it easier to override common functions +- `Config/Email` and `Config/Encryption` added +- `Config/Migration` modified, and has different settings +- **app/Controllers/Home.php** fixed, removing unnecessary model reference + +## Message Changes + +- Migration has new & modified messages +- Messages now have a RESTful set + +## Changed Files + +The list of changed files follows, with PR numbers shown. + +```text +. +├── admin/ +│ ├── release-appstarter #2155 +│ └── release-framework #2155 +├── app/ +│ ├── Config/ +│ │ ├── Email #2092 +│ │ ├── Encryption #2135 +│ │ └── Migrations #2065 +│ ├── Controllers/ +│ │ ├── BaseController #2046 +│ │ └── Home #2145 +│ └── Common #2110 +├── public/ +├── system/ +│ ├── API/ +│ │ └── ResponseTrait #2131 +│ ├── Autoloader/ +│ │ ├── Autoloader #2149 +│ │ └── FileLocator #2149 +│ ├── Cache/Handlers/ +│ │ └── RedisHandler #2144 +│ ├── CLI/ +│ │ └── CommandRunner #2164 +│ ├── Commands/Database/ +│ │ ├── CreateMigration #2065 +│ │ ├── Migrate #2065, 2137 +│ │ ├── MigrateRefresh #2065, 2137 +│ │ ├── MigrateRollback #2065, 2137 +│ │ ├── MigrateStatus #2137 +│ │ └── MigrateVersion #2137 +│ ├── Config/ +│ │ ├── BaseConfig #2082 +│ │ └── Services #2135, 2092 +│ ├── Database/ +│ │ ├── BaseBuilder #2127, 2090, 2142, 2153, 2160, 2023, 2001 +│ │ └── MigrationRunner #2065, 2137 +│ ├── Debug/ +│ │ └── Toolbar #2118 +│ ├── Email/ +│ │ └── Email #2092 +│ ├── Encryption/ +│ │ ├── EncrypterInterface #2135 +│ │ ├── Encryption #2135 +│ │ ├── Exceptions/EncryptionException #2135 +│ │ └── Handlers/ +│ │ ├── BaseHandler #2135 +│ │ └── OpenSSLHandler #2135 +│ ├── Exceptions/ +│ │ └── ConfigException #2065 +│ ├── Files/ +│ │ └── File #2178 +│ ├── Filters/ +│ │ └── DebugToolbar #2118 +│ ├── Helpers/ +│ │ └── inflector_helper #2065 +│ ├── Honeypot/ +│ │ └── Honeypot #2177 +│ ├── HTTP/ +│ │ ├── DownloadResponse #2129 +│ │ ├── Files/UploadedFile #2128 +│ │ ├── Message @2171 +│ │ └── Response #2166 +│ ├── Images/ +│ │ ├── Handlers/ +│ │ │ ├── BaseHandler #2113, 2150 +│ │ │ └── ImageMagickHandler #2151 +│ │ └── ImageHandlerInterface #2113 +│ ├── Language/en/ +│ │ ├── Email #2092 +│ │ ├── Encryption #2135 +│ │ ├── Migrations #2065, 2137 +│ │ └── RESTful #2165 +│ ├── RESTful/ +│ │ ├── ResourceController #2165 +│ │ └── ResourcePresenter #2165 +│ ├── Router/ +│ │ └── RouteCollection #2165 +│ ├── Security/ +│ │ └── Security #2027 +│ ├── Session/Handlers/ +│ │ └── RedisHandler #2125 +│ ├── Test/ +│ │ └── CIDatabaseTestCase #2137 +│ ├── bootstrap #2110 +│ ├── CodeIgniter #2126, 2164 +│ ├── Common #2109 +│ ├── Entity #2112 +│ └── Model #2090 +├── tests/_support/ +│ └── RESTful/... #2165 +├── tests/system/ +│ ├── API/ +│ │ └── ResponseTraitTest #2131 +│ ├── Database/ +│ │ ├── Builder/ +│ │ │ ├── GetTest #2142 +│ │ │ ├── SelectTest #2160 +│ │ │ └── WhereTest #2001 +│ │ ├── Live/ +│ │ │ ├── GroupTest #2160 +│ │ │ ├── ModelTest #2090 +│ │ │ └── SelectTest #2160 +│ │ └── Migrations/MigrationRunnerTest #2065, 2137 +│ ├── Encryption/ +│ │ ├── EncryptionTest #2135 +│ │ └── OpenSSLHandlerTest #2135 +│ ├── Helpers/ +│ │ └── InflectorHelperTest #2065 +│ ├── HTTP/ +│ │ ├── DownloadResponseTest #2129 +│ │ └── MessageTest #2171 +│ ├── Images/ +│ │ └── GDHandlerTest #2113 +│ ├── RESTful/ +│ │ ├── ResourceControllerTest #2165 +│ │ └── ResourcePresenterTest #2165 +│ ├── Router/ +│ │ └── RouteCollectionTest #2165 +│ ├── ControllerTest #2165 +│ └── EntityTest #2112 +├── user_guide_src/ +│ ├── changelogs/ +│ │ └── next #2154 +│ ├── database/ +│ │ └── query_builder #2160, 2001 +│ ├── dbmgmt/ +│ │ └── migrations #2065, 2132, 2136, 2154, 2137 +│ ├── extending/ +│ │ └── common #2162 +│ ├── helpers/ +│ │ └── inflector_helper #2065 +│ ├── incoming/ +│ │ ├── restful #2165 +│ │ └── routing #2165 +│ ├── libraries/ +│ │ ├── email #2092, 2154 +│ │ ├── encryption #2135 +│ │ └── images #2113, 2169 +│ ├── outgoing/ +│ │ ├── api_responses #2131 +│ │ ├── localization #2134 +│ │ └── response #2129 +│ └── testing/ +│ └── database #2137 +├── CONTRIBUTING.md #2010 +├── README.md #2010 +└── spark +``` + +## PRs merged + +- \#2178 Add fallback for missing finfo_open +- \#2177 Fix missing form close tag +- \#2171 Setheader dupes +- \#2169 Add $quality usage for Image Library +- \#2166 Cookie error +- \#2165 RESTful help +- \#2164 Exit error code on CLI Command failure +- \#2162 User Guide updates for Common.php +- \#2160 Add BaseBuilder SelectCount +- \#2155 Include .gitignore in starters +- \#2153 Bug fix countAllResults with LIMIT +- \#2154 Fix email & migrations docs; update changelog +- \#2151 ImageMagick->save() return value +- \#2150 New logic for Image->fit() +- \#2149 listNamespaceFiles: Ensure trailing slash +- \#2145 Remove UserModel reference from Home controller +- \#2144 Update Redis legacy function +- \#2142 Fixing BuilderBase resetting when getting the SQL +- \#2137 New Migration Logic +- \#2136 Migrations user guide fixes +- \#2135 Encryption +- \#2134 Fix localization writeup +- \#2132 Update migration User Guide +- \#2131 Added No Content response to APIResponseTrait +- \#2129 Add setFileName() to DownloadResponse +- \#2128 guessExtension fallback to clientExtension +- \#2127 Update limit function since $offset is nullable +- \#2126 Limit storePreviousURL to certain requests +- \#2125 Updated redis session handler to support redis 5.0.x +- \#2118 Disabled Toolbar on downloads +- \#2113 Add Image->convert() +- \#2112 Update `Entity.php` `__isset` method +- \#2110 Added app/Common.php +- \#2109 Fix typo in checking if exists db_connect() +- \#2092 Original email port +- \#2090 Fix prevent soft delete all without conditions set +- \#2082 Update BaseConfig.php +- \#2065 Migration updates for more holistic functionality +- \#2046 clean base controller code +- \#2027 Fix CSRF hash regeneration +- \#2023 whereIn $value does not have to be an array +- \#2010 WIP Verbiage revisions +- \#2001 Subqueries in BaseBuilder diff --git a/docs/changelogs/v4.0.0-rc.2.md b/docs/changelogs/v4.0.0-rc.2.md new file mode 100644 index 000000000000..a94bb4e0f423 --- /dev/null +++ b/docs/changelogs/v4.0.0-rc.2.md @@ -0,0 +1,201 @@ +# Version 4.0.0-rc.2 + +Release Date: Sept 27, 2019 + +**RC.2 release of CodeIgniter4** + +## Enhancements + +- Query builder testability simplified with new property, but dropped method parameters (breaking change) +- Database, migrations and sessions beefed up +- Numerous smaller bugs corrected + +## App Changes + +- **app/Config/Constants.php**, **app/Config/Paths.php** & some config settings have had changes + +## Changed Files + +The list of changed files follows, with PR numbers shown. + +```text +. +├── admin/ +├── app/ +│ └── Config/ +│ ├── Boot/* #2241 +│ ├── Constants #2183 +│ └── Paths #2181 +├── public/ +├── system/ +│ ├── CLI/ +│ │ └── BaseCommand #2231 +│ ├── Database/ +│ │ ├── MySQLi/Connection #2201, 2229 +│ │ ├── Postgre/ +│ │ │ ├── BaseBuilder #2269 +│ │ │ └── Connection #2201 +│ │ ├── SQLite3/Connection #2201, 2228, 2230 +│ │ ├── BaseBuilder #2257, 2232, 2269, 2270 +│ │ ├── BaseConnection #2208, 2213, 2231 +│ │ ├── Config #2224 +│ │ ├── Forge #2205 +│ │ └── MigrationRunner #2191 +│ ├── Debug/ +│ │ └── Exceptions #2262 +│ ├── Encryption/ +│ │ ├── Encryption #2231 +│ │ └── Handlers/BaseHandler #2231 +│ ├── Files/ +│ │ └── FileCollection #2265 +│ ├── HTTP/ +│ │ ├── CURLRequest #2168 +│ │ ├── IncomingRequest #2265 +│ │ ├── Request #2253 +│ │ └── Response #2253 +│ ├── I18n/ +│ │ ├── Time #2231 +│ │ └── TimeDifference #2231 +│ ├── Images/ +│ │ └── Handlers/BaseHandler #2246 +│ ├── RESTful/ +│ │ └── ResourcePresenter #2271 +│ ├── Security/ +│ │ └── Security #2240 +│ ├── Session/ +│ │ └── Session #2197, 2231 +│ ├── Test/ +│ │ ├── CIDatabaseTestCase #2205 +│ │ └── CIDatabaseUnitTestCase #2184 +│ ├── Validation/ +│ │ ├── FileRules #2265 +│ │ └── Validation #2268 +│ ├── View/ +│ │ └── Parser #2264 +│ ├── Common #2200, 2209, 2261 +│ └── Model #2231 +├── tests/_support/ +├── tests/system/ +│ ├── Commands/ +│ │ └── CommandClassTest #2231 +│ ├── Database/ +│ │ ├── Builder/ +│ │ │ ├── GetTest #2232 +│ │ │ ├── CountTest #2269 +│ │ │ ├── DeleteTest #2269 +│ │ │ ├── EmptyTest #2269 +│ │ │ ├── GetTest #2269 +│ │ │ ├── GroupTest #2257 +│ │ │ ├── InsertTest #2269 +│ │ │ ├── ReplaceTest #2269 +│ │ │ ├── TruncateTest #2269 +│ │ │ └── UpdateTest #2269 +│ │ ├── Live/ +│ │ │ ├── EscapeTest #2229 +│ │ │ ├── ForgeTest #2201, 2211 +│ │ │ ├── GroupTest #2257 +│ │ │ ├── MetadataTest #2211 +│ │ │ └── ModelTest #2231 +│ │ └── BaseConnectionTest #2229, 2231 +│ ├── Encryption/ +│ │ └── EncryptionTest #2231 +│ ├── Helpers/ +│ │ └── URLHelperTest #2259 +│ ├── HTTP/ +│ │ ├── CURLRequestTest #2168 +│ │ ├── FileCollectionTest #2265 +│ │ └── URITest #2259 +│ ├── I18n/ +│ │ ├── TimeDifferenceTest #2231 +│ │ └── TimeTest #2231 +│ ├── Pager/ +│ │ └── pagerTest #2259 +│ ├── RESTful/ +│ │ └── ResourcePresenterTest #2271 +│ ├── Session/ +│ │ └── SessionTest #2231 +│ └── View/ +│ └── ParserTest #2264 +└── user_guide_src/ + ├── concepts/ + │ └── structure #2221 + ├── database/ + │ ├── metadata #2199, 2201, 2208 + │ ├── queries #2208 + │ └── query_builder #2257, 2232, 2269 + ├── dbmgmt/ + │ └── migration #2190, 2191 + ├── extending/ + │ └── contributing #2221 + ├── general/ + │ └── errors #2221 + ├── helpera/ + │ └── url_helper #2259 + ├── incoming/ + │ ├── restful #2189 + │ └── routing #2221 + ├── installation/ + │ └── troubleshooting #2260 + ├── libraries/ + │ ├── encryption #2221 + │ ├── pagination #2216 + │ ├── time #2221 + │ └── uti #2216 + ├── outgoing/ + │ ├── api_responses #2245 + │ ├── view_layouts #2218 + │ └── view_parser #2218, 2264 + ├── testing/ + │ ├── controllers #2221 + │ ├── debugging #2221, 2209 + │ ├── feature #2218, 2221 + │ └── overview #2221 + └── tutorial/ + ├── news_section #2221 + └── static_pages #2221 +``` + +## PRs merged + +- \#2271 fix ResourcePresenter::setModel() +- \#2270 groupStart() refactorization +- \#2269 testMode() method for BaseBuilder +- \#2268 Validation session use only if exists +- \#2267 Tests setUp and tearDown: void +- \#2265 Fix a validation issue on multiple file upload +- \#2264 fix. Parser allow other extension +- \#2262 Fix parameter type in Debug/Exceptions +- \#2261 Fix lang() signature +- \#2260 Explain the whoops page +- \#2259 Add URI & url_helper tests +- \#2257 Several updates to the HAVING clauses +- \#2253 Fix invalid parameters +- \#2246 EXIF not supported for GIF +- \#2245 Fix class ref parameter types +- \#2241 Fix ini_set parameter type +- \#2240 Handle JSON POSTs in CSRF +- \#2232 Fixes BaseBuilder getWhere() bug +- \#2231 Add magic \__isset to classes with \__get +- \#2230 Add escape to SQLite \_listTables() +- \#2229 MySQLi escapeLikeStringDirect() +- \#2228 Exclude `sqlite_%` from listTables() +- \#2224 change new ConfigDatabase() to config('Database') +- \#2221 Documentation fixes +- \#2218 Typo corrected +- \#2216 Update uri.rst +- \#2213 Filter listTables cache response on constrainPrefix +- \#2211 Add listTable() tests +- \#2209 Add trace() +- \#2208 Add $db->getPrefix() +- \#2205 Fix empty() bug on DBPrefix +- \#2201 Foreign key columns +- \#2200 Notify Kint of dd alias +- \#2199 Add getForeignKeyData to User Guide +- \#2187 Update Session.php +- \#2191 Migration rollback reverse +- \#2190 Fix name of ForeignKeyChecks +- \#2189 missing return +- \#2184 Fix case on "Seeds/" directory +- \#2183 Check `defined` for constants +- \#2181 Remove copy-paste extraneous text +- \#2168 Fix for CURL for 'debug' option diff --git a/docs/changelogs/v4.0.0-rc.3.md b/docs/changelogs/v4.0.0-rc.3.md new file mode 100644 index 000000000000..993e0ca20a49 --- /dev/null +++ b/docs/changelogs/v4.0.0-rc.3.md @@ -0,0 +1,161 @@ +# Version 4.0.0-rc.3 + +Release Date: Oct 19, 2019 + +**RC.3 release of CodeIgniter4** + +## Enhancements + +- Beefed up database, session & routing handling. +- Fixed numerous bugs & user guide errata. + +## App Changes + +- New `$CSRFHeaderName` property in **app/Config/App.php** + +## Changed Files + +The list of changed files follows, with PR numbers shown. + +```text +. +├── admin/ +├── app/ +│ └── Config/ +│ └── App #2272 +├── public/ +├── system/ +│ ├── Autoloader/ +│ │ └── FileLocator #2336 +│ ├── Database/ +│ │ ├── MySQLi/Forge #2100 +│ │ ├── Postgre/Forge #2100 +│ │ ├── SQLite3/Forge #2100 +│ │ ├── BaseBuilder #2252, 2312 +│ │ ├── Forge $2100 +│ │ ├── Migration #2303 +│ │ └── MigrationRunner #2303 +│ ├── Debug/ +│ │ ├── Exceptions #2288 +│ │ ├── Toolbar/Collectors/ +│ │ │ └── Route #2300 +│ │ ├── Toolbar #2315 +│ │ └── Views/ #2283 +│ ├── Helpers/ +│ │ ├── inflector_helper #2296 +│ │ └── url_helper #2325 +│ ├── HTTP/ +│ │ ├── CURLRequest #2285, 2305 +│ │ └── Files/UploadedFile #2123 +│ ├── Language/en/ +│ │ ├── Encryption #2311 +│ │ ├── RESTful #2311 +│ │ └── Session #2311 +│ ├── Router/ +│ │ ├── Exceptions/RedirectException #2338 +│ │ └── Router #2308, 2338 +│ ├── Security/ +│ │ └── Security #2272, 2279 +│ ├── Session/ +│ │ ├── Handlers/ +│ │ │ ├── DatabaseHandler #2298 +│ │ │ ├── FileHandler #2298, 2307 +│ │ │ ├── MemcachedHandler #2298 +│ │ │ └── RedisHandler #2298 +│ │ └── Session #2339 +│ ├── Validation/ +│ │ └── Validation #2284, 2341 +│ ├── View/ +│ │ └── View #2324 +│ ├── CodeIgniter #2338 +│ ├── Common #2279 +│ └── Model #2289, 2332 +├── tests/README.md #2345 +├── tests/_support/ +│ └── Config/ +│ └── MockAppConfig #2272 +├── tests/system/ +│ ├── Database/ +│ │ ├── Builder/ +│ │ │ └── UpdateTest #2295 +│ │ └── Live/ +│ │ └── ForgeTest #2100 +│ ├── Helpers/ +│ │ ├── InflectorHelperTest #2296 +│ │ └── URLHelperTest #2325 +│ ├── HTTP/ +│ │ └── CURLRequestTest #2285 +│ ├── Log/ +│ │ └── FileHandlerTest #2346 +│ ├── Security/ +│ │ └── SecurityTest #2279 +│ ├── Session/ +│ │ └── SessionTest #2339 +│ └── CommonFunctionsTest #2279 +└── user_guide_src/ + ├── dbmgmt/ + │ ├── forge #2100 + │ └── migration #2337 + ├── general/ + │ ├── common_functions #2279 + │ ├── errors #2338 + │ └── modules #2290 + ├── helpers/ + │ └── inflector_helper #2296 + ├── incoming/ + │ ├── message #2282 + │ ├── restful #2313, 2321, 2333 + │ └── routing #2327 + ├── libraries/ + │ ├── curlrequest #2305 + │ └── security #2279 + ├── models/ + │ └── model #2316, 2332 + └── outgoing/ + └── table #2337 +``` + +## PRs merged + +- \#2348 CodeIgniter Foundation gets copyright +- \#2346 Fix FilerHandlerTest.php weirdness +- \#2345 Tests readme polish +- \#2344 Setup vs Set Up +- \#2343 User guide minor fixes. Fix class names and code area +- \#2341 Simplify Validation::getErrors() +- \#2339 Fix Session::get('key') returns null when value is (int) 0 +- \#2338 Revert RedirectException change +- \#2337 Guide: Minor grammar corrections +- \#2336 Correct cleaning of namespaces in Windows +- \#2333 Guide: RESTful table formatting +- \#2332 Change after methods to use actual data +- \#2328 Update Application structure +- \#2327 Correct the routing UG page +- \#2325 Fix bug in url_title() function with diacritics +- \#2324 Renderer Toolbar Debug Toggle +- \#2321 Update RESTful User Guide +- \#2316 Add getValidationRules() to model UG page +- \#2315 Enhance Toolbar::renderTimeline +- \#2313 RESTful User Guide cleanup +- \#2312 BaseBuilder variable type fix +- \#2311 Convert all language returns to single quote +- \#2308 Bugfix extra autoroute slashes +- \#2307 Resolve session save handler issue +- \#2305 Fix curl debug bug +- \#2303 Use DBGroup variable from migration class if defined +- \#2300 Routes collector for toolbar should not die when a method name is calculated through \_remap +- \#2298 fix issue on session_regenerate +- \#2296 Add counted() to Inflector Helper +- \#2295 Test set() method in Builder class more +- \#2290 Fix Code Modules documentation for psr4 namespace configuration +- \#2289 Don't restrict model's access to properties in a read-only manner +- \#2288 Fix line numbering in Debug/Exceptions class +- \#2285 Fix error with Host header for CURLRequest class +- \#2284 Fix getErrors() for validation with redirect +- \#2283 Hotfix: Rename collectors \_\*.tpl.php to \_\*.tpl +- \#2282 Fix user guide for Message class +- \#2279 Bug in CSRF parameter cleanup +- \#2272 Handle X-CSRF-TOKEN - CSRF +- \#2252 Batch Update Where Reset +- \#2123 WIP fix store() default value bug +- \#2100 Added validation to check whether a database exists before creating it for MySQLi diff --git a/docs/changelogs/v4.0.0-rc.4.md b/docs/changelogs/v4.0.0-rc.4.md new file mode 100644 index 000000000000..40f2918aff36 --- /dev/null +++ b/docs/changelogs/v4.0.0-rc.4.md @@ -0,0 +1,91 @@ +# Version 4.0.0-rc.4 + +Release Date: February 6, 2020 + +**RC.4 release of CodeIgniter4** + +## Enhancements + +- Fixed URL systems so that they would work when the system is served out of subfolders. +- Added required insert ignore support for SQLite3 and MySQL. +- Add validation function `is_not_unique` +- Various improvements and cleanup to the Email class + +## PRs merged + +- \#2527 Update manual.rst +- \#2454 Page in the official documentation on ajax requests with iSAJAX() fixes +- \#2525 Remove incorrect inline doc type +- \#2524 Restore namespace after regress. +- \#2523 Replace legacy CI3 constant. +- \#2522 Adding Events information in the 'Upgrading from 3.x to 4.x' section +- \#2518 Fix pager URI to work in subfolders. +- \#2516 HTML Helper - Fix attribute type for lists +- \#2515 Layout Renderer Fix +- \#2513 Typo in userguide "Entity Classes - Business Logic" +- \#2511 Database add highlight +- \#2509 Revert Renderer section reset +- \#2507 Update ordering of search locations for better prioritization. +- \#2506 HTTP Response - Fix crash on CSP methods when CSP is disabled +- \#2504 BaseConnection - Nullable return type in getConnectStart() +- \#2502 View Renderer - Reset sections after generating the output +- \#2501 view_cell call controller on initController method. +- \#2499 View Parser - Fix ParsePair() with filter +- \#2497 Fix splitQueryPart() +- \#2496 Use site_url for RedirectResponse. +- \#2495 update toolbar userguide +- \#2494 Debug Toolbar - Fix Debugbar-Time header, Render in <head> +- \#2493 fix sphinx version. +- \#2490 fix. Toolbar init view Error +- \#2489 Fix pager +- \#2486 Update current_url and previous_url in the docs for View Parser. +- \#2485 Typo in user guide "Running via the Command Line" +- \#2482 Services request add URI Core System extend support +- \#2481 Priority Redirection. +- \#2472 ControllerTest should work without URI specified. Fixes #2470 +- \#2471 Transition from Zend Escaper to Laminas Escaper +- \#2462 Fix impossible length for migration table id. +- \#2458 Replace `composer install` by `composer require` +- \#2450 CRITICAL when $_SESSION is null / Argument 2 passed to dot_array_search() must be [] +- \#2449 User Guide: Query Builder selectCount - error correction in example +- \#2447 Existing File checks (Nowackipawel/patch-69) +- \#2446 DB Insert Ignore (Tada5hi/database-feature) +- \#2438 Nice array view in debug toolbar +- \#2436 Fix Message method reference +- \#2433 Inserting through a model should respect all validation rules. Fixes #2384 +- \#2432 Fix curly brace deprecation in php 7.4 +- \#2429 fix. safe_mailto multi-byte safe +- \#2427 Add $recipients property to ConfigEmail +- \#2426 Add hex validation rule, test, Guide +- \#2425 fix: Router setDefaultNameSpace doesn't work +- \#2422 Don't show duplicate Date headers when running under PHP's server. +- \#2420 Change current_url() to use cloned URI +- \#2417 Revise Encryption Service Documentation +- \#2416 Add missing closing braces of condition 'hasError()' +- \#2415 Add 'nullable' to MySQL field data +- \#2413 fix. toolbar file 301 +- \#2411 fix parse params of plugin +- \#2408 Ensure previous_url() gets accurate URI. +- \#2407 Fix url helper functions to work when the site is hosted in subfolders. +- \#2406 Fix issue #2391 CodeIgniter::display404errors() +- \#2402 Removed pointless isset() check +- \#2401 Remove pointless check from conditional +- \#2400 Remove redundant check in conditionals +- \#2399 Revise Controllers Documentation +- \#2398 Edit .htaccess +- \#2392 Add validation function `is_not_unique` +- \#2389 Confer silent status to nested seeders +- \#2388 Fix copypaste command comment +- \#2387 Use only digits for migrations order +- \#2382 quick fix postgresql insert id +- \#2381 Fix: Use of CodeIgniterConfigServices prevents Service overriding +- \#2379 Replace null log file extension check +- \#2377 Docs Rev: Replacing Core Classes +- \#2369 Remove LoggerAwareTrait from Email class +- \#2368 Remove log_message from Email::\__construct +- \#2364 Email config doesn't incorporate .env items +- \#2362 Fix SMTP protocol problem +- \#2359 Bugfix Model after event data +- \#2358 Fix Logger config +- \#2356 Fix typo in comments of Services.php +- \#2352 Fix method name to 'toDateString()' in Date and Times user guide diff --git a/docs/changelogs/v4.0.0.md b/docs/changelogs/v4.0.0.md new file mode 100644 index 000000000000..c75a3abdcd6b --- /dev/null +++ b/docs/changelogs/v4.0.0.md @@ -0,0 +1,23 @@ +# Version 4.0.0 + +Release Date: February 24, 2020 + +**4.0 release of CodeIgniter4** + +## Enhancements + +- Updated welcome view file +- Debug Toolbar now supports dark mode +- New `alpha_numeric_punct` validation rule +- Kint was updated from the 2.x branch to the latest 3.x branch, with a new config file to specify options +- Additional docs for getting started +- CLI fixed to better handle complex arguments +- Improvements to File class +- New `model()` helper method for easy singleton `Models`. +- Tests completely reorganized to make app-level tests simpler out of the box. + +## Repo Changes + +The `devstarter` repo has been deprecated. + +We now have an automated changelog generated in the [CHANGELOG.md](https://github.com/codeigniter4/CodeIgniter4/blob/develop/CHANGELOG.md) file in the main repo. See it for more details. diff --git a/docs/changelogs/v4.0.3.md b/docs/changelogs/v4.0.3.md new file mode 100644 index 000000000000..2c18966b1c23 --- /dev/null +++ b/docs/changelogs/v4.0.3.md @@ -0,0 +1,26 @@ +# Version 4.0.3 + +Release Date: May 1, 2020 + +**4.0.3 release of CodeIgniter4** + +Thanks to the community, there have been 74 bugs closed, 21 issues closed, and 88 merged pull requests. These are all listed in the [CHANGELOG.md](https://github.com/codeigniter4/CodeIgniter4/blob/develop/CHANGELOG.md). This is a small representation of some of the bigger changes you should know about. + +## Enhancements + +- The `API\ResponseTrait` now only determines the final formatting (json/xml) through content negotiation when the controller's `$format` variable is `null`. If it contains either `json` or `xml`, then that format will always be returned. +- Pagination now can actually create next page and previous page links, instead of next/previous groups of links. +- Windows users wanting to build their own copy of the user guide locally can now use the included `make.bat` file. +- Locale matching in the IncomingRequest class now works to match broad groups, like `fr` even when the browser only supplies a more specific locale code, like `fr-FR`. +- Added the ability to have nested language definitions. +- Added the ability to replace {locale} with `request->getLocale()` in form_open('action'). +- Tables generated by CLI commands can now be colored. + +## Bugs Fixed + +- Deleting through the Model on a table with a string primary key now works. +- Default pagination templates fixed to use the correct locale. +- Lots of tweaks and corrections in the user guide. +- Fixed locating files in custom namespaces that were occasionally not found. Primarily affected console commands. + +See the repo's [CHANGELOG_4.0.md](https://github.com/codeigniter4/CodeIgniter4/blob/develop/changelogs/CHANGELOG_4.0.md) for a complete list of bugs fixed. diff --git a/docs/changelogs/v4.0.4.md b/docs/changelogs/v4.0.4.md new file mode 100644 index 000000000000..6436ceb96e1b --- /dev/null +++ b/docs/changelogs/v4.0.4.md @@ -0,0 +1,61 @@ +# Version 4.0.4 + +Release Date: July 15, 2020 + +**4.0.4 release of CodeIgniter4** + +## BREAKING + +- Added an `$arguments` parameter to `after()` and `before()` in `FilterInterface`. This is a breaking change, so all code implementing the `FilterInterface` must be updated. + +## Enhancements + +- The location for the SQLite3 database has changed and will now be located by default in a **writable/** folder instead of the **public/** folder. +- New CLI command: `cache:clear` that will destroy all data within the current cache engine. +- Thanks to samsonasik, we have several libraries brought up to 100% test coverage. +- A few small performance increases. Every ounce matters! +- `getFieldData()` in the database results class now returns column type and length. +- Default .htaccess file updated to work better with extended characters. +- New Testing Feature: [Fabricator](../testing/fabricator.md) makes creating mock classes simple and repeatable in your tests. +- Model class can now have the callbacks overridden at runtime. Useful for testing. +- A number of improvements to [Feature Tests](../testing/feature.md) in general. +- New [command() helper function](../cli/spark_commands.md) to programmatically run your CLI commands. Useful for testing and cron jobs. +- New command, `make:seeder` to generate a [Database Seed class](../dbmgmt/seeds.md) skeleton file. +- Colors now available on the CLI within Windows, as well as other Windows-related CLI improvements. +- New helper [mb_url_title()](../helpers/url_helper.md) that functions like `url_title()` but automatically escapes any extended URL characters. +- [Image library](../libraries/images.md) now supports `webp` images. +- Added Unicode support for regular expressions in the Router. +- Added support for removing hidden folders in the [delete_files()](../helpers/filesystem_helper.md) helper. +- `fetchGlobal()` in the Request class now supports applying filters to arrays of data, not just the first item. +- `file` validation now works with arrays of files. +- URI class now supports a `setSilent()` method that will disable the throwing of Exceptions. +- New argument to `URI::getSegment()` that allows us to change the default value returned if nothing exists. +- Implemented `withResource()` in Image so that you can use method chaining instead of using the provided `getResource()` (used in tests) to just compress your image. +- Cookies and headers can be copied from the global Response object when doing a redirect using the new `withCookies()` and `withHeaders()` methods. +- Support for the special prefix "hex2bin:" which can be used with the `$key` parameter in the [Encryption class](../libraries/encryption.md) or in the .env file. + +## Bugs Fixed + +- Fixed location for the SQLite3 database, which will now be located by default in a `writable` folder instead of the `public` folder. +- Fixed bug where `force_https()` could add `https://` a second time. +- Fixed a bug with CurlRequest that could result in incorrect "100 Continue" headers. +- `Image::save()` bug fixed when `$target` parameter was `null`. +- Fixes for `set_checkbox()` and `set_radio()` when the `$default` parameter is set to `true`. +- Fix for result object handling in the Model class. +- Fixed the escape character in the SQLite database. +- Fix for inserts on Postgres and Entities when the primary key was null. +- CLI scripts can now correctly recognize dashes within arguments. +- CURLRequest now properly sets content length with multipart data. +- Misc. stability improvements for the ImageMagick handler. +- Setting validation errors within a config file should now work. +- Unicode characters are not escaped when saving JSON from Entities. +- Redirecting with a custom HTTP code should work correctly now. +- `Time::setTimezone()` now works correctly. +- Added full outer join support for Postgres. +- Some cast items in the Entity (like array, json) were not being set correctly during a `fill()` process. +- Fixed bug in Image GD handler that would try to compress images twice in certain cases. +- Ensured that the translation output logic works on the selected locale, dashed locale, and fallback "en". +- Fixed `is_unique`/`is_not_unique` validation called on POST/PUT via API in PostgreSQL. +- Fixed a bug where filter arguments were not passed to `after()`. + +See the repo's [CHANGELOG_4.0.md](https://github.com/codeigniter4/CodeIgniter4/blob/develop/changelogs/CHANGELOG_4.0.md) for a complete list of bugs fixed. diff --git a/docs/changelogs/v4.0.5.md b/docs/changelogs/v4.0.5.md new file mode 100644 index 000000000000..f64407008d5e --- /dev/null +++ b/docs/changelogs/v4.0.5.md @@ -0,0 +1,50 @@ +# Version 4.0.5 + +Release Date: January 31, 2021 + +**4.0.5 release of CodeIgniter4** + +## Enhancements + +- New URL helper function `url_to()` which creates absolute URLs based on controllers. +- New Model option: `$useAutoIncrement` which when set to `false` allows you to provide your own primary key for each record in the table. Handy when we want to implement a 1:1 relation or use UUIDs for our model. +- New URL helper function `url_is()` which allows you to check the current URL to see if it matches the given string. +- Services now have their config parameters strictly typehinted. This will ensure no one will pass a different config instance. If you need to pass a new config with additional properties, you need to extend that particular config. +- Support for setting the SameSite attribute on Session and CSRF cookies has been added. For security and compatibility with the latest browser versions, the default setting is `Lax`. +- Guessing file extensions from mime type in `Config\Mimes::guessExtensionFromType()` now only reverse searches the `$mimes` array if no extension is proposed (i.e., usually not for uploaded files). +- The getter functions for file extensions of uploaded files now have different fallback values (`UploadedFile::getClientExtension()` for `UploadedFile::getExtension()` and `''` for `UploadedFile::guessExtension()`). This is a security fix and makes the process less dependent on the client. +- The Cache `FileHandler` now allows setting the file permissions mode via `Config\Cache`. + +## Changes + +- System messages defined in **system/Language/en/** are now strictly for internal framework use and are not covered by the backwards compatibility (BC) promise. Users may use these messages in their applications but at their own risk. + +## Deprecations + +- Deprecated `BaseCommand::getPad()` in favor of `BaseCommand::setPad()`. +- Deprecated `CodeIgniter\Controller::loadHelpers()` in favor of the `helper()` function. +- Deprecated `Config\Format::getFormatter()` in favor of `CodeIgniter\Format\Format::getFormatter()` +- Deprecated `CodeIgniter\Security\Security::CSRFVerify()` in favor of `CodeIgniter\Security\Security::verify()` +- Deprecated `CodeIgniter\Security\Security::getCSRFHash()` in favor of `CodeIgniter\Security\Security::getHash()` +- Deprecated `CodeIgniter\Security\Security::getCSRTokenName()` in favor of `CodeIgniter\Security\Security::getTokenName()` +- Deprecated `Config\App::$CSRFTokenName` in favor of `Config\Security::$tokenName` +- Deprecated `Config\App::$CSRFHeaderName` in favor of `Config\Security::$headerName` +- Deprecated `Config\App::$CSRFCookieName` in favor of `Config\Security::$cookieName` +- Deprecated `Config\App::$CSRFExpire` in favor of `Config\Security::$expire` +- Deprecated `Config\App::$CSRFRegenerate` in favor of `Config\Security::$regenerate` +- Deprecated `Config\App::$CSRFRedirect` in favor of `Config\Security::$redirect` +- Deprecated `Config\App::$CSRFSameSite` in favor of `Config\Security::$samesite` +- Deprecated the `migrate:create` command in favor of the `make:migration` command. +- Deprecated `CodeIgniter\Database\ModelFactory` in favor of `CodeIgniter\Config\Factories::models()` +- Deprecated `CodeIgniter\Config\Config` in favor of `CodeIgniter\Config\Factories::config()` +- Deprecated `CodeIgniter\HTTP\Message::getHeader()` in favor of `header()` to prepare for PSR-7 +- Deprecated `CodeIgniter\HTTP\Message::getHeaders()` in favor of `headers()` to prepare for PSR-7 +- Deprecated `Config\Cache::$storePath` in favor of `Config\Cache::$file['storePath']` + +## Bugs Fixed + +- Fixed a bug in the `Entity` class where declaring class parameters was preventing data propagation to the `attributes` array. +- Handling for the environment variable `encryption.key` has changed. Previously, explicit function calls, like `getenv('encryption.key')` or `env('encryption.key')` where the value has the special prefix `hex2bin:`, returned an automatically converted binary string. These calls now return the character string with the prefix. This change was due to incompatibility with handling binary strings in environment variables on Windows platforms. However, accessing `$key` using the `Encryption` class config remains unchanged and still returns a binary string. +- `Config\Services` (in **app/Config/Services.php**) now extends `CodeIgniter\Config\BaseService` to allow proper discovery of third-party services. + +See the repo's [CHANGELOG_4.0.md](https://github.com/codeigniter4/CodeIgniter4/blob/develop/changelogs/CHANGELOG_4.0.md) for a complete list of bugs fixed. diff --git a/docs/changelogs/v4.1.0.md b/docs/changelogs/v4.1.0.md new file mode 100644 index 000000000000..52d61ed624e3 --- /dev/null +++ b/docs/changelogs/v4.1.0.md @@ -0,0 +1,21 @@ +# Version 4.1.0 + +Release Date: January 31, 2021 + +**4.1.0 release of CodeIgniter4** + +## BREAKING + +- The `Autoloader::loadLegacy()` method was previously used for migration of non-namespaced classes in transition to CodeIgniter v4. Since v4.1.0, this support was removed. + +## Changes + +- Dropped support for PHP 7.2 + +## Deprecations + +- Deprecated `Model::fillPlaceholders()` method. Use `Validation::fillPlaceholders()` instead. + +## Bugs Fixed + +See the repo's [CHANGELOG_4.1.md](https://github.com/codeigniter4/CodeIgniter4/blob/develop/changelogs/CHANGELOG_4.1.md) for a complete list of bugs fixed. diff --git a/docs/changelogs/v4.1.1.md b/docs/changelogs/v4.1.1.md new file mode 100644 index 000000000000..d0aaaf12ad4a --- /dev/null +++ b/docs/changelogs/v4.1.1.md @@ -0,0 +1,13 @@ +# Version 4.1.1 + +Release Date: February 1, 2021 + +**4.1.1 release of CodeIgniter4** + +## Bugs Fixed + +- Fixed an issue where `.gitattributes` was preventing framework downloads. + +Note that this fix was also applied retroactively to 4.0.5 on the **framework** repo. + +See the repo's [CHANGELOG_4.1.md](https://github.com/codeigniter4/CodeIgniter4/blob/develop/changelogs/CHANGELOG_4.1.md) for a complete list of bugs fixed. diff --git a/docs/changelogs/v4.1.2.md b/docs/changelogs/v4.1.2.md new file mode 100644 index 000000000000..9f44ce12797b --- /dev/null +++ b/docs/changelogs/v4.1.2.md @@ -0,0 +1,56 @@ +# Version 4.1.2 + +Release Date: May 16, 2021 + +**4.1.2 release of CodeIgniter4** + +## BREAKING + +Fixed [a bug](https://github.com/codeigniter4/CodeIgniter4/issues/4116) in `current_url()` that prevented configurations with an `indexPage` from including that value in the return value. Any installations using `App::$indexPage` should expect altered values from `current_url()` and all its dependencies (including Response Testing, Pager, Form Helper, and View Parser). + +## Enhancements + +- New HTTP classes, `Cookie` and `CookieStore`, for abstracting web cookies. +- New `assertRedirectTo()` assertion available for HTTP tests. +- New logger handler, `ErrorlogHandler`, that writes to `error_log()`. +- Entity. Added custom type casting functionality. +- New option in routing. The `priority` option lowers the priority of specific route processing. +- The `Autoloader` class can now load files which do not contain PHP classes. The non-class files are listed in the `$files` property of the `Config\Autoload` class. + +## Changes + +- Layouts in views now support nested sections. +- `Response::getCookie` now returns a `Cookie` instance instead of an array of cookie attributes. +- `Response::getCookies` now returns an array of `Cookie` instances instead of an array of arrays of attributes. +- To eliminate warnings from modern browsers' consoles, empty samesite values will be defaulted to `Lax` on cookie dispatch. +- `Model::errors()` and `BaseModel::errors()` now always return `array`; there was no definition change but the docblock has been updated. +- `Entity::castAs` has changed behavior. Added new parameter `$method`. Type casting has been moved to separate handlers. +- Entity. Timestamp casting now throws an exception when an invalid value is passed +- `Entity::castAsJson` uses external cast handler `JsonCast::get`. +- `Entity::mutateDate` uses external cast handler `DatetimeCast::get`. +- In order for `Config\**` classes to get their respective properties' values from the `.env`, it is now necessary to namespace the property with the name of the class. Previously, the property names were enough, but this is now disallowed because it can get system environment variables, like `PATH`. +- The array helper `_array_search_dot` is now marked for `@internal` use. As this is used by `dot_array_search`, users should not use `_array_search_dot` directly in their code. +- `CacheInterface::getMetaData()` returns `null` for misses, or an array with at least the "expires" key set to the absolute epoch expiration, or `null` for "never expires". The File, Memcached, and Wincache Handlers still return `false` which will become `null` in a future release. + +## Deprecations + +- Deprecated `CodeIgniter\View\View::$currentSection` property. +- Language strings and exceptions for invalid cookie samesite values are deprecated in favor of `CookieException`'s own exception message. +- Deprecated `CodeIgniter\Entity` in favor of `CodeIgniter\Entity\Entity` +- Deprecated cookie-related properties of `Response` in order to use the `Cookie` class. +- Deprecated cookie-related properties of `Security` in order to use the `Cookie` class. +- Deprecated cookie-related properties of `Session` in order to use the `Cookie` class. +- Deprecated `Security::isExpired()` in favor of `Cookie`'s internal expiration status. +- Deprecated `CIDatabaseTestCase` to use the `DatabaseTestTrait` instead. +- Deprecated `FeatureTestCase` to use the `FeatureTestTrait` instead. +- Deprecated `ControllerTester` to use the `ControllerTestTrait` instead. +- Consolidated and deprecated `ControllerResponse` and `FeatureResponse` in favor of `TestResponse`. +- Deprecated `Time::instance()`, use `Time::createFromInstance()` instead (now accepts `DateTimeInterface`). +- Deprecated `IncomingRequest::removeRelativeDirectory()`, use `URI::removeDotSegments()` instead +- Deprecated `\API\ResponseTrait::failValidationError()` to use `\API\ResponseTrait::failValidationErrors()` instead + +## Bugs Fixed + +- `BaseConnection::query()` now returns `false` for failed queries (unless `DBDebug==true`, in which case an exception will be thrown) and returns boolean values for write-type queries as specified in the docs. + +See the repo's [CHANGELOG_4.1.md](https://github.com/codeigniter4/CodeIgniter4/blob/develop/changelogs/CHANGELOG_4.1.md) for a complete list of bugs fixed. diff --git a/docs/changelogs/v4.1.3.md b/docs/changelogs/v4.1.3.md new file mode 100644 index 000000000000..c7576c6456e4 --- /dev/null +++ b/docs/changelogs/v4.1.3.md @@ -0,0 +1,26 @@ +# Version 4.1.3 + +Release Date: June 6, 2021 + +**4.1.3 release of CodeIgniter4** + +## Enhancements + +- New functions in the File Helper: `directory_mirror()` and `same_file()` +- Implemented NexusPHP's `Tachycardia` for slow test identification +- Added a new `$ttl` option to `Cache` config for future use + +## Changes + +- Added MySQL 8.0 to the test matrix +- Improved environment detection from `$_SERVER` +- Numerous sweeping code improvements via Rector and analysis + +## Bugs Fixed + +- Fixed a bug where `CURLRequest` would try to use a project URI instead of its base +- Fixed a bug where CLI mode was not detected under `cgi-fcgi` +- Fixed a logic bug in Cookie construction +- Fixed numerous issues in SQLite3's `Forge` class related to an incorrect attribute name + +See the repo's [CHANGELOG_4.1.md](https://github.com/codeigniter4/CodeIgniter4/blob/develop/changelogs/CHANGELOG_4.1.md) for a complete list of bugs fixed. diff --git a/docs/changelogs/v4.1.4.md b/docs/changelogs/v4.1.4.md new file mode 100644 index 000000000000..00e62e3de8b7 --- /dev/null +++ b/docs/changelogs/v4.1.4.md @@ -0,0 +1,49 @@ +# Version 4.1.4 + +Release Date: September 6, 2021 + +**4.1.4 release of CodeIgniter4** + +This release focuses on code style. All changes (except those noted below) are cosmetic to bring the code in line with the new [CodeIgniter Coding Standard](https://github.com/CodeIgniter/coding-standard) (based on PSR-12). + +## BREAKING + +- The following methods were changed from "public" to "protected" to match their parent class methods and better align with their uses: + - `CodeIgniter\Database\MySQLi\Connection::execute()` + - `CodeIgniter\Database\MySQLi\Connection::_fieldData()` + - `CodeIgniter\Database\MySQLi\Connection::_indexData()` + - `CodeIgniter\Database\MySQLi\Connection::_foreignKeyData()` + - `CodeIgniter\Database\Postgre\Builder::_like_statement()` + - `CodeIgniter\Database\Postgre\Connection::execute()` + - `CodeIgniter\Database\Postgre\Connection::_fieldData()` + - `CodeIgniter\Database\Postgre\Connection::_indexData()` + - `CodeIgniter\Database\Postgre\Connection::_foreignKeyData()` + - `CodeIgniter\Database\SQLSRV\Connection::execute()` + - `CodeIgniter\Database\SQLSRV\Connection::_fieldData()` + - `CodeIgniter\Database\SQLSRV\Connection::_indexData()` + - `CodeIgniter\Database\SQLSRV\Connection::_foreignKeyData()` + - `CodeIgniter\Database\SQLite3\Connection::execute()` + - `CodeIgniter\Database\SQLite3\Connection::_fieldData()` + - `CodeIgniter\Database\SQLite3\Connection::_indexData()` + - `CodeIgniter\Database\SQLite3\Connection::_foreignKeyData()` + - `CodeIgniter\Images\Handlers\GDHandler::_flatten()` + - `CodeIgniter\Images\Handlers\GDHandler::_flip()` + - `CodeIgniter\Images\Handlers\ImageMagickHandler::_flatten()` + - `CodeIgniter\Images\Handlers\ImageMagickHandler::_flip()` + - `CodeIgniter\Test\Mock\MockIncomingRequest::detectURI()` + - `CodeIgniter\Test\Mock\MockSecurity::sendCookie()` +- To be compatible with the strict inheritance checks of PHP 8.1, return types were added to the following method signatures to match their parents' signatures whenever possible: + - `CodeIgniter\Cookie\Cookie::offsetExists()` + - `CodeIgniter\Cookie\Cookie::offsetSet()` + - `CodeIgniter\Cookie\Cookie::offsetUnset()` + - `CodeIgniter\Cookie\CookieStore::getIterator()` + - `CodeIgniter\I18n\Time::__wakeup()` + - `CodeIgniter\Test\Filters\CITestStreamFilter::filter()` +- Related to the strict inheritance checks of PHP 8.1, the following session handlers implementing `SessionHandlerInterface` have their public methods modified to match the interface: + - `CodeIgniter\Session\Handlers\ArrayHandler` + - `CodeIgniter\Session\Handlers\DatabaseHandler` + - `CodeIgniter\Session\Handlers\FileHandler` + - `CodeIgniter\Session\Handlers\MemcachedHandler` + - `CodeIgniter\Session\Handlers\RedisHandler` + +See the repo's [CHANGELOG_4.1.md](https://github.com/codeigniter4/CodeIgniter4/blob/develop/changelogs/CHANGELOG_4.1.md) for a complete list of changes. diff --git a/docs/changelogs/v4.1.5.md b/docs/changelogs/v4.1.5.md new file mode 100644 index 000000000000..c645044758c1 --- /dev/null +++ b/docs/changelogs/v4.1.5.md @@ -0,0 +1,38 @@ +# Version 4.1.5 + +Release Date: November 8, 2021 + +**4.1.5 release of CodeIgniter4** + +## BREAKING + +- Fixed [a bug](https://github.com/codeigniter4/CodeIgniter4/issues/2913) in CSRF protection. Now CSRF protection works on PUT/PATCH/DELETE requests when the CSRF filter is applied. If you use such requests, you need to send the CSRF token. +- In the previous version, if you didn't provide your own headers, `CURLRequest` would send the request-headers from the browser, due to a bug. As of this version, it does not send them. +- Fixed `BaseBuilder::insertBatch()` return value for `testMode`. Now it returns an SQL string array instead of the number of affected rows. This change was made to maintain compatibility between the return types of batch methods. Now the returned data type for `BaseBuilder::insertBatch()` is the same as for the `updateBatch()` method. +- Major optimizations have been made to the way data is processed in `BaseBuilder::insertBatch()` and `BaseBuilder::updateBatch()` methods. This resulted in reduced memory usage and faster query processing. As a trade-off, the result generated by the `$query->getOriginalQuery()` method was changed. It no longer returns the query with the bound parameters, but the actual query that was run. + +## Enhancements + +- Added Cache config for reserved characters +- The [addForeignKey()](../dbmgmt/forge.md#adding-foreign-keys) function of the `Forge` class can now define composite foreign keys in an array +- The `dropKey` function of the `Forge` class can remove a key +- Now `_` can be used as a separator in environment variables. See [Namespace Separator](../general/configuration.md#namespace-separator). +- Added multiple filters for a route and classname filters +- Reduced memory usage of `insertBatch()` and `updateBatch()` +- Added [Session-based CSRF Protection](../libraries/security.md#csrf-protection-methods) +- Added `valid_url_strict` rule for `Validation` +- Debug Toolbar + - Added formatted query string to timeline + - Improved keyword highlighting and escaping of query strings + +## Changes + +- Always escape identifiers in the `set`, `setUpdateBatch`, and `insertBatch` functions in `BaseBuilder`. + +## Deprecations + +- Deprecated `CodeIgniter\\Cache\\Handlers\\BaseHandler::RESERVED_CHARACTERS` in favor of the new config property + +## Bugs Fixed + +See the repo's [CHANGELOG_4.1.md](https://github.com/codeigniter4/CodeIgniter4/blob/develop/changelogs/CHANGELOG_4.1.md) for a complete list of bugs fixed. diff --git a/docs/changelogs/v4.1.6.md b/docs/changelogs/v4.1.6.md new file mode 100644 index 000000000000..c77d3fa6736e --- /dev/null +++ b/docs/changelogs/v4.1.6.md @@ -0,0 +1,48 @@ +# Version 4.1.6 + +Release Date: January 3, 2022 + +**4.1.6 release of CodeIgniter4** + +## SECURITY + +- *Deserialization of Untrusted Data* found in the `old()` function was fixed. See the [Security advisory](https://github.com/codeigniter4/CodeIgniter4/security/advisories/GHSA-w6jr-wj64-mc9x) for more information. + +## BREAKING + +- Multiple table names will no longer be stored in `BaseBuilder::$tableName` - an empty string will be used instead. + +### Validation changes + +- The previous version of the Validation could not handle an array item. Because of the bug fix, the validation results may be different, or validation may raise a `TypeError`. But the previous version's results are probably incorrect. +- The Validation separates the validation process of multiple fields like `contacts.*.name` and of a single field. When a single field had array data, the previous version validated each element of the array. The validation rule got an element of the array as the parameter. On the other hand, the current version passes the array to the validation rule as a whole. + +## Enhancements + +- Full support for PHP 8.1. +- Database pane on debug toolbar now displays the location where the query was called from. Also displays the full backtrace. +- [Subqueries](../database/query_builder.md#6-subqueries) in QueryBuilder can now be an instance of the BaseBuilder class. +- Kint was updated from ^3.3 to ^4.0. + +## Changes + +- The process of sending cookies has been moved to the `Response` class. Now the `Security` and `CookieStore` classes don't send cookies, but set them on the Response. + +## Deprecations + +- `Seeder::faker()` and `Seeder::$faker` are deprecated. +- `BaseBuilder::cleanClone()` is deprecated. + +### Sending Cookies + +The process of sending cookies has been moved to the `Response` class. And the following methods are deprecated: + +- `CookieStore::dispatch()` +- `CookieStore::setRawCookie()` +- `CookieStore::setCookie()` +- `Security::sendCookie()` +- `Security::doSendCookie()` + +## Bugs Fixed + +See the repo's [CHANGELOG_4.1.md](https://github.com/codeigniter4/CodeIgniter4/blob/develop/changelogs/CHANGELOG_4.1.md) for a complete list of bugs fixed. diff --git a/docs/changelogs/v4.1.7.md b/docs/changelogs/v4.1.7.md new file mode 100644 index 000000000000..f683b228371d --- /dev/null +++ b/docs/changelogs/v4.1.7.md @@ -0,0 +1,25 @@ +# Version 4.1.7 + +Release Date: January 9, 2022 + +**4.1.7 release of CodeIgniter4** + +## BREAKING + +- Because `FILTER_SANITIZE_STRING` has been deprecated since PHP 8.1, the output of `get_cookie()`, which uses it when `$xssClean` is true, has changed. Now it uses `FILTER_SANITIZE_FULL_SPECIAL_CHARS`. Note that using XSS filtering is a bad practice. It does not prevent XSS attacks perfectly. Using `esc()` with the correct `$context` in the views is recommended. + +## Enhancements + +None. + +## Changes + +None. + +## Deprecations + +None. + +## Bugs Fixed + +See the repo's [CHANGELOG_4.1.md](https://github.com/codeigniter4/CodeIgniter4/blob/develop/changelogs/CHANGELOG_4.1.md) for a complete list of bugs fixed. diff --git a/docs/changelogs/v4.1.8.md b/docs/changelogs/v4.1.8.md new file mode 100644 index 000000000000..3c2edd52b6d5 --- /dev/null +++ b/docs/changelogs/v4.1.8.md @@ -0,0 +1,9 @@ +# Version 4.1.8 + +Release Date: January 24, 2022 + +**4.1.8 release of CodeIgniter4** + +## SECURITY + +- *XSS Vulnerability* in the `API\ResponseTrait` was fixed. See the [Security advisory](https://github.com/codeigniter4/CodeIgniter4/security/advisories/GHSA-7528-7jg5-6g62) for more information. diff --git a/docs/changelogs/v4.1.9.md b/docs/changelogs/v4.1.9.md new file mode 100644 index 000000000000..d45ebcf4bad3 --- /dev/null +++ b/docs/changelogs/v4.1.9.md @@ -0,0 +1,10 @@ +# Version 4.1.9 + +Release Date: February 25, 2022 + +**4.1.9 release of CodeIgniter4** + +## SECURITY + +- *Remote CLI Command Execution Vulnerability* was fixed. See the [Security advisory GHSA-xjp4-6w75-qrj7](https://github.com/codeigniter4/CodeIgniter4/security/advisories/GHSA-xjp4-6w75-qrj7) for more information. +- *Cross-Site Request Forgery (CSRF) Protection Bypass Vulnerability* was fixed. See the [Security advisory GHSA-4v37-24gm-h554](https://github.com/codeigniter4/CodeIgniter4/security/advisories/GHSA-4v37-24gm-h554) for more information. diff --git a/docs/changelogs/v4.2.0.md b/docs/changelogs/v4.2.0.md new file mode 100644 index 000000000000..835c6e99395e --- /dev/null +++ b/docs/changelogs/v4.2.0.md @@ -0,0 +1,143 @@ +# Version 4.2.0 + +Release Date: June 3, 2022 + +**4.2.0 release of CodeIgniter4** + +## Highlights + +- Update minimum PHP requirement to 7.4. +- To make the default configuration more secure, auto-routing has been changed to disabled by default. +- **OCI8 Driver for Oracle Database** (*contributed by* [ytetsuro](https://github.com/ytetsuro)). See [Database](#database). +- **Improved Auto Routing** (opt-in) (*contributed by* [kenjis](https://github.com/kenjis)). See [New Improved Auto Routing](#new-improved-auto-routing). +- Query Builder **Subqueries** and **UNION** support (*contributed by* [Andrey Pyzhikov](https://github.com/iRedds)). See [Database](#database). + +### New Contributors + +- [@fdomgjoni99](https://github.com/fdomgjoni99) made their first contribution in [#5608](https://github.com/codeigniter4/CodeIgniter4/pull/5608) +- [@Nudasoft](https://github.com/Nudasoft) made their first contribution in [#5715](https://github.com/codeigniter4/CodeIgniter4/pull/5715) +- [@beganovich](https://github.com/beganovich) made their first contribution in [#5823](https://github.com/codeigniter4/CodeIgniter4/pull/5823) +- [@tcgumus](https://github.com/tcgumus) made their first contribution in [#5851](https://github.com/codeigniter4/CodeIgniter4/pull/5851) +- [@michaelrk02](https://github.com/michaelrk02) made their first contribution in [#5878](https://github.com/codeigniter4/CodeIgniter4/pull/5878) +- [@datamweb](https://github.com/datamweb) made their first contribution in [#5894](https://github.com/codeigniter4/CodeIgniter4/pull/5894) +- [@xlii-chl](https://github.com/xlii-chl) made their first contribution in [#5884](https://github.com/codeigniter4/CodeIgniter4/pull/5884) +- [@valmorflores](https://github.com/valmorflores) made their first contribution in [#6051](https://github.com/codeigniter4/CodeIgniter4/pull/6051) +- [@tearoom6](https://github.com/tearoom6) made their first contribution in [#6012](https://github.com/codeigniter4/CodeIgniter4/pull/6012) +- [@lonnie-vault](https://github.com/lonnie-vault) made their first contribution in [#6060](https://github.com/codeigniter4/CodeIgniter4/pull/6060) + +## BREAKING + +### Method Signature Changes + +- The method signatures of `CodeIgniter\Database\BaseBuilder::join()` and `CodeIgniter\Database\*\Builder::join()` have been changed. +- The method signature of `Validation::setRule()` has been changed. The `string` typehint on the `$rules` parameter was removed. Extending classes should likewise remove the typehint so as not to break LSP. +- The method signature of `CodeIgniter\CLI\CommandRunner::_remap()` has been changed to fix a bug. +- The default parameter values for `Service::reset()` and `CIUnitTestCase::resetServices()` have been changed from `false` to `true`. This is to eliminate unexpected problems during testing, such as `lang()` not getting translated messages. + +### Behavior Changes + +- The `CodeIgniter\CodeIgniter` class has a new property `$context` and it must have the correct context at runtime. So the following files have been changed: + - `public/index.php` + - `spark` +- The `system/bootstrap.php` file has been modified to easily implement [Preloading](https://www.php.net/manual/en/opcache.preloading.php). Returning a `CodeIgniter` instance and loading the `.env` file have been moved to `index.php` and `spark`. +- The behavior of `CodeIgniter\Autoloader\Autoloader::initialize()` has changed to fix a bug. It used to use the Composer classmap only when `$modules->discoverInComposer` is true. Now it always uses the Composer classmap if Composer is available. +- The color code output by [CLI::color()](../cli/cli_library.md#color) has been changed to fix a bug. +- To prevent unexpected access from the web browser, if a controller is added to a cli route (`$routes->cli()`), all methods of that controller are no longer accessible via auto-routing. +- There is a possible backward compatibility break for users extending the History Collector, and they should probably update the `History::setFiles()` method. +- The unexpected behavior of `dot_array_search()` has been fixed. Now `dot_array_search('foo.bar.baz', ['foo' => ['bar' => 23]])` returns `null`. Previous versions returned `23`. +- `CodeIgniter::storePreviousURL()` has been changed to store only the URLs whose Content-Type was `text/html`. It also affects the behavior of `previous_url()` and `redirect()->back()`. + +## Enhancements + +### New Improved Auto Routing + +Added a new, optional, more secure auto router. These are the changes from the legacy auto-routing: + +- A controller method needs an HTTP verb prefix like `getIndex()`, `postCreate()`. + - Developers always know the HTTP method, so requests by an unexpected HTTP method do not pass. +- The Default Controller (`Home` by default) and the Default Method (`index` by default) must be omitted in the URI. + - It enforces a one-to-one correspondence between controller methods and URIs. + - E.g. by default, you can access `/`, but `/home` and `/home/index` will be 404. +- It checks the method parameter count. + - If there are more parameters in the URI than the method parameters, it results in a 404. +- It does not support the `_remap()` method. + - It enforces a one-to-one correspondence between controller methods and URIs. +- It can't access controllers in Defined Routes. + - It completely separates controllers accessible via **Auto Routes** from those accessible via **Defined Routes**. + +See [Auto Routing (Improved)](../incoming/auto_routing_improved.md#auto-routing-improved) for the details. + +### Database + +- Added a new OCI8 database driver. + - It can access Oracle Database and supports SQL and PL/SQL statements. +- QueryBuilder + - Added Subqueries in the FROM section. See [Subqueries](../database/query_builder.md#subqueries). + - Added Subqueries in the SELECT section. See [Select](../database/query_builder.md#select). + - The `BaseBuilder::buildSubquery()` method can take an optional third argument `string $alias`. + - Union queries. See [Union queries](../database/query_builder.md#union-queries). +- Raw SQL string support + - Added the class `CodeIgniter\Database\RawSql` which expresses raw SQL strings. + - [select()](../database/query_builder.md#rawsql), [where()](../database/query_builder.md#5-rawsql), [like()](../database/query_builder.md#3-rawsql), [join()](../database/query_builder.md#rawsql_1) accept a `CodeIgniter\Database\RawSql` instance. + - `DBForge::addField()` default value raw SQL string support. See [Raw Sql Strings as Default Values](../dbmgmt/forge.md#raw-sql-strings-as-default-values). +- SQLite3 has a new Config item `foreignKeys` that enables foreign key constraints. + +### Helpers and Functions + +- HTML helper `script_tag()` now uses `null` values to write boolean attributes in minimized form: ` +``` + +Alternatively, an associative array can be passed to the `script_tag()` function for complete control over all attributes and values: + +```php + 'js/printer.js', 'defer' => null]; + +echo script_tag($script); +// +``` + +#### ul($list[, $attributes = '']) + +- **Parameters** + - **$list** `array` List entries + - **$attributes** `array` HTML attributes + +- **Returns**: An HTML unordered list element + +- **Return type**: `string` + +Permits you to generate an unordered HTML list from a simple or multi-dimensional array. Example: + +```php + 'boldlist', + 'id' => 'mylist', +]; + +echo ul($list, $attributes); +``` + +The above code will produce this: + +```html + +``` + +Here is a more complex example, using a multi-dimensional array: + +```php + 'boldlist', + 'id' => 'mylist', +]; + +$list = [ + 'colors' => [ + 'red', + 'blue', + 'green', + ], + 'shapes' => [ + 'round', + 'square', + 'circles' => [ + 'ellipse', + 'oval', + 'sphere', + ], + ], + 'moods' => [ + 'happy', + 'upset' => [ + 'defeated' => [ + 'dejected', + 'disheartened', + 'depressed', + ], + 'annoyed', + 'cross', + 'angry', + ], + ], +]; + +echo ul($list, $attributes); +``` + +The above code will produce this: + +```html + +``` + +#### ol($list, $attributes = '') + +- **Parameters** + - **$list** `array` List entries + - **$attributes** `array` HTML attributes + +- **Returns**: An HTML ordered list element + +- **Return type**: `string` + +Identical to `ul()`, except that it produces an `
    ` element for ordered lists instead of `