mirror of
https://github.com/silverstripe/silverstripe-framework
synced 2024-10-22 14:05:37 +02:00
Revisions per Robbie, Ingo
This commit is contained in:
parent
844462108e
commit
73652df3c5
@ -27,12 +27,11 @@ guide developers in preparing existing 3.x code for compatibility with 4.0
|
|||||||
is required.
|
is required.
|
||||||
* All code earlier marked as deprecated for 4.0 has now been removed. See
|
* All code earlier marked as deprecated for 4.0 has now been removed. See
|
||||||
[deprecation documentation](/contributing/release_process) for information on code deprecation.
|
[deprecation documentation](/contributing/release_process) for information on code deprecation.
|
||||||
* All code has been migrated to follow the PSR-2 coding standard. most significantly, all SilverStripe
|
* All code has been migrated to follow the PSR-2 coding standard. Most significantly, all SilverStripe
|
||||||
classes are now namespaced, and some have been renamed. This has major implications for
|
classes are now namespaced, and some have been renamed. This has major implications for
|
||||||
arrangement of templates, as well as other references to classes via string literals or configuration.
|
arrangement of templates, as well as other references to classes via string literals or configuration.
|
||||||
Automatic upgrading tools have been developed to cope with the bulk of these changes (see
|
Automatic upgrading tools have been developed to cope with the bulk of these changes (see
|
||||||
[upgrading notes](#upgrading)). Each class has been arrange in a single file per class, and it is recommended
|
[upgrading notes](#upgrading)). Some classes have been rearranged so that each file contains only one class definition. It is recommended that user code follow the same convention.
|
||||||
that user code follows the same convention.
|
|
||||||
For example, page types and their controllers should longer be collated in a single file.
|
For example, page types and their controllers should longer be collated in a single file.
|
||||||
* Object class has been removed.
|
* Object class has been removed.
|
||||||
* Asset storage has been abstracted, and a new concept of `DBFile` references via database column references
|
* Asset storage has been abstracted, and a new concept of `DBFile` references via database column references
|
||||||
@ -105,7 +104,7 @@ The rename won't affect class-based permission codes or database table names.
|
|||||||
|
|
||||||
##### Upgrade references to literal or class table names
|
##### Upgrade references to literal or class table names
|
||||||
|
|
||||||
In 3.x the class name of any dataobject matched the table name, but in 4.x all classes are namespaced, and it is
|
In 3.x the class name of any DataObject matched the table name, but in 4.x all classes are namespaced, and it is
|
||||||
necessary to map between table and class for querying the database.
|
necessary to map between table and class for querying the database.
|
||||||
|
|
||||||
In order to ensure you are using the correct table for any class a new
|
In order to ensure you are using the correct table for any class a new
|
||||||
@ -133,14 +132,15 @@ You'll need to update any strings that represent class names and make sure they'
|
|||||||
qualified. In particular, relationship definitions such as `has_one` and `has_many` will need
|
qualified. In particular, relationship definitions such as `has_one` and `has_many` will need
|
||||||
to be updated to refer to fully qualified class names.
|
to be updated to refer to fully qualified class names.
|
||||||
|
|
||||||
In configs and with literal php strings it is recommended to use the php `::class` constant,
|
In configs and with literal PHP strings it is recommended to use the php `::class` constant,
|
||||||
as demonstrated below.
|
as demonstrated below.
|
||||||
|
|
||||||
```diff
|
```diff
|
||||||
<?php
|
<?php
|
||||||
+ use SilverStripe\ORM\DataObject;
|
+ use SilverStripe\ORM\DataObject;
|
||||||
+ use SilverStripe\Security\Member;
|
+ use SilverStripe\Security\Member;
|
||||||
class MyClass extends DataObject {
|
class MyClass extends DataObject
|
||||||
|
{
|
||||||
private static $has_one = [
|
private static $has_one = [
|
||||||
- 'Author' => 'Member',
|
- 'Author' => 'Member',
|
||||||
+ 'Author' => Member::class,
|
+ 'Author' => Member::class,
|
||||||
@ -148,7 +148,7 @@ class MyClass extends DataObject {
|
|||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
In the context of YAML, the magic constant `::class` does not apply. Class names must be hard coded.
|
In the context of YAML, the magic constant `::class` does not apply. Fully qualified class names must be hard coded.
|
||||||
|
|
||||||
```diff
|
```diff
|
||||||
-MyObject:
|
-MyObject:
|
||||||
@ -158,9 +158,9 @@ In the context of YAML, the magic constant `::class` does not apply. Class names
|
|||||||
|
|
||||||
##### Update references to literal classes to use Injector
|
##### Update references to literal classes to use Injector
|
||||||
|
|
||||||
In many places certain classes namespaced in SilverStripe 4.x will still have a non-namespaced service
|
In many places, classes namespaced in SilverStripe 4.x will still have a non-namespaced service
|
||||||
name reference that can be referred to with injector. You should upgrade direct object constructors with
|
name that can be accessed via Injector. You should upgrade direct object constructors with
|
||||||
Injector api.
|
the Injector API.
|
||||||
|
|
||||||
E.g.
|
E.g.
|
||||||
|
|
||||||
@ -1260,13 +1260,13 @@ of linked components are consistent with their "owner." Without the concept of o
|
|||||||
components could be implicitly exposed on the frontend, which may not align with the intent of the
|
components could be implicitly exposed on the frontend, which may not align with the intent of the
|
||||||
content author.
|
content author.
|
||||||
|
|
||||||
For instance, on a products page which has a list of products, the products should not be published or
|
For instance, on a products page which has a list of products, the products should not be published unless the products page is, too. The ownership API solves this by allowing you to declare
|
||||||
unpublished unless the products page is, too. The ownership API solves this by allowing you to declare
|
|
||||||
a two-way relationship between objects, typically, but not necessarily, linked by a database relationship
|
a two-way relationship between objects, typically, but not necessarily, linked by a database relationship
|
||||||
(`has_many`, `many_many`, etc.).
|
(`has_many`, `many_many`, etc.).
|
||||||
|
|
||||||
```php
|
```php
|
||||||
class ProductPage extends Page {
|
class ProductPage extends Page
|
||||||
|
{
|
||||||
private static $has_many = [
|
private static $has_many = [
|
||||||
'Products' => Product::class
|
'Products' => Product::class
|
||||||
];
|
];
|
||||||
@ -1276,7 +1276,8 @@ class ProductPage extends Page {
|
|||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
class Product extends DataObject {
|
class Product extends DataObject
|
||||||
|
{
|
||||||
private static $extensions = [
|
private static $extensions = [
|
||||||
Versioned::class
|
Versioned::class
|
||||||
];
|
];
|
||||||
@ -1290,10 +1291,7 @@ If your objects are linked by something other than a database relationship, for
|
|||||||
getter that is computed at runtime, the same rules can be applied, as long as you provide an `$owned_by`
|
getter that is computed at runtime, the same rules can be applied, as long as you provide an `$owned_by`
|
||||||
setting on the child object.
|
setting on the child object.
|
||||||
|
|
||||||
For more information, see:
|
For more information, see the [DataObject ownership](https://docs.silverstripe.org/en/4/developer_guides/model/versioning/#dataobject-ownership) documentation and the [versioning](/developer_guides/model/versioning) documentation
|
||||||
|
|
||||||
* The [DataObject ownership](https://docs.silverstripe.org/en/4/developer_guides/model/versioning/#dataobject-ownership) documentation
|
|
||||||
* The [versioned](/developer_guides/model/versioning) documentation
|
|
||||||
|
|
||||||
#### ChangeSet batch publishing
|
#### ChangeSet batch publishing
|
||||||
|
|
||||||
@ -1534,7 +1532,7 @@ automated as possible.
|
|||||||
|
|
||||||
##### Using the upgrader tool to automatically apply namespaces
|
##### Using the upgrader tool to automatically apply namespaces
|
||||||
|
|
||||||
HThe [upgrader tool](https://github.com/silverstripe/silverstripe-upgrader/) provides a feature
|
The [upgrader tool](https://github.com/silverstripe/silverstripe-upgrader/) provides a feature
|
||||||
to not only automatically namespace code, but will provide automatic upgrade of other code
|
to not only automatically namespace code, but will provide automatic upgrade of other code
|
||||||
references to those classes.
|
references to those classes.
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user