Developers Guide


Table of Contents

I. Getting started
1. Introduction
2. 5-minute website
II. TypoScript
3. Introduction
What is TypoScript?
TypoScript syntax
A first example
Basic syntax
Confinements: {} signs
"=" operator
">" operator
"<" operator
"=<" operator
"<<" operator
Comments
Variables
Constants
Namespaces
Conditions
Includes
What's new in TypoScript 2.0?
4. TypoScript Templates
III. Extensions and packages
IV. Extending TYPO3
V. Reference
5. Coding Guidelines
Code formatting and layout
General considerations
Indentation and line formatting
Naming
PHP code formatting
Documentation
Documentation blocks
Documentation tags
Coding
Overview
General PHP best practices
Error handling and exceptions
Cross platform issues
Security
6. FLOW3
Overview
Component Manager
Overview: What you need to know
Components and containers
Component dependencies
Configuring components
Instantiating components
Package Manager
Shortcut: What you need to know
AOP Framework
Introduction
Aspects
Pointcuts
Declaring advice
Implementing advice
Introductions
Implementation details
Further resources
Resource Manager
7. TypoScript
Overview

List of Figures

3.1. A simple object tree
3.2. The resulting object tree
3.3. The resulting object tree
3.4. Copied objects in the object tree
3.5. Object tree after copy operations
3.6. Referenced objects in the object tree
3.7. Object tree after referencing operations
6.1.
6.2. Control flow of an advice chain
6.3. Proxy building process

List of Tables

6.1. Supported scopes

List of Examples

3.1. Defining a Person and its properties
3.2. Meaningless but valid TypoScript
3.3. A Person and some more properties
3.4. Abstract example of defining an object and assigning a property
3.5. Definition of a "Text" content object
3.6. TS code for the simple object tree
3.7. A simple HTML content object
3.8. Confinements
3.9. Assigning values
3.10. Unsetting objects and properties
3.11. Copying objects
3.12. Copying branches, overriding single properties
3.13. Referencing objects
3.14. Referencing branches, overriding properties
3.15. Using the wrap() value processor
3.16. Two processors in a chain
3.17. Has sub pages or not
3.18. Calling user-defined processors
3.19. Comments
3.20. Comment blocks
3.21. Using variables
3.22. The scope of variables
3.23. Using namespaces
3.24. Include instruction
5.1. The FLOW3 standard file header
5.2. Correct use of tabs and spaces
5.3. Correct naming of classes
5.4. Incorrect naming of classes
5.5. Correct naming of interfaces
5.6. Incorrect naming of interfaces
5.7. Correct naming of exceptions
5.8. Correct naming of methods
5.9. Correct naming of variables
5.10. Incorrect naming of variables
5.11. Correct naming of constants
5.12. File naming in FLOW3
5.13. String literals
5.14. String literals enclosed by double quotes
5.15. Variable substitution
5.16. Concatenated strings
5.17. Multi-line strings
5.18. Classes
5.19. if statements
5.20. Standard file level documentation block
5.21. Suggested configuration for Subversion in ~/.subversion/config
5.22. Standard class documentation block
5.23. Standard interface documentation block
5.24. Standard exception documentation block
5.25. Standard variable documentation block
5.26. Standard method documentation block
5.27. Encoding statement for .php files
5.28. Bad coding smell: Comments
5.29. Smells better!
6.1. Don't use the new operator
6.2. Ask the Component Manager instead
6.3. Sample scope annotation
6.4. A simple example for Constructor Injection
6.5. Components.conf file for Constructor Injection
6.6. A simple example for Setter Injection
6.7. Components.conf file for Setter Injection
6.8. A sample Components.conf file
6.9. Sample ComponentsConfiguration.php file
6.10. Sample scope annotation
6.11. A simple Greeter class
6.12. Code using the component F3_MyPackage_Greeter
6.13. Components.conf file for component replacement
6.14. The Greeter component type
6.15. Code using the component type F3_MyPackage_GreeterInterface
6.16. Components.conf file for component type definition
6.17. Sample class for Constructor Injection
6.18. Sample configuration for Constructor Injection
6.19. Sample class for Setter Injection
6.20. Sample configuration for Setter Injection
6.21. Sample Components.conf with different scopes
6.22. A simple addressbook
6.23. Passing constructor arguments
6.24. An autowired logger
6.25. Turning off autowiring support in Components.conf
6.26. A component class with an initialization method
6.27. Components.conf configuration of the initialization method
6.28. Declaration of an aspect
6.29. Declaration of a pointcut
6.30. method() pointcut designator
6.31. class() pointcut designator
6.32. within() pointcut designator
6.33. Combining pointcut expressions
6.34. Declaration of a before advice
6.35. Declaration of an after returning advice
6.36. Declaration of an after throwing advice
6.37. Declaration of an after advice
6.38. Declaration of an around advice
6.39. Simple logging with aspects
6.40. Implementation of an around advice
6.41. Declaring introductions