When present, the file 'phpdoc.xml' is used instead of 'phpdoc.dist.xml' and thus does not supplement it.
Configuration
phpDocumentor is meant as a highly configurable and extensible application. As such there are a lot of things that can be configured by the user.
An overview will be given in this chapter where you could place the configuration file and what it needs to look like.
Location
The easiest solution would be to place the configuration file in the root of your project with the name
phpdoc.dist.xml
. This file can be committed to a Revision Control System and thus will the settings always be
available.
When you have added a configuration file then you do not need to provide its location to phpDocumentor; the following command suffices to build your documentation:
$ phpdoc
            
    An additional benefit is that it is possible for each developer to place a file called phpdoc.xml
 in their project,
in addition to the phpdoc.dist.xml
. This configuration file will be used instead of the phpdoc.dist.xml
 and when
added as an ignore rule in your VCS it will give developers the ability to have settings other than the project
defaults.
Another option is to use the -c
 or --config
 arguments to tell phpDocumentor the location of your
configuration file. This can be convenient for centralized configuration management or using different settings per
environment.
none
 is a reserved word and providing -c none
 as option will result in any configuration file being ignored.
Basic configuration
phpDocumentor follows the convention over configuration style and as such it is only necessary to specify the options which you want to change with regard to the defaults.
The best way to write your configuration is by linking our xsd file in your configuration file. This way xml editors can help you to discover the elements that can be added in your configuration.
Usually the following configuration suffices for your project
<?xml version="1.0" encoding="UTF-8" ?>
<phpdocumentor
        configVersion="3"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xmlns="https://www.phpdoc.org"
        xsi:noNamespaceSchemaLocation="https://raw.githubusercontent.com/phpDocumentor/phpDocumentor/master/data/xsd/phpdoc.xsd"
>
    <paths>
        <output>build/api</output>
        <cache>build/cache</cache>
    </paths>
    <version number="3.0.0">
        <api>
            <source dsn=".">
                <path>src</path>
            </source>
        </api>
    </version>
</phpdocumentor>
            
    The configuration expects you to specify for both what their output(target) folder should be.
By separating the output locations into one for the parser and one for the transformation process it is possible to provide a staging location where you indefinitely store your structure file and benefit from the increased speed when doing multiple runs. This is called Incremental Processing or Incremental Parsing .
phpDocumentor automatically uses the cache directory when possible there is way to configure this.
The api/source
 section allows you to specify where the source code for your project is and what files to ignore. The
dsn
 attribute specifies the location of your project. Currently only relative and absolute paths are supported.
A relative dsn
 is relative to the location of your config file.
<source dsn="file:///my/project">
    <path>test.php</path>
    <path>bin/*</path>
    <path>src</path>
    <path>tes??</path>
    <path>test/**/*</path>
</source>
            
    The paths in source are relative to the dsn
; It is not possible to use absolute paths in a path.
The path
 element does support glob patterns in include files and directories. When no wildcards are included
the path is expected to be a directory tree that needs to be included. Thus src
 will include all files under src
.
Reference
{phpdocumentor} full reference
The phpDocumentor configuration file contains the following top-level elements which are explained in more detail in the sub-chapters.
- paths
 - version
 - setting
 - template
 
Paths
Paths is forming the base output location of phpDocumentor. More specific output locations can be specified in the version
 element.
output
 is the base path to place the output of the transformation
 stage.
cache
 it the base path to store the cache used by phpDocumentor during the parsing
 stage.
<paths>
    <output>string</output>
    <!--Optional:-->
    <cache>string</cache>
</paths>
    Version
Version is the main element to instruct phpDocumentor what needs to be done. A project could have multiple versions.
Each version defined in a config MUST have a unique number
 attribute. And may have one or more api
 or guide
 elements.
To have more control where the output of each version is stored a version may have a folder
 element. The folder element
is a compliment to the paths/output
 defined path. When folder
 is omitted the output of a version is stored in
paths/output
 without any additional paths.
<version number="latest">
    <folder>latest</folder>
    <api> <!-- optional --> </api>
    <guide> <!-- optional --> </guide>
</version>
            Currently only single version projects are supported. The configuration format is prepared to support multiple.
Api
The api element part of a version
 it describes a project source api that needs to be processed by phpDocumentor.
A minimal setup of api
 only contains source
 element.
<api>
   <source dsn="./path/to/project">
     <path>src</path>
   </source>
 </api>
            
    Also api
 may contain an output
 element that forms the full path to the location where the rendered docblock api
is located. The value of output
 is appended to the paths/output
 element and the optional folder
 element
of its version.
Ignoring files
In some cases you will want to ignore a set of files in your project. Examples of these can be:
third party libraries, SDKs, Framework scaffolding or tests. In this case, you can use the ignore
 element
and provide a glob pattern to determine which files to ignore. Thus, if you provide tests/**/*
 it will ignore
any file or (sub)directory in the folder tests
.
Version 2 of the configuration considered tests/*
 to mean any file and subdirectory in the folder tests
,
this behaviour changed in Version 3 of the configuration to provide more power to the ignore pattern, and to make
it compatible with patterns used in existing tools. This matches the way glob works on Unix/Linux with the globstar
extension enabled.
See Appendix B for a full example of the options available in api
.
Appendix A: basic configuration example
<?xml version="1.0" encoding="UTF-8" ?>
<phpdocumentor
        configVersion="3"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xmlns="https://www.phpdoc.org"
        xsi:noNamespaceSchemaLocation="https://raw.githubusercontent.com/phpDocumentor/phpDocumentor/master/data/xsd/phpdoc.xsd"
>
    <paths>
        <output>build/api</output>
        <cache>build/cache</cache>
    </paths>
    <version number="3.0.0">
        <api>
            <source dsn=".">
                <path>src</path>
            </source>
        </api>
    </version>
</phpdocumentor>
    Appendix B: complete configuration example
<?xml version="1.0" encoding="UTF-8" ?>
<phpdocumentor configVersion="3.0">
  <paths>
    <output>build/docs</output>
    <!--Optional:-->
    <cache>string</cache>
  </paths>
  <!--Zero or more repetitions:-->
  <version number="3.0">
    <!--Optional:-->
    <folder>latest</folder>
    <!--Zero or more repetitions:-->
    <api format="php">
      <source dsn=".">
        <!--1 or more repetitions:-->
        <path>src</path>
      </source>
      <!--Optional:-->
      <output>api</output>
      <!--Optional:-->
      <ignore hidden="true" symlinks="true">
        <!--1 or more repetitions:-->
        <path>tests/**/*</path>
      </ignore>
      <!--Optional:-->
      <extensions>
        <!--1 or more repetitions:-->
        <extension>php</extension>
      </extensions>
      <!--Optional:-->
      <visibility>private</visibility>
      <!--Optional:-->
      <default-package-name>MyPackage</default-package-name>
      <!--Optional:-->
      <include-source>true</include-source>
      <!--Optional:-->
      <markers>
        <!--1 or more repetitions:-->
        <marker>TODO</marker>
        <marker>FIXME</marker>
      </markers>
    </api>
    <!--Zero or more repetitions:-->
    <guide format="rst">
      <source dsn=".">
        <!--1 or more repetitions:-->
        <path>support/docs</path>
      </source>
      <!--Optional:-->
      <output>docs</output>
    </guide>
  </version>
  <!--Zero or more repetitions:-->
  <setting name="string" value="string"/>
  <!--Zero or more repetitions:-->
  <template name="string" location="string">
    <!--Zero or more repetitions:-->
    <parameter name="string" value="string"/>
  </template>
</phpdocumentor>