github.com/System-Glitch/goyave/v2@v2.10.3-0.20200819142921-51011e75d504/docs/assets/js/29.b87adf4a.js (about)

     1  (window.webpackJsonp=window.webpackJsonp||[]).push([[29],{400:function(t,a,s){"use strict";s.r(a);var e=s(25),n=Object(e.a)({},(function(){var t=this,a=t.$createElement,s=t._self._c||a;return s("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[s("h1",{attrs:{id:"upgrade-guide"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#upgrade-guide"}},[t._v("#")]),t._v(" Upgrade Guide")]),t._v(" "),s("p",[t._v("Although Goyave is developed with backwards compatibility, breaking changes can happen, especially in the project's early days. This guide will help you to upgrade your applications using older versions of the framework. Bear in mind that if you are several versions behind, you will have to follow the instructions for each in-between versions.")]),t._v(" "),s("p"),s("div",{staticClass:"table-of-contents"},[s("ul",[s("li",[s("a",{attrs:{href:"#v2-x-x-to-v3-0-0"}},[t._v("v2.x.x to v3.0.0")]),s("ul",[s("li",[s("a",{attrs:{href:"#routing-changes"}},[t._v("Routing changes")])]),s("li",[s("a",{attrs:{href:"#convention-changes"}},[t._v("Convention changes")])]),s("li",[s("a",{attrs:{href:"#validation-changes"}},[t._v("Validation changes")])]),s("li",[s("a",{attrs:{href:"#configuration-changes"}},[t._v("Configuration changes")])]),s("li",[s("a",{attrs:{href:"#minor-changes"}},[t._v("Minor changes")])])])]),s("li",[s("a",{attrs:{href:"#v1-0-0-to-v2-0-0"}},[t._v("v1.0.0 to v2.0.0")])])])]),s("p"),t._v(" "),s("h2",{attrs:{id:"v2-x-x-to-v3-0-0"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#v2-x-x-to-v3-0-0"}},[t._v("#")]),t._v(" v2.x.x to v3.0.0")]),t._v(" "),s("h3",{attrs:{id:"routing-changes"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#routing-changes"}},[t._v("#")]),t._v(" Routing changes")]),t._v(" "),s("p",[t._v("Routing has been improved by changing how validation and route-specific middleware are registered. The signature of the router functions have been simplified by removing the validation and middleware parameters from "),s("code",[t._v("Route()")]),t._v(", "),s("code",[t._v("Get()")]),t._v(", "),s("code",[t._v("Post()")]),t._v(", etc. This is now done through two new chainable methods on the "),s("code",[t._v("Route")]),t._v(":")]),t._v(" "),s("div",{staticClass:"language-go extra-class"},[s("pre",{pre:!0,attrs:{class:"language-go"}},[s("code",[t._v("router"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("Post")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"/echo"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" hello"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Echo"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" hellorequest"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Echo"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\n"),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Becomes")]),t._v("\nrouter"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("Post")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"/echo"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" hello"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Echo"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("Validate")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("hello"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("EchoRequest"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n")])])]),s("div",{staticClass:"language-go extra-class"},[s("pre",{pre:!0,attrs:{class:"language-go"}},[s("code",[t._v("router"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("Post")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"/echo"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" hello"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Echo"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("nil")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" middleware"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Trim"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" middleware"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("Gzip")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\n"),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Becomes")]),t._v("\nrouter"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("Post")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"/echo"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" hello"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Echo"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("Middleware")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("middleware"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Trim"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" middleware"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("Gzip")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n")])])]),s("div",{staticClass:"language-go extra-class"},[s("pre",{pre:!0,attrs:{class:"language-go"}},[s("code",[t._v("router"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("Post")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"/echo"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" hello"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Echo"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" hellorequest"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Echo"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" middleware"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Trim"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\n"),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Becomes")]),t._v("\nrouter"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("Post")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"/echo"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" hello"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Echo"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("Validate")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("hello"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("EchoRequest"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("Middleware")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("middleware"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Trim"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n")])])]),s("h3",{attrs:{id:"convention-changes"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#convention-changes"}},[t._v("#")]),t._v(" Convention changes")]),t._v(" "),s("p",[t._v("This release brought changes to the conventions. Although your applications can still work with the old ones, it's recommended to make the change.")]),t._v(" "),s("ul",[s("li",[t._v("Move "),s("code",[t._v("validation.go")]),t._v(" and "),s("code",[t._v("placeholders.go")]),t._v(" to a new "),s("code",[t._v("http/validation")]),t._v(" package. Don't forget to change the "),s("code",[t._v("package")]),t._v(" instruction in these files.")]),t._v(" "),s("li",[t._v("In "),s("code",[t._v("kernel.go")]),t._v(", import your "),s("code",[t._v("http/validation")]),t._v(" package instead of "),s("code",[t._v("http/request")]),t._v(".")]),t._v(" "),s("li",[t._v("Validation rule sets are now located in a "),s("code",[t._v("request.go")]),t._v(" file in the same package as the controller. So if you had "),s("code",[t._v("http/request/productrequest/product.go")]),t._v(", take the content of that file and move it to "),s("code",[t._v("http/controller/product/request.go")]),t._v(". Rule sets are now named after the name of the controller handler they will be used with, and end with "),s("code",[t._v("Request")]),t._v(". For example, a rule set for the "),s("code",[t._v("Store")]),t._v(" handler will be named "),s("code",[t._v("StoreRequest")]),t._v(". If a rule set can be used for multiple handlers, consider using a name suited for all of them. The rules for a store operation are often the same for update operations, so instead of duplicating the set, create one unique set called "),s("code",[t._v("UpsertRequest")]),t._v(". You will likely just have to add "),s("code",[t._v("Request")]),t._v(" at the end of the name of your sets.")]),t._v(" "),s("li",[t._v("Update your route definition by changing the rule sets you use.")])]),t._v(" "),s("div",{staticClass:"language-go extra-class"},[s("pre",{pre:!0,attrs:{class:"language-go"}},[s("code",[t._v("router"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("Post")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"/echo"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" hello"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Echo"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" hellorequest"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Echo"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\n"),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Becomes")]),t._v("\nrouter"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("Post")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"/echo"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" hello"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Echo"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("Validate")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("hello"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("EchoRequest"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n")])])]),s("h3",{attrs:{id:"validation-changes"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#validation-changes"}},[t._v("#")]),t._v(" Validation changes")]),t._v(" "),s("p",[t._v("Although the validation changes are internally huge, there is only a tiny amount of code to change to update your application. You will have to update all your handlers accessing the "),s("code",[t._v("request.Rules")]),t._v(" field. This field is no longer a "),s("code",[t._v("validation.RuleSet")]),t._v(" and has been changed to "),s("code",[t._v("*validation.Rules")]),t._v(", which will be easier to use, as the rules are already parsed. Refer to the "),s("RouterLink",{attrs:{to:"/guide/basics/validation.html#alternative-syntax"}},[t._v("alternative validation syntax")]),t._v(" documentation for more details about this new structure.")],1),t._v(" "),s("ul",[s("li",[t._v("The following rules now pass if the validated data type is not supported: "),s("code",[t._v("greater_than")]),t._v(", "),s("code",[t._v("greater_than_equal")]),t._v(", "),s("code",[t._v("lower_than")]),t._v(", "),s("code",[t._v("lower_than_equal")]),t._v(", "),s("code",[t._v("size")]),t._v(".")])]),t._v(" "),s("h3",{attrs:{id:"configuration-changes"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#configuration-changes"}},[t._v("#")]),t._v(" Configuration changes")]),t._v(" "),s("p",[t._v("The new configuration system does things very differently internally, but should not require too many changes to make your project compatible. First, you will have to update your configuration files. Here is an example of configuration file containing all the core entries:")]),t._v(" "),s("div",{staticClass:"language-json extra-class"},[s("pre",{pre:!0,attrs:{class:"language-json"}},[s("code",[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n  "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"app"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n    "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"name"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"goyave_template"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n    "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"environment"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"localhost"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n    "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"debug"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("true")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n    "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"defaultLanguage"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"en-US"')]),t._v("\n  "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n  "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"server"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n    "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"host"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"127.0.0.1"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n    "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"maintenance"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("false")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n    "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"protocol"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"http"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n    "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"domain"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('""')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n    "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"port"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("8080")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n    "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"httpsPort"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("8081")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n    "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"timeout"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("10")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n    "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"maxUploadSize"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("10")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n    "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"tls"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n      "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"cert"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"/path/to/cert"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n      "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"key"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"/path/to/key"')]),t._v("\n    "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n  "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n  "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"database"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n    "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"connection"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"mysql"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n    "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"host"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"127.0.0.1"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n    "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"port"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("3306")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n    "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"name"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"goyave"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n    "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"username"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"root"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n    "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"password"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"root"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n    "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"options"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"charset=utf8&parseTime=true&loc=Local"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n    "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"maxOpenConnections"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("20")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n    "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"maxIdleConnections"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("20")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n    "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"maxLifetime"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("300")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n    "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"autoMigrate"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("false")]),t._v("\n  "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])]),s("p",[t._v("If you were using any of the configuration entries above in your code, you should update the keys used in the calls of "),s("code",[t._v("config.Get()")]),t._v(", "),s("code",[t._v("config.GetString()")]),t._v(", "),s("code",[t._v("config.Bool()")]),t._v(" and "),s("code",[t._v("config.Has()")]),t._v(". Keys are now "),s("strong",[t._v("dot-separated")]),t._v(" paths. For example, to access the database "),s("code",[t._v("host")]),t._v(" entry, the key is "),s("code",[t._v("database.host")]),t._v(".")]),t._v(" "),s("p",[t._v("For more information, refer to the "),s("RouterLink",{attrs:{to:"/guide/configuration.html#configuration-reference"}},[t._v("configuration reference")]),t._v(".")],1),t._v(" "),s("p",[t._v("If you are using the "),s("code",[t._v("auth")]),t._v(" package (basic auth, JWT), you will need to update your configuration entries too.")]),t._v(" "),s("ul",[s("li",[s("code",[t._v("authUsername")]),t._v(" becomes "),s("code",[t._v("auth.basic.username")])]),t._v(" "),s("li",[s("code",[t._v("authPassword")]),t._v(" becomes "),s("code",[t._v("auth.basic.password")])]),t._v(" "),s("li",[s("code",[t._v("jwtExpiry")]),t._v(" becomes "),s("code",[t._v("auth.jwt.expiry")])]),t._v(" "),s("li",[s("code",[t._v("jwtSecret")]),t._v(" becomes "),s("code",[t._v("auth.jwt.secret")])])]),t._v(" "),s("div",{staticClass:"language-json extra-class"},[s("pre",{pre:!0,attrs:{class:"language-json"}},[s("code",[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n  ...\n  "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"auth"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n    "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"jwt"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n      "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"expiry"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("300")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n      "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"secret"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"jwt-secret"')]),t._v("\n    "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n    "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"basic"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n      "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"username"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"admin"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n      "),s("span",{pre:!0,attrs:{class:"token property"}},[t._v('"password"')]),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"admin"')]),t._v("\n    "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n  "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])]),s("p",[t._v("Finally, "),s("code",[t._v("config.Register()")]),t._v(" function has changed signature. See the "),s("RouterLink",{attrs:{to:"/guide/configuration.html#custom-config-entries"}},[t._v("configuration documentation")]),t._v(" for more details on how to migrate.")],1),t._v(" "),s("h3",{attrs:{id:"minor-changes"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#minor-changes"}},[t._v("#")]),t._v(" Minor changes")]),t._v(" "),s("ul",[s("li",[t._v("Recovery middleware now correctly handles panics with a "),s("code",[t._v("nil")]),t._v(" value. You may have to update your custom status handler for the HTTP "),s("code",[t._v("500")]),t._v(" error code.")]),t._v(" "),s("li",[t._v("Log "),s("code",[t._v("Formatter")]),t._v(" now receive the length of the response (in bytes) instead of the full body.\n"),s("ul",[s("li",[s("code",[t._v("log.Formatter")]),t._v(" is now "),s("code",[t._v("func(now time.Time, response *goyave.Response, request *goyave.Request, length int) string")]),t._v(".")]),t._v(" "),s("li",[t._v("If you were just using "),s("code",[t._v("len(body)")]),t._v(", just replace it with "),s("code",[t._v("length")]),t._v(".")]),t._v(" "),s("li",[t._v("If you were using the content of the body in your logger, you will have to implement a "),s("RouterLink",{attrs:{to:"/guide/basics/responses.html#chained-writers"}},[t._v("chained writer")]),t._v(".")],1)])])]),t._v(" "),s("h2",{attrs:{id:"v1-0-0-to-v2-0-0"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#v1-0-0-to-v2-0-0"}},[t._v("#")]),t._v(" v1.0.0 to v2.0.0")]),t._v(" "),s("p",[t._v("This first update comes with refactoring and package renaming to better fit the Go conventions.")]),t._v(" "),s("ul",[s("li",[s("code",[t._v("goyave.Request.URL()")]),t._v(" has been renamed to "),s("code",[t._v("goyave.Request.URI()")]),t._v(".\n"),s("ul",[s("li",[s("code",[t._v("goyave.Request.URL()")]),t._v(" is now a data accessor for URL fields.")])])]),t._v(" "),s("li",[t._v("The "),s("code",[t._v("helpers")]),t._v(" package has been renamed to "),s("code",[t._v("helper")]),t._v(".\n"),s("ul",[s("li",[t._v("The "),s("code",[t._v("filesystem")]),t._v(" package thus has a different path: "),s("code",[t._v("github.com/System-Glitch/goyave/v2/helper/filesystem")]),t._v(".")])])])]),t._v(" "),s("div",{staticClass:"custom-block tip"},[s("p",{staticClass:"custom-block-title"},[t._v("TIP")]),t._v(" "),s("p",[t._v("Because this version contains breaking changes. Goyave had to move to "),s("code",[t._v("v2.0.0")]),t._v(". You need to change the path of your imports to upgrade.")]),t._v(" "),s("p",[t._v("Change "),s("code",[t._v("github.com/System-Glitch/goyave")]),t._v(" to "),s("code",[t._v("github.com/System-Glitch/goyave/v2")]),t._v(".")])])])}),[],!1,null,null,null);a.default=n.exports}}]);