Skip to content

Latest commit

 

History

History
556 lines (458 loc) · 56.2 KB

CHANGELOG-5.5.md

File metadata and controls

556 lines (458 loc) · 56.2 KB

Release Notes for 5.5.x

[Unreleased]

Added

  • Allow testing anonymous notifiables (#21379)
  • Add relation and model attributes on RelationNotFoundException (#21426)
  • Allow passing a callback to with() (#21445)
  • Added PotentiallyMissing interface to MissingValue class (be7dccc)
  • Accept $queue name on Schedule::job() (#21473)

Changed

  • Reset RefreshDatabaseState after DatabaseMigrations rolls back (#21325)
  • Make sure page resolver returns an integer (#21378)
  • Allow single error messages in ValidationException::withMessages() (#21400)
  • Revert Collection::sortBy() behaviour to 5.4 (#21382)
  • Use fill instead of forceFill while storing pivot attributes (#21403)
  • Alphabetize vendor:publish options (#21412)
  • Extract AnonymousResourceCollection into class to allow serialization (#21456)
  • Extract some methods from Resource into ConditionallyLoadsAttributes trait (28d945e, 1f37ccc)

Fixed

  • Ensure user is logged in before expecting user instance (#21377)
  • Remove leading slash from class while resolving controllers (#21407)
  • Make sure SQL for virtual columns is added after the unsigned modifier (#21441)
  • Fixed Collection::contains() when the found value is null (#21442)
  • Fixed merge issue in Relation::morphMap() (#21458)
  • Clear count query select bindings in Relation::getRelationExistenceCountQuery() (#21468)

v5.5.13 (2017-09-24)

Added

  • Added optional config option for whoops blacklist (#21336, a83ebc1)
  • Added Collection::pad() method (#21342)

Changed

  • Made $callback parameter of Arr::sort() optional (#21337)
  • Support setting custom REMOTE_ADDR in MakesHttpRequests (#21351)
  • Changed visibility of $output to public on console events (#21356)

Fixed

  • Don't compare remember token in user providers if it's null (srsly for real this time, pinky promise) (#21328, #21368)

v5.5.12 (2017-09-22)

Added

  • Added "software" as an uncountable word (#21324)

Fixed

  • Don't compare remember token if it's null (#21328)

v5.5.11 (2017-09-21)

Fixed

  • Fixed bug in EloquentUserProvider introduced in #21320 (#21323)

v5.5.10 (2017-09-21)

Added

  • Added Route::respondWithRoute($name) method (#21299, 66c5e46)
  • Added $strict parameter to TestResponse::assertJson() (#21301)

Changed

  • Added "firmware" as an uncountable word (#21306)
  • Allow MorphTo::associate() accept null (#21318)
  • Changed __() signature to match Translation::trans() (10c013c)

Fixed

  • Add missing driver parameter to doctrine connection (#21297)

Security

  • Perform constant-time token comparison in DatabaseUserProvider (#21320)

v5.5.9 (2017-09-20)

Changed

  • Perform stable sort in Collection::sortBy() (2nd attempt) (#21270)
  • Return empty string if database session key is expired (#21277)

Fixed

  • Fixed setting Model::UPDATED_AT in SoftDeletes (#21286)
  • Apply custom pivot model attribute casting on arrays (#21275)

v5.5.8 (2017-09-20)

Fixed

  • Fixed issue with routes sorting (#21261)

v5.5.7 (2017-09-19)

Fixed

  • Fix CacheClearCommand binding (#21256)

v5.5.6 (2017-09-19)

Changed

  • Clear real-time facades when running cache:clear (#21250, 1856601)

Fixed

  • Reverted stable sort support in Collection::sortBy() (#21255)

v5.5.5 (2017-09-19)

Added

  • Added :input placeholder in validation error messages (#21175)
  • Added @includeFirst Blade directive (#21172)
  • Allow setting column styles for tables in Artisan commands (#21169)
  • Added ValidatesRequests::extractInputFromRules() method (#21192)
  • Added -m shortcut to make:factory (#21219)
  • Added ability to set a fallback (catch-all) route (#21234)

Changed

  • Support null on Model::UPDATED_AT (#21178)
  • Render views from config while building error views (#21145)
  • Use multibyte functions in some Str methods (#21207)
  • Perform stable sort in Collection::sortBy() (#21214)

Fixed

  • Ignore SELECT bindings in prepareBindingsForUpdate() (#21173)
  • Fixed remember check in AuthenticatesUsers::attemptLogin() (#21221)
  • Added "hardware" as an uncountable word (#21236)

v5.5.4 (2017-09-13)

Added

  • Added Blueprint::spatialIndex() method (#21070)
  • Added support for SQL Server's TransactionIsolation DSN key (#21069)
  • Added ManagesFrequencies::everyFifteenMinutes() method (#21092)
  • Added Mailable::hasReplyTo() method (#21093)
  • Added MailMessage::template() method (#21154)
  • Added support for Rackspace to Storage::url() (#21157)
  • Added support to use sub-queries as a where condition on a join clause (#21008)

Changed

  • Return null from Route::getAction() if $key is not found (#21083)
  • Restore non-static signature of Router::prepareResponse() (#21114, e1a1265)
  • Removed Model type hint from Model::isNot() (4d8f0a1)
  • Prefer Jsonable over Arrayable in JsonResponse::setData() (#21136)
  • Reset cc and bcc in Mailer::setGlobalTo() (#21137)
  • Avoid trace args in JSON exceptions (#21149)

Fixed

  • Fixed @json directive parameter logic (2a25ee7)
  • Fixed a problem with withoutExceptionHandling() when called more than once (#21086)
  • Added a compileForeign() method to PostgresGrammar (#21038)
  • Reset the index after a MissingValue while resolving resource (#21127)
  • Fixed getQualifiedParentKey() on BelongsToMany relationships (#21128)
  • Fixed parameters on Route::view() when using where() (#21113)
  • Show real directory name in the exception message thrown by PackageManifest (#21099)
  • Fixed undefined offset error when refreshing a database collection (#21159)

v5.5.3 (2017-09-07)

Added

  • Added $action parameter to Route::getAction() for simpler access (#20975)
  • Added @json blade directive (#21004)
  • Added rescue() helper (#21010, 74ecb34, c4d1c47)
  • Support commas in In and NotIn parameters (#21012, 3c3c5e4)
  • Added RedisManager::connections() method (#21014, 1deaaa9)
  • Added exception class to JSON exceptions (#21043)
  • Added Gate::policies() method (#21036)
  • Added geo spatial blueprint methods (#21056)

Changed

  • Fixed migrations not being run in batch order (#20986)
  • Flush application resources on teardown (#21022)
  • Catch errors while building exception context (#21047)
  • Return $this from Validator::setCustomMessages() (#21046)

Fixed

  • Make Request::validate() return the value of parent key (#20974)
  • Fixed date comparison validators failing when a format is specified (#20940)
  • Fixed login throttling failing when decayMinutes is more than 1 (#20997)
  • Only use reflection on classes in Kernel::load() (#20998)
  • Specify lower case column_name in MySqlGrammar::compileColumnListing() (#21037)
  • Fixed eager loading problem with BelongsToMany (#21044)

Removed

  • Remove unnecessary lcfirst() call in authorizeResource() (#21017)
  • Removed $listensFor from listener stubs (#21039)

v5.5.2 (2017-09-04)

Added

  • Added mov extension and MimeType::search() method (#20917)
  • Added support for dont-discover in packages (#20921, 4a6f1f2)
  • Added retrieved model event (#20852, 84291a6)
  • Added HasOneOrMany::setForeignAttributesForCreate() method (#20871)
  • Made Route macroable (#20970)

Changed

  • Load deferred providers before commands (366c50e)
  • Don't pass cache instance to Schedule anymore (#20916, #20933)
  • Simplified mix require (#20929)
  • Return null if resource attribute contains relation with a null value (#20969)

Fixed

  • Prevent ErrorException in Collection::operatorForWhere() method (#20913)
  • Create default console input/output in Application::run() (#20922, 7647399)
  • Ignore abstract classes in Kernel::load() (#20931)
  • Fixed listener-queued-duck.stub filename (#20937)
  • Fixed faking notification sending while using AnonymousNotifiable (#20965)
  • Fixed eachSpread() and mapSpread() with nested collections (#20962)
  • Fixed generating names for classes beginning with slash (#20961)

v5.5.1 (2017-09-01)

Added

  • Added getter methods on MimeType (#20826)

Changed

  • Moved console commands auto discovery to Kernel::bootstrap() (#20863)
  • Use classes instead of helper functions (#20879, #20880)
  • Changed Resource::$collects visibility to public (#20885)

Fixed

  • Fixed choice() on non-tty terminals (#20840)
  • Fixed Macroable calls on Optional (#20845, #20898)
  • Fixed dropAllTables() when using PDO::FETCH_ASSOC mode (#20859)
  • Pass model name to ModelNotFoundException::setModel() (#20896, 891f90e)
  • Fixed Basic authentication (#20905)
  • Fixed DelegatesToResource::offsetExists() (#20887)

Removed

  • Removed redundant methods from MorphOneOrMany (#20837)

v5.5.0 (2017-08-30)

General

  • ⚠️ Require PHP 7+ (06907a0, 39809ce)
  • ⚠️ Removed deprecated ServiceProvider::compile() method (10da428)
  • ⚠️ Removed deprecated Str::quickRandom() method (2ef257a)
  • Removed build scripts (7c16b15)
  • Upgraded to Symfony 3.3 components (4db7031, 67a5367)
  • Throw RuntimeException when app key is missing (#19145, 8adbaa7)

Artisan Console

  • Added interactive prompt to vendor:publish (#18230)
  • Added migrate:fresh command (f6511d4, #20090)
  • Added make:factory command and added --factory to make:model (a6ffd8b, #19985)
  • Added make:rule command (76853fd)
  • ⚠️ Added runningInConsole() method Application contract (#18658)
  • Support default value(s) on command arguments (#18572)
  • Improved CLI detection for phpdbg (#18781)
  • ⚠️ Always return array from RetryCommand::getJobIds() (#19232)
  • Support passing absolute paths to make::listener (#19660)
  • ⚠️ Use handle() method instead of fire() (#19827, #19839, #20024)
  • Try to guess the --create option when generation migrations (#20032)
  • Generate make:policy with real user model namespace (#20047)
  • Added Kernel::load() to auto register a directory of commands (2e7ddca, d607b9c)
  • ⚠️ Removed array type hint from Command::table() (#20120)
  • Support loading multiple paths in Kernel::load() (#20251, #20595)
  • Added CommandStarting and CommandFinished events (#20298)
  • Show error message if a reverted migration is not found (#20499, a895b1e)
  • Set correct namespace in model factories when using the app:name command (#20766)
  • ⚠️ Switched the -f shortcut from --force to --factory on make:model command (#20800)

Assets

  • Added frontend preset commands (463b769, too many follow-up commits)

Authentication

  • ⚠️ Support default user providers and pass user provider to RequestGuard (#18856)
  • Made the user provider parameter on RequestGuard optional (d7f0b26)
  • Use setRememberToken() in ResetsPasswords (#19189)
  • Added a PasswordReset event (#19188)
  • ⚠️ Support multiword models in authorizeResource() (#19821)
  • Added support for no user provider in CreatesUserProviders (4feb847)

Authorization

  • Support multiple values in Gate::has() (#18758)
  • ⚠️ Prevent policies from being too greedy (#19120)
  • ⚠️ Added abilities() method to Gate contract (#19173)
  • ⚠️ Implement iterable on Gate::check() and Gate::any() (#20084)

Blade Templates

  • Added Blade::if() method (71dfe0f, 2905364, #20025)
  • Added @switch, @case, @break and @default directives (#19758)
  • ⚠️ Prevent Blade from parsing PHP code inside @php blocks (#20065)

Broadcasting

  • ⚠️ Use AccessDeniedHttpException instead if HttpException (#19611)
  • ⚠️ Upgraded to Pusher SDK v3 (#20016)

Cache

  • ⚠️ PSR-16 compliance (#20194)
  • Don't encrypt database cache values (f0c72ec)
  • Added support cache locks (4e6b2e4, 045e6f2, #19669)
  • Accept DatetimeInterface and DateInterval in cache repository (#20034)
  • Added getStore() method to cache Repository interface (#20338)
  • ⚠️ Made RateLimiter less aggressive (#20759)

Collections

  • Support multiple values in Collection::has() (#18758)
  • Added Collection::mapInto() method (2642ac7)
  • Added Collection::dd() method (f5fafad)
  • Added Collection::dump() method (#19755)
  • Added wrap() and unwrap() methods (#20055, #20068)
  • Added keys to partition(), eachSpread() and mapSpread callback (#20783, #20723)

Configuration

  • Added Config::getMany() method (#19770)

Controllers

  • ⚠️ Added ControllerDispatcher (#20031)
  • ⚠️ Removed Controller::missingMethod() (bf5d221)

Database

Eloquent ORM

  • Added API resources (#20710, too many follow-up commits)
  • ⚠️ Indicate soft deleted models as existing (#17613)
  • ⚠️ Added $localKey parameter to HasRelationships::belongsToMany() and BelongsToMany (#17903, 7c7c3bc)
  • ⚠️ Added $parentKey parameter to belongsToMany(), BelongsToMany and MorphToMany (#17915, #18380)
  • ⚠️ Renamed $parent property to $pivotParent in Pivot class (#17933, #18150)
  • ⚠️ Don't add _count suffix to column name when using withCount() with an alias (#17871)
  • ⚠️ Renamed $events to $dispatchesEvents (#17961, b6472bf, 3dbe12f)
  • ⚠️ Only return query builder when the result is null for callScope() (#18845)
  • Allow setting a factory's attribute to a factory instance (#18879)
  • Support null comparison in Model::is() (#18511)
  • Added getDirty() checks for date and castable attributes (#18400, e180e20)
  • Show method name in invalid relationship LogicException (#18749)
  • Add support for additional values in firstOrCreate() and firstOrNew() (#18878)
  • Added a second local key to HasManyThrough (#19114)
  • Respect casts declaration on custom pivot models (#19335)
  • Support creating relations without attributes (#19506)
  • Added Model::only() method (#19459)
  • ⚠️ Support model serialization on non default connection (#19521, dd45f70)
  • ⚠️ Support updating nullable dates (#19672)
  • ⚠️ Make pivot model instantiable (#20179)
  • Simplified BelongsToMany::allRelatedIds() logic (#20189)
  • Added Relation::get() method (#20052)
  • Added hasChanges(), wasChanged(), getChanges() and syncChanges() (#20129, #20130)
  • Better exception message when calling non existing methods on models (#20196, 91c1f03)
  • Added support for connections on model factories (#20191)
  • Check for real primary key in Pivot methods (8d82618)
  • Default $attributes on BelongsToMany::create() to empty array (973bff4)
  • Add ability to set a custom pivot accessor (#20411)
  • ⚠️ Call setConnection() in Model::save() (#20466)
  • ⚠️ Touch parent timestamp only if the model is dirty (#20489)
  • Added Model::loadMissing() method (#20630, 4166c12)
  • Added Model::whereKeyNot() method (#20817)

Encryption

  • Use openssl_cipher_iv_length() in Encrypter (#18684)
  • Added Encrypter::generateKey() method (6623996)
  • Use json_last_error() in Encrypter (#20099)

Errors & Logging

  • Added default 404, 419 and 500 error pages (#18483, 4d8c2c1)
  • ⚠️ Always show custom 500 error page for all exception types when not in debug mode (#18481, 3cb7b0f)
  • ⚠️ Show 419 error page on TokenMismatchException (#18728)
  • Support render() method on exceptions (ed51160, c8a9413)
  • Support report() method on exceptions (e77f6f7)
  • ⚠️ Send exceptions as JSON in debug mode if the request wants JSON (5225389, #18732, 4fe6091, 9ab58fd, #19333)
  • ⚠️ Moved exceptions from $dontReport into $internalDontReport (841b36c)
  • Added Handler::context() method, that by default adds some default context to logs (23b7d6b)
  • ⚠️ Don't set formatter on ErrorLogHandler (a044f17)
  • Use whoops for errors (b697272, f6b67d4, #19471, #20412)
  • Changed how exceptions are logged (#19698, f1971c2)
  • ⚠️ Return HttpException with code 413 from PostTooLargeException (#19773)
  • Support custom logger channel names (#20133)
  • ⚠️ Unify exception formatting (#20173, #20067, #20167, too many follow-up commits, sorry)
  • Added default Handler::unauthenticated() method (11b0de0)

Events

Filesystem

  • ⚠️ Made Storage::files() work like Storage::allFiles() (#18874, 7073457)
  • ⚠️ Fixed compatibility between FilesystemAdapter and the Filesystem interface (#19389)

Helpers

  • Added report() helper (2b67619)
  • Added throw_if() and throw_unless() helpers (18bb4df, #19166, #19255)
  • Added dispatch_now() helper (#18668, 61f2e7b)
  • Added $language parameter to str_slug() helper (#19011)
  • Added str_before() helper (#19940, #20049)
  • Added now() and today() helpers (3c888b6, #20716)
  • Added blank(), filled(), optional() and transform() helpers (06de9b2, 31308e3)
  • Handle lower case words better in as Str::snake() (#18764)
  • Removed usages of the with() helper (#17888)
  • Support multiple patterns in Str::is() (#20108)
  • Speed up Arr::get() calls without dot notations (#20139)
  • Use report() helper in mix() (#20603, bf0cb82)

Localization

  • ⚠️ Moved LoaderInterface to contracts (#20460)
  • ⚠️ Support loading JSON translation for packages (#20599, 573f85c)
  • Support language specific characters in Str (#18974, #19694)

Mail

  • Allow mailables to be rendered directly to views (d9a6dfa)
  • Allow for per-mailable theme configuration (b2c35ca)
  • ⚠️ Removed $data and $callback parameters from Mailer and MailQueue
  • ⚠️ Made Markdown a dependency of MailChannel (#19349)
  • ⚠️ Upgraded to SwiftMailer 6 (#19356)
  • ⚠️ Added to() and bcc() to Mailer contract (#19955)

Notifications

  • Added methods for Slack's thumb_url and unfurl_* options (#19150, #19200)
  • Support sending notifications via AnonymousNotifiable (#19998, ba82579)
  • Accept other types on SlackAttachment::timestamp() (#20671)

Queues

  • Added support for chainable jobs (81bcb03, too many follow-up commits, sorry)
  • ⚠️ Removed redundant $queue parameter from Queue::createPayload() (#17948)
  • Made all getQueue() methods public (#18501)
  • Pass connection and queue to Looping event (#19081)
  • ⚠️ Clone Job specific properties (#19123)
  • ⚠️ Declare missing abstract Job::getRawBody() method (#19677)
  • ⚠️ Fail (or optionally silently delete) job when model is missing during deserialization (44b1f85, bceded6)
  • Added CallQueuedListener::__clone() method (#20022)
  • Accept DatetimeInterface and DateInterval in queue (#20102, 92e2aff)
  • ⚠️ Use dispatch() instead of fire() (#20446)
  • Removed reserved_at index from jobs table stub (#20702)
  • Support job expiration (#20776, 1592b9b)

Redis

Requests

  • ⚠️ Made Request::has() work like Collection::has() (#18715)
  • Added Request::filled() (#18715)
  • ⚠️ Made Request::only() work like Collection::only() (#18695)
  • Aliased Request::exists() to Request::has() (183bf16)
  • Allow passing keys to Request::all() to behave like old Request::only() (#18754)
  • ⚠️ Removed Request::intersect() (#18695)
  • Return request data from ValidatesRequests calls (#19033)
  • Added a validate() macro onto Request (#19063)
  • Added FormRequest::validated() method (#19112)
  • ⚠️ Made request() helper and Request::__get() consistent (a6ff272)
  • Made Request::routeIs() work like Request()::fullUrlIs() (#19267, bfc5321, #19334)
  • Added Request::hasAny() method (#19367)
  • ⚠️ Throw validation exception from ValidatesRequests without formatting response (#19929, 6d33675, ec88362, c264807)
  • Added Request::post() method (#20238)
  • Added Request::keys() method (#20611)

Routing

  • Support fluent resource options (#18767, bb02fb2)
  • Support multiple values in Router::has() (#18758)
  • ⚠️ Bind empty optional route parameter to null instead of empty model instance (#17521)
  • Accept patterns on Route::named(), Router::is() and Router::currentRouteNamed() (#19267, bfc5321)
  • Added domain() setter/getter to Route (#19245, bba04a1)
  • Added Route::redirect() method (#19794)
  • Added Route::view() method (#19835)
  • ⚠️ Improved ThrottleRequests middleware (#19807, #19860)
  • ⚠️ Return proper 304 responses (#19867)
  • Return the resource from Router::apiResource() (#20029)
  • ⚠️ Moved route model binding resolution logic to model (#20521, 370e626, #20542, #20618, d911fa8)
  • Accept string on parameters() and names() methods (#20531, #20529)
  • Handle HEAD requests in Router::view() (#20672)
  • Added ThrottleRequestsWithRedis middleware (#20761, 0a10f9a)

Responses

  • ⚠️ Ensure Arrayable and Jsonable return a JsonResponse (#17875)
  • ⚠️ Ensure Arrayable objects are also morphed by Response (#17868)
  • Added SameSite support to CookieJar (#18040, #18059, e69d722)
  • Accept HeaderBag in ResponseTrait::withHeaders() (#18161)
  • ⚠️ Reset response content-type in Response::setContent() (#18314, #20313)
  • ⚠️ Always retrieve the real original content (#20002)

Service Container

  • ⚠️ Refactored Container (#19201)
  • ⚠️ Made container PSR-11 compliant (#19822, a6068b0, 66325c2)
  • Return the bound instance from Container::instance() (#19442)
  • ⚠️ Use instance instead of deferred service provider (#20714)

Session

  • ⚠️ Default value to true in Store::flash() (#18136)
  • ⚠️ Store the user password hash when logging in (#19843)
  • ⚠️ Throw UnauthorizedHttpException from failedBasicResponse (#20673)

Support

  • Autoload package providers (#19420, a5a0f3e, 2954091, #19455, #19561, #19646)
  • Added support for Responsable objects (c0c89fd, 1229b7f, #19614, ef0e37d)
  • Made Carbon macroable and serializeable (#19771, #20568, 6a18209)
  • Support registering macros using classes (#19782, 353adbd)
  • ⚠️ Moved InteractsWithTime to Illuminate\Support (#20119, #20206)
  • Support callable/invokable objects in Pipeline (#18264)
  • ⚠️ Prevent access to protected properties using array access on Model and Fluent (#18403)
  • ⚠️ Extend MessageBag interface from Arrayable and add getMessages() method (#19768, #20334)
  • Handle Arrayable items in MessageBag (6f1f4d8)
  • Added isNotEmpty() method to message bags and paginators (#19944)
  • Return the collection iterator from AbstractPaginator::getIterator() (#20098)
  • ⚠️ Fixed minimum value of paginator last_page field (#20335)

Task Scheduling

  • Fire before callbacks on closure-based scheduling events (#18861)
  • Run after-callbacks even if a callback event failed (#19573)
  • ⚠️ Fixed bug in quarterly() method (#19600)
  • ⚠️ Support passing boolean into when() and skip() (1d1a96e)

Testing

  • ⚠️ Switched to PHPUnit 6 (#17755, #17864)
  • ⚠️ Renamed authentication assertion methods (#17924, 494a177)
  • ⚠️ Unify database testing traits into RefreshDatabase trait (79c6f67, 0322e32, #20308)
  • ⚠️ Changed Blade tests namespace to Illuminate\Tests\View\Blade (#19675)
  • Added integration tests for the framework itself (182027d, #18438, #18780, #19001, #20073)
  • Allow disabling of specific middleware (#18673)
  • Added withoutExceptionHandling() method (a171f44)
  • Support inline eloquent factory states (#19060)
  • Allow assertSessionHasErrors() to look into different error bags (#19172, 4287ebc)
  • Ensure Redis is available in cache lock tests (#19791)
  • Skip tests if Memcached is not found (#20018)
  • ⚠️ Clear Carbon mock during tear down (#19934)
  • Added debug info to NotFoundHttpException in InteractsWithExceptionHandling (#20000)
  • Added MailFake::assertSentTimes(), QueueFake::assertPushedTimes() and BusFake::assertDispatchedTimes() methods (#20485, e657f6e)
  • Added queue assertions to MailFake (#20454, #20701)
  • Added assertNothingSent() and assertSentTimes() methods to NotificationFake (#20651)
  • Added Mockery expectations to the assertion count (#20606)
  • Fake the default storage disk by default (#20625)
  • Support sending default headers with requests (#20590, c32418e)
  • Support disabling of exception handling for specified exceptions (#20729, 2db9716)

Validation

  • Added support for custom validation rule objects (#19155, 2aa5ea8)
  • Validate against DateTimeInterface instead of DateTime (#20110)
  • ⚠️ Made several method in ValidatesAttributes public (#20200)
  • ⚠️ Added errors() method to Validator interface (#20337)
  • Extend Exists and Unique rule from DatabaseRule class (#20563)
  • Added whereIn() and whereNotIn() constraints to DatabaseRule (#20691, #20739, 52d28e3)
  • Added date_equals rule (#20646)

Views

  • ⚠️ Camel case variables names passed to views (#18083)
  • Added pagination template for Semantic UI (#18463)
  • Allow easier ViewFactory overriding (#20205, 56f103c)
  • Added View::first() (#20695, f18318b)