From eeadd27dbab1dc1a2a7bbdbe418528d74a498204 Mon Sep 17 00:00:00 2001 From: Matthew Weier O'Phinney Date: Thu, 21 Jan 2016 11:59:21 -0600 Subject: [PATCH 01/15] Added documentation deployment toolchain This is the documentation deployment toolchain for generating gh-pages on-the-fly from the master branch. The Travis-CI configuration now defines several environment variables for specifying the repository, github username and email, and github token (encrypted) to use when committing the files. `doc/deploy.sh` performs the actual build process. It first initializes a bare repository under `doc/html/`, adds the repository as a remote, fetches it, and resets head to the gh-pages branch. It then builds the documentation, adds all changes, and pushes them back to the gh-pages branch. --- .travis.yml | 15 ++++++++++++++- doc/deploy.sh | 52 +++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 66 insertions(+), 1 deletion(-) create mode 100755 doc/deploy.sh diff --git a/.travis.yml b/.travis.yml index 139d6beb..cf7f8b0f 100644 --- a/.travis.yml +++ b/.travis.yml @@ -7,6 +7,13 @@ cache: - $HOME/.composer/cache - vendor +env: + global: + - GH_USER_NAME: Matthew Weier O'Phinney + - GH_USER_EMAIL: matthew@weierophinney.net + - GH_REF: github.com/zendframework/zend-expressive.git + - secure: tH8+yLKQtFQlZ01FEALMyCNoGPTD6gkaFK4qO7G5eKM70jbFMmmXaHPRiKMyay6s13pEpjzyu8oU4xbyJuE7fI6agK83J970+zk48Zhdbv51GDkQI9zhs8CPGVuBZMbXG9irxBnqHzui1RnnUF1mRTjIreecs60w9eXrg8ziKgtlkUwtjbU4CtB8SGxG2Smo17g3n7uoBJqw/BfazBCvDIEBi3+P7v0vvxiI7l3u2A+N3dv2JKU4dxWvfyuWq3afw8rPRMHS0hBRPXDIMHNAfDOCCqgx9bmtgdlx9dZhCNBWkTznP+1FuFs53G2ATRHc6wnB/4/1H6BX33iDM3laMnbdVOKKh4Cn5DANdaMOSovjjF99lQXTvbznT37lz9V6xA9req1485puWDZbI3Fu5iAvQKfO6qjQNvZKytPSCNNt5DwBOkn4dTzubW9YHgLATNQbaMkgSDtMGPfiplUqZPV78/cs76ZjnFGHYYlrOVBXvr0xKynt+Zt2Kr/C9T6mV+idrrLPX7m9KrLyt9fGqCtAQu/G8MHKLlZSgZfTOY3sLRBSpIBYwqwhDwd9AD5OmTwY+98YpuCv334aqE+Wxggg3k3NrMrGZgJkvdR+d/Qbl4HS/sDqVAPaNaN/63nFd3d7WRQKp9bA276js9nXqVb0tgxsjlh3HpFTEiSLQF4= + matrix: fast_finish: true include: @@ -17,8 +24,9 @@ matrix: - php: 5.6 env: - EXECUTE_TEST_COVERALLS=true + - DEPLOY_DOCS=true - php: 7 - - php: hhvm + - php: hhvm allow_failures: - php: hhvm @@ -44,5 +52,10 @@ script: after_script: - if [[ $EXECUTE_TEST_COVERALLS == 'true' ]]; then composer coveralls ; fi +after_success: + - if [[ $DEPLOY_DOCS == 'true' && $TRAVIS_BRANCH == 'master' && $TRAVIS_PULL_REQUEST == 'false' ]]; then composer global require bookdown/bookdown ; fi + - if [[ $DEPLOY_DOCS == 'true' && $TRAVIS_BRANCH == 'master' && $TRAVIS_PULL_REQUEST == 'false' ]]; then composer global league/commonmark ; fi + - if [[ $DEPLOY_DOCS == 'true' && $TRAVIS_BRANCH == 'master' && $TRAVIS_PULL_REQUEST == 'false' ]]; then ./doc/deploy.sh ; fi + notifications: email: true diff --git a/doc/deploy.sh b/doc/deploy.sh new file mode 100755 index 00000000..614d30ba --- /dev/null +++ b/doc/deploy.sh @@ -0,0 +1,52 @@ +#!/bin/bash +# Deploy documentation to gh-pages +# +# Environment variables that may be of use: +# +# - GH_USER_NAME indicates the GitHub author name to use; +# - GH_USER_EMAIL indicates the email address for that author; +# - GH_REF indicates the URI, without scheme or user-info, to the repository; +# - GH_TOKEN is the personal security token to use for commits. +# +# All of the above are exported via the project .travis.yml file (with +# GH_TOKEN being encrypted and present in the `secure` key). The user details +# need to match the token used for this to work. + +set -o errexit -o nounset + +# Get curent commit revision +rev=$(git rev-parse --short HEAD) + +# Path to bookdown +BOOKDOWN=${HOME}/.composer/vendor/bin/bookdown + +# Get documentation templates and assets +( + cd doc + git clone git://github.com/zendframework/documentation assets +) + +mkdir -p doc/html + +# Initialize gh-pages checkout +( + cd doc/html + git init + git config user.name "${GH_USER_NAME}" + git config user.email "${GH_USER_EMAIL}" + git remote add upstream "https://${GH_TOKEN}@${GH_REF}" + git fetch upstream + git reset upstream/gh-pages +) + +# Build the documentation +$BOOKDOWN doc/bookdown.json --template=doc/assets/doc/templates/main.php + +# Commit and push the documentation to gh-pages +( + cd doc/html + touch . + git add -A . + git commit -m "Rebuild pages at ${rev}" + git push upstream HEAD:gh-pages +) From 7977eef4009b12a2fb968bc3f5cb4fb7cd638481 Mon Sep 17 00:00:00 2001 From: Matthew Weier O'Phinney Date: Thu, 21 Jan 2016 13:36:30 -0600 Subject: [PATCH 02/15] Use mkdocs to build docs --- .travis.yml | 4 ++-- doc/deploy.sh | 5 +---- mkdocs.yml | 3 +++ 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/.travis.yml b/.travis.yml index cf7f8b0f..5d5967f5 100644 --- a/.travis.yml +++ b/.travis.yml @@ -53,8 +53,8 @@ after_script: - if [[ $EXECUTE_TEST_COVERALLS == 'true' ]]; then composer coveralls ; fi after_success: - - if [[ $DEPLOY_DOCS == 'true' && $TRAVIS_BRANCH == 'master' && $TRAVIS_PULL_REQUEST == 'false' ]]; then composer global require bookdown/bookdown ; fi - - if [[ $DEPLOY_DOCS == 'true' && $TRAVIS_BRANCH == 'master' && $TRAVIS_PULL_REQUEST == 'false' ]]; then composer global league/commonmark ; fi + - if [[ $DEPLOY_DOCS == 'true' && $TRAVIS_BRANCH == 'master' && $TRAVIS_PULL_REQUEST == 'false' ]]; then pip install mkdocs ; fi + - if [[ $DEPLOY_DOCS == 'true' && $TRAVIS_BRANCH == 'master' && $TRAVIS_PULL_REQUEST == 'false' ]]; then pip install pymdown-extensions ; fi - if [[ $DEPLOY_DOCS == 'true' && $TRAVIS_BRANCH == 'master' && $TRAVIS_PULL_REQUEST == 'false' ]]; then ./doc/deploy.sh ; fi notifications: diff --git a/doc/deploy.sh b/doc/deploy.sh index 614d30ba..98e462c2 100755 --- a/doc/deploy.sh +++ b/doc/deploy.sh @@ -17,9 +17,6 @@ set -o errexit -o nounset # Get curent commit revision rev=$(git rev-parse --short HEAD) -# Path to bookdown -BOOKDOWN=${HOME}/.composer/vendor/bin/bookdown - # Get documentation templates and assets ( cd doc @@ -40,7 +37,7 @@ mkdir -p doc/html ) # Build the documentation -$BOOKDOWN doc/bookdown.json --template=doc/assets/doc/templates/main.php +mkdocs build # Commit and push the documentation to gh-pages ( diff --git a/mkdocs.yml b/mkdocs.yml index 0a3b85ff..88b73423 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -1,5 +1,6 @@ docs_dir: doc/book site_dir: doc/html +theme: readable pages: - index.md - { 'Overview and Features': features.md } @@ -20,3 +21,5 @@ site_name: zend-expressive site_description: 'zend-expressive: PSR-7 Middleware Microframework' repo_url: 'https://github.com/zendframework/zend-expressive' copyright: 'Copyright (c) 2016 Zend Technologies USA Inc.' +markdown_extensions: + - pymdownx.superfences From ca6564bfb207d8c27e918de953b4916f109ded02 Mon Sep 17 00:00:00 2001 From: Matthew Weier O'Phinney Date: Thu, 21 Jan 2016 14:32:36 -0600 Subject: [PATCH 03/15] Make quick start a subsection - instead of 2 top-level docs --- doc/book/quick-start/bookdown.json | 7 +++++++ .../skeleton.md} | 8 ++++---- .../{quick-start.md => quick-start/standalone.md} | 14 +++++++------- doc/bookdown.json | 3 +-- mkdocs.yml | 5 +---- 5 files changed, 20 insertions(+), 17 deletions(-) create mode 100644 doc/book/quick-start/bookdown.json rename doc/book/{quick-start-skeleton.md => quick-start/skeleton.md} (98%) rename doc/book/{quick-start.md => quick-start/standalone.md} (92%) diff --git a/doc/book/quick-start/bookdown.json b/doc/book/quick-start/bookdown.json new file mode 100644 index 00000000..2d8b375d --- /dev/null +++ b/doc/book/quick-start/bookdown.json @@ -0,0 +1,7 @@ +{ + "title": "Quick Start", + "content": [ + {"Standalone": "standalone.md"}, + {"Using the Skeleton Installer": "skeleton.md"} + ] +} diff --git a/doc/book/quick-start-skeleton.md b/doc/book/quick-start/skeleton.md similarity index 98% rename from doc/book/quick-start-skeleton.md rename to doc/book/quick-start/skeleton.md index 601289c5..f35ccf9f 100644 --- a/doc/book/quick-start-skeleton.md +++ b/doc/book/quick-start/skeleton.md @@ -271,7 +271,7 @@ Congratulations! You've now created your application, and started writing middleware! It's time to start learning about the rest of the features of Expressive: -- [Containers](container/intro.md) -- [Routing](router/intro.md) -- [Templating](template/intro.md) -- [Error Handling](error-handling.md) +- [Containers](../container/intro.md) +- [Routing](../router/intro.md) +- [Templating](../template/intro.md) +- [Error Handling](../error-handling.md) diff --git a/doc/book/quick-start.md b/doc/book/quick-start/standalone.md similarity index 92% rename from doc/book/quick-start.md rename to doc/book/quick-start/standalone.md index 12bf701a..e3c55877 100644 --- a/doc/book/quick-start.md +++ b/doc/book/quick-start/standalone.md @@ -2,7 +2,7 @@ Expressive allows you to get started at your own pace. You can start with the simplest example, detailed below, or move on to a more structured, -configuration-driven approach as detailed in the [use case examples](usage-examples.md). +configuration-driven approach as detailed in the [use case examples](../usage-examples.md). ## 1. Create a new project directory @@ -113,10 +113,10 @@ http://localhost:8080/ to see if your application responds correctly! At this point, you have a working zend-expressive application, that responds to a single route. From here, you may want to read up on: -- [Applications](application.md) -- [Containers](container/intro.md) -- [Routing](router/intro.md) -- [Templating](template/intro.md) -- [Error Handling](error-handling.md) +- [Applications](../application.md) +- [Containers](../container/intro.md) +- [Routing](../router/intro.md) +- [Templating](../template/intro.md) +- [Error Handling](../error-handling.md) -Additionally, we have more [use case examples](usage-examples.md). +Additionally, we have more [use case examples](../usage-examples.md). diff --git a/doc/bookdown.json b/doc/bookdown.json index 85a1d28d..03a312be 100644 --- a/doc/bookdown.json +++ b/doc/bookdown.json @@ -3,8 +3,7 @@ "content": [ {"Intro": "../README.md"}, {"Overview and Features": "book/features.md"}, - {"Quick Start: Skeleton + Installer": "book/quick-start-skeleton.md"}, - {"Quick Start: Standalone": "book/quick-start.md"}, + "book/quick-start/bookdown.json", {"Applications": "book/application.md"}, "book/container/bookdown.json", "book/router/bookdown.json", diff --git a/mkdocs.yml b/mkdocs.yml index 88b73423..4e32adc4 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -4,8 +4,7 @@ theme: readable pages: - index.md - { 'Overview and Features': features.md } - - { 'Quick Start: Skeleton + Installer': quick-start-skeleton.md } - - { 'Quick Start: Standalone': quick-start.md } + - { 'Quick Start': [{ Standalone: quick-start/standalone.md }, { 'Using the Skeleton Installer': quick-start/skeleton.md }] } - { Applications: application.md } - { Containers: [{ Introduction: container/intro.md }, { 'Container Factories': container/factories.md }, { 'Using zend-servicemanager': container/zend-servicemanager.md }, { 'Using Pimple': container/pimple.md }, { 'Using Aura.Di': container/aura-di.md }] } - { 'Routing Adapters': [{ Introduction: router/intro.md }, { 'Routing Interface': router/interface.md }, { 'URI Generation': router/uri-generation.md }, { 'Route Result Observers': router/result-observers.md }, { 'Routing vs Piping': router/piping.md }, { 'Using Aura': router/aura.md }, { 'Using FastRoute': router/fast-route.md }, { 'Using the ZF2 Router': router/zf2.md }] } @@ -21,5 +20,3 @@ site_name: zend-expressive site_description: 'zend-expressive: PSR-7 Middleware Microframework' repo_url: 'https://github.com/zendframework/zend-expressive' copyright: 'Copyright (c) 2016 Zend Technologies USA Inc.' -markdown_extensions: - - pymdownx.superfences From e4151f13698c8e50271861c15f0c5425f9f0ed9d Mon Sep 17 00:00:00 2001 From: Matthew Weier O'Phinney Date: Thu, 21 Jan 2016 15:58:41 -0600 Subject: [PATCH 04/15] Converted to mkdocs We're already using rtfd.org, and validated that it works well. I've also discovered a few things that make mkdocs more compelling: - [superfences](http://facelessuser.github.io/pymdown-extensions/extensions/superfences/) fixes the nested code sample issues. - bookdown doesn't currently support sidebar navs, and on looking at the templates, I suspect it'd be quite hard to implement. - themes like [cinder](http://sourcefoundry.org/cinder/) are incredibly close to the look and feel I'd like to see for the documentation. This patch removes the `bookdown.json` files, and pushes all structure into the `mkdocs.yml` file. Additionally, it reorganizes the documentation to offer fewer top-level items, which makes the navigation less cluttered, and removes navbar artifacts I was observing when rendering with too many items. It also removes the `Makefile`, as it's obsolete; no more bookdown to mkdocs conversion is necessary. Things still todo: - Generate a decent landing page. - Create ToC pages for each major section. - Test the travis-ci -> gh-pages integration to ensure that we can install mkdocs and superfences. --- Makefile | 23 ------- doc/book/container/bookdown.json | 10 --- doc/book/cookbook/bookdown.json | 16 ----- doc/book/{ => features}/application.md | 0 doc/book/{ => features}/container/aura-di.md | 0 .../{ => features}/container/factories.md | 0 doc/book/{ => features}/container/intro.md | 0 doc/book/{ => features}/container/pimple.md | 0 .../container/zend-servicemanager.md | 0 doc/book/{ => features}/emitters.md | 0 doc/book/{ => features}/error-handling.md | 0 doc/book/{ => features}/helpers/body-parse.md | 0 doc/book/{ => features}/helpers/intro.md | 0 .../helpers/server-url-helper.md | 0 doc/book/{ => features}/helpers/url-helper.md | 0 doc/book/{ => features}/router/aura.md | 0 doc/book/{ => features}/router/fast-route.md | 0 doc/book/{ => features}/router/interface.md | 0 doc/book/{ => features}/router/intro.md | 0 doc/book/{ => features}/router/piping.md | 0 .../{ => features}/router/result-observers.md | 0 .../{ => features}/router/uri-generation.md | 0 doc/book/{ => features}/router/zf2.md | 0 doc/book/{ => features}/template/interface.md | 0 doc/book/{ => features}/template/intro.md | 0 .../{ => features}/template/middleware.md | 0 doc/book/{ => features}/template/plates.md | 0 doc/book/{ => features}/template/twig.md | 0 doc/book/{ => features}/template/zend-view.md | 0 doc/book/{ => getting-started}/features.md | 4 +- .../skeleton.md | 8 +-- .../standalone.md | 14 ++-- doc/book/helpers/bookdown.json | 9 --- doc/book/migration/bookdown.json | 7 -- doc/book/quick-start/bookdown.json | 7 -- .../cookbook/common-prefix-for-routes.md | 0 .../cookbook/custom-404-page-handling.md | 4 +- .../cookbook/debug-toolbars.md | 0 .../cookbook/modular-layout.md | 0 .../cookbook/route-specific-pipeline.md | 0 ...ting-locale-depending-routing-parameter.md | 0 ...etting-locale-without-routing-parameter.md | 0 .../cookbook/using-a-base-path.md | 0 .../cookbook/using-custom-view-helpers.md | 0 ...g-routed-middleware-class-as-controller.md | 0 .../cookbook/using-zend-form-view-helpers.md | 0 .../{ => reference}/expressive-projects.md | 0 doc/book/{ => reference}/usage-examples.md | 6 +- doc/book/router/bookdown.json | 13 ---- doc/book/template/bookdown.json | 11 --- doc/bookdown.json | 20 ------ mkdocs.yml | 67 +++++++++++++++---- 52 files changed, 71 insertions(+), 148 deletions(-) delete mode 100644 Makefile delete mode 100644 doc/book/container/bookdown.json delete mode 100644 doc/book/cookbook/bookdown.json rename doc/book/{ => features}/application.md (100%) rename doc/book/{ => features}/container/aura-di.md (100%) rename doc/book/{ => features}/container/factories.md (100%) rename doc/book/{ => features}/container/intro.md (100%) rename doc/book/{ => features}/container/pimple.md (100%) rename doc/book/{ => features}/container/zend-servicemanager.md (100%) rename doc/book/{ => features}/emitters.md (100%) rename doc/book/{ => features}/error-handling.md (100%) rename doc/book/{ => features}/helpers/body-parse.md (100%) rename doc/book/{ => features}/helpers/intro.md (100%) rename doc/book/{ => features}/helpers/server-url-helper.md (100%) rename doc/book/{ => features}/helpers/url-helper.md (100%) rename doc/book/{ => features}/router/aura.md (100%) rename doc/book/{ => features}/router/fast-route.md (100%) rename doc/book/{ => features}/router/interface.md (100%) rename doc/book/{ => features}/router/intro.md (100%) rename doc/book/{ => features}/router/piping.md (100%) rename doc/book/{ => features}/router/result-observers.md (100%) rename doc/book/{ => features}/router/uri-generation.md (100%) rename doc/book/{ => features}/router/zf2.md (100%) rename doc/book/{ => features}/template/interface.md (100%) rename doc/book/{ => features}/template/intro.md (100%) rename doc/book/{ => features}/template/middleware.md (100%) rename doc/book/{ => features}/template/plates.md (100%) rename doc/book/{ => features}/template/twig.md (100%) rename doc/book/{ => features}/template/zend-view.md (100%) rename doc/book/{ => getting-started}/features.md (97%) rename doc/book/{quick-start => getting-started}/skeleton.md (97%) rename doc/book/{quick-start => getting-started}/standalone.md (90%) delete mode 100644 doc/book/helpers/bookdown.json delete mode 100644 doc/book/migration/bookdown.json delete mode 100644 doc/book/quick-start/bookdown.json rename doc/book/{ => reference}/cookbook/common-prefix-for-routes.md (100%) rename doc/book/{ => reference}/cookbook/custom-404-page-handling.md (95%) rename doc/book/{ => reference}/cookbook/debug-toolbars.md (100%) rename doc/book/{ => reference}/cookbook/modular-layout.md (100%) rename doc/book/{ => reference}/cookbook/route-specific-pipeline.md (100%) rename doc/book/{ => reference}/cookbook/setting-locale-depending-routing-parameter.md (100%) rename doc/book/{ => reference}/cookbook/setting-locale-without-routing-parameter.md (100%) rename doc/book/{ => reference}/cookbook/using-a-base-path.md (100%) rename doc/book/{ => reference}/cookbook/using-custom-view-helpers.md (100%) rename doc/book/{ => reference}/cookbook/using-routed-middleware-class-as-controller.md (100%) rename doc/book/{ => reference}/cookbook/using-zend-form-view-helpers.md (100%) rename doc/book/{ => reference}/expressive-projects.md (100%) rename doc/book/{ => reference}/usage-examples.md (98%) delete mode 100644 doc/book/router/bookdown.json delete mode 100644 doc/book/template/bookdown.json delete mode 100644 doc/bookdown.json diff --git a/Makefile b/Makefile deleted file mode 100644 index 56d507c0..00000000 --- a/Makefile +++ /dev/null @@ -1,23 +0,0 @@ -# zend-expressive Makefile -# -# Primary purpose is for generating the mkdocs.yml from the bookdown.json -# sources. -# -# Configurable variables: -# - BOOKDOWN2MKDOCS - specify the path to the executable; defaults to -# ./vendor/bin/bookdown2mkdocs -# -# Available targets: -# - mkdocs - regenerate mkdocs.yml -# - all - synonym for mkdocs target - -BOOKDOWN2MKDOCS?=$(CURDIR)/vendor/bin/bookdown2mkdocs.php - -.PHONY : all mkdocs bookdown2mkdocs - -all : mkdocs - -mkdocs : - @echo "Generating mkdocs.yml from bookdown.json..." - -$(BOOKDOWN2MKDOCS) convert --site-name=zend-expressive --repo-url=https://github.com/zendframework/zend-expressive --copyright-url=http://www.zend.com/ --copyright-author="Zend Technologies USA Inc." - @echo "[DONE] Generating mkdocs.yml from bookdown.json" diff --git a/doc/book/container/bookdown.json b/doc/book/container/bookdown.json deleted file mode 100644 index f3ec1bbc..00000000 --- a/doc/book/container/bookdown.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "title": "Containers", - "content": [ - {"Introduction": "intro.md"}, - {"Container Factories": "factories.md"}, - {"Using zend-servicemanager": "zend-servicemanager.md"}, - {"Using Pimple": "pimple.md"}, - {"Using Aura.Di": "aura-di.md"} - ] -} diff --git a/doc/book/cookbook/bookdown.json b/doc/book/cookbook/bookdown.json deleted file mode 100644 index 52cb5269..00000000 --- a/doc/book/cookbook/bookdown.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "title": "Cookbook", - "content": [ - {"Prepending a common path to all routes": "common-prefix-for-routes.md"}, - {"Route-specific middleware pipelines": "route-specific-pipeline.md"}, - {"Setting custom 404 page handling": "custom-404-page-handling.md"}, - {"Registering custom view helpers when using zend-view": "using-custom-view-helpers.md"}, - {"Using zend-form view helpers": "using-zend-form-view-helpers.md"}, - {"Using Expressive from a subdirectory": "using-a-base-path.md"}, - {"Building modular applications": "modular-layout.md"}, - {"Setting a locale based on a routing parameter": "setting-locale-depending-routing-parameter.md"}, - {"Setting a locale without a routing parameter": "setting-locale-without-routing-parameter.md"}, - {"Enabling debug toolbars": "debug-toolbars.md"}, - {"Handling multiple routes in a single class": "using-routed-middleware-class-as-controller.md"} - ] -} diff --git a/doc/book/application.md b/doc/book/features/application.md similarity index 100% rename from doc/book/application.md rename to doc/book/features/application.md diff --git a/doc/book/container/aura-di.md b/doc/book/features/container/aura-di.md similarity index 100% rename from doc/book/container/aura-di.md rename to doc/book/features/container/aura-di.md diff --git a/doc/book/container/factories.md b/doc/book/features/container/factories.md similarity index 100% rename from doc/book/container/factories.md rename to doc/book/features/container/factories.md diff --git a/doc/book/container/intro.md b/doc/book/features/container/intro.md similarity index 100% rename from doc/book/container/intro.md rename to doc/book/features/container/intro.md diff --git a/doc/book/container/pimple.md b/doc/book/features/container/pimple.md similarity index 100% rename from doc/book/container/pimple.md rename to doc/book/features/container/pimple.md diff --git a/doc/book/container/zend-servicemanager.md b/doc/book/features/container/zend-servicemanager.md similarity index 100% rename from doc/book/container/zend-servicemanager.md rename to doc/book/features/container/zend-servicemanager.md diff --git a/doc/book/emitters.md b/doc/book/features/emitters.md similarity index 100% rename from doc/book/emitters.md rename to doc/book/features/emitters.md diff --git a/doc/book/error-handling.md b/doc/book/features/error-handling.md similarity index 100% rename from doc/book/error-handling.md rename to doc/book/features/error-handling.md diff --git a/doc/book/helpers/body-parse.md b/doc/book/features/helpers/body-parse.md similarity index 100% rename from doc/book/helpers/body-parse.md rename to doc/book/features/helpers/body-parse.md diff --git a/doc/book/helpers/intro.md b/doc/book/features/helpers/intro.md similarity index 100% rename from doc/book/helpers/intro.md rename to doc/book/features/helpers/intro.md diff --git a/doc/book/helpers/server-url-helper.md b/doc/book/features/helpers/server-url-helper.md similarity index 100% rename from doc/book/helpers/server-url-helper.md rename to doc/book/features/helpers/server-url-helper.md diff --git a/doc/book/helpers/url-helper.md b/doc/book/features/helpers/url-helper.md similarity index 100% rename from doc/book/helpers/url-helper.md rename to doc/book/features/helpers/url-helper.md diff --git a/doc/book/router/aura.md b/doc/book/features/router/aura.md similarity index 100% rename from doc/book/router/aura.md rename to doc/book/features/router/aura.md diff --git a/doc/book/router/fast-route.md b/doc/book/features/router/fast-route.md similarity index 100% rename from doc/book/router/fast-route.md rename to doc/book/features/router/fast-route.md diff --git a/doc/book/router/interface.md b/doc/book/features/router/interface.md similarity index 100% rename from doc/book/router/interface.md rename to doc/book/features/router/interface.md diff --git a/doc/book/router/intro.md b/doc/book/features/router/intro.md similarity index 100% rename from doc/book/router/intro.md rename to doc/book/features/router/intro.md diff --git a/doc/book/router/piping.md b/doc/book/features/router/piping.md similarity index 100% rename from doc/book/router/piping.md rename to doc/book/features/router/piping.md diff --git a/doc/book/router/result-observers.md b/doc/book/features/router/result-observers.md similarity index 100% rename from doc/book/router/result-observers.md rename to doc/book/features/router/result-observers.md diff --git a/doc/book/router/uri-generation.md b/doc/book/features/router/uri-generation.md similarity index 100% rename from doc/book/router/uri-generation.md rename to doc/book/features/router/uri-generation.md diff --git a/doc/book/router/zf2.md b/doc/book/features/router/zf2.md similarity index 100% rename from doc/book/router/zf2.md rename to doc/book/features/router/zf2.md diff --git a/doc/book/template/interface.md b/doc/book/features/template/interface.md similarity index 100% rename from doc/book/template/interface.md rename to doc/book/features/template/interface.md diff --git a/doc/book/template/intro.md b/doc/book/features/template/intro.md similarity index 100% rename from doc/book/template/intro.md rename to doc/book/features/template/intro.md diff --git a/doc/book/template/middleware.md b/doc/book/features/template/middleware.md similarity index 100% rename from doc/book/template/middleware.md rename to doc/book/features/template/middleware.md diff --git a/doc/book/template/plates.md b/doc/book/features/template/plates.md similarity index 100% rename from doc/book/template/plates.md rename to doc/book/features/template/plates.md diff --git a/doc/book/template/twig.md b/doc/book/features/template/twig.md similarity index 100% rename from doc/book/template/twig.md rename to doc/book/features/template/twig.md diff --git a/doc/book/template/zend-view.md b/doc/book/features/template/zend-view.md similarity index 100% rename from doc/book/template/zend-view.md rename to doc/book/features/template/zend-view.md diff --git a/doc/book/features.md b/doc/book/getting-started/features.md similarity index 97% rename from doc/book/features.md rename to doc/book/getting-started/features.md index 9f39ea76..5a4bccb3 100644 --- a/doc/book/features.md +++ b/doc/book/getting-started/features.md @@ -69,7 +69,7 @@ features it provides include: Below is a diagram detailing the workflow used by Expressive. -![Expressive Architectural Flow](images/architecture.png) +![Expressive Architectural Flow](../images/architecture.png) The `Application` acts as an "onion"; in the diagram above, the top is the outer-most layer of the onion, while the bottom is the inner-most. @@ -151,7 +151,7 @@ will execute in one of two conditions: - routed middleware called on the next middleware instead of returning a response. As such, the largest use case for such middleware is for error handling. -One possibility is for [providing custom 404 handling](cookbook/custom-404-page-handling.md), +One possibility is for [providing custom 404 handling](../reference/cookbook/custom-404-page-handling.md), or handling application-specific error conditions (such as authentication or authorization failures). diff --git a/doc/book/quick-start/skeleton.md b/doc/book/getting-started/skeleton.md similarity index 97% rename from doc/book/quick-start/skeleton.md rename to doc/book/getting-started/skeleton.md index f35ccf9f..a51638a9 100644 --- a/doc/book/quick-start/skeleton.md +++ b/doc/book/getting-started/skeleton.md @@ -271,7 +271,7 @@ Congratulations! You've now created your application, and started writing middleware! It's time to start learning about the rest of the features of Expressive: -- [Containers](../container/intro.md) -- [Routing](../router/intro.md) -- [Templating](../template/intro.md) -- [Error Handling](../error-handling.md) +- [Containers](../features/container/intro.md) +- [Routing](../features/router/intro.md) +- [Templating](../features/template/intro.md) +- [Error Handling](../features/error-handling.md) diff --git a/doc/book/quick-start/standalone.md b/doc/book/getting-started/standalone.md similarity index 90% rename from doc/book/quick-start/standalone.md rename to doc/book/getting-started/standalone.md index e3c55877..936f8c58 100644 --- a/doc/book/quick-start/standalone.md +++ b/doc/book/getting-started/standalone.md @@ -2,7 +2,7 @@ Expressive allows you to get started at your own pace. You can start with the simplest example, detailed below, or move on to a more structured, -configuration-driven approach as detailed in the [use case examples](../usage-examples.md). +configuration-driven approach as detailed in the [use case examples](../reference/usage-examples.md). ## 1. Create a new project directory @@ -113,10 +113,10 @@ http://localhost:8080/ to see if your application responds correctly! At this point, you have a working zend-expressive application, that responds to a single route. From here, you may want to read up on: -- [Applications](../application.md) -- [Containers](../container/intro.md) -- [Routing](../router/intro.md) -- [Templating](../template/intro.md) -- [Error Handling](../error-handling.md) +- [Applications](../features/application.md) +- [Containers](../features/container/intro.md) +- [Routing](../features/router/intro.md) +- [Templating](../features/template/intro.md) +- [Error Handling](../features/error-handling.md) -Additionally, we have more [use case examples](../usage-examples.md). +Additionally, we have more [use case examples](../reference/usage-examples.md). diff --git a/doc/book/helpers/bookdown.json b/doc/book/helpers/bookdown.json deleted file mode 100644 index 61f2c583..00000000 --- a/doc/book/helpers/bookdown.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "title": "Helpers", - "content": [ - {"Introduction": "intro.md"}, - {"UrlHelper": "url-helper.md"}, - {"ServerUrlHelper": "server-url-helper.md"}, - {"Body Parsing Middleware": "body-parse.md"} - ] -} diff --git a/doc/book/migration/bookdown.json b/doc/book/migration/bookdown.json deleted file mode 100644 index 3dc87476..00000000 --- a/doc/book/migration/bookdown.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "title": "Migration", - "content": [ - {"From RC5 and Earlier": "rc-to-v1.md"} - ] -} - diff --git a/doc/book/quick-start/bookdown.json b/doc/book/quick-start/bookdown.json deleted file mode 100644 index 2d8b375d..00000000 --- a/doc/book/quick-start/bookdown.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "title": "Quick Start", - "content": [ - {"Standalone": "standalone.md"}, - {"Using the Skeleton Installer": "skeleton.md"} - ] -} diff --git a/doc/book/cookbook/common-prefix-for-routes.md b/doc/book/reference/cookbook/common-prefix-for-routes.md similarity index 100% rename from doc/book/cookbook/common-prefix-for-routes.md rename to doc/book/reference/cookbook/common-prefix-for-routes.md diff --git a/doc/book/cookbook/custom-404-page-handling.md b/doc/book/reference/cookbook/custom-404-page-handling.md similarity index 95% rename from doc/book/cookbook/custom-404-page-handling.md rename to doc/book/reference/cookbook/custom-404-page-handling.md index 04ea4ade..afcf3316 100644 --- a/doc/book/cookbook/custom-404-page-handling.md +++ b/doc/book/reference/cookbook/custom-404-page-handling.md @@ -1,7 +1,7 @@ # How can I set custom 404 page handling? In some cases, you may want to handle 404 errors separately from the -[final handler](../error-handling.md). This can be done by registering +[final handler](../../features/error-handling.md). This can be done by registering middleware that operates late — specifically, after the routing middleware. Such middleware will be executed if no other middleware has executed, and/or when all other middleware calls `return $next()` @@ -78,7 +78,7 @@ that does not rely on the final handler. ## Registering custom 404 handlers We can register either `Application\NotFound` class above as service in the -[service container](../container/intro.md). In the case of the second approach, +[service container](../../features/container/intro.md). In the case of the second approach, you would also need to provide a factory for creating the middleware (to ensure you inject the template renderer). diff --git a/doc/book/cookbook/debug-toolbars.md b/doc/book/reference/cookbook/debug-toolbars.md similarity index 100% rename from doc/book/cookbook/debug-toolbars.md rename to doc/book/reference/cookbook/debug-toolbars.md diff --git a/doc/book/cookbook/modular-layout.md b/doc/book/reference/cookbook/modular-layout.md similarity index 100% rename from doc/book/cookbook/modular-layout.md rename to doc/book/reference/cookbook/modular-layout.md diff --git a/doc/book/cookbook/route-specific-pipeline.md b/doc/book/reference/cookbook/route-specific-pipeline.md similarity index 100% rename from doc/book/cookbook/route-specific-pipeline.md rename to doc/book/reference/cookbook/route-specific-pipeline.md diff --git a/doc/book/cookbook/setting-locale-depending-routing-parameter.md b/doc/book/reference/cookbook/setting-locale-depending-routing-parameter.md similarity index 100% rename from doc/book/cookbook/setting-locale-depending-routing-parameter.md rename to doc/book/reference/cookbook/setting-locale-depending-routing-parameter.md diff --git a/doc/book/cookbook/setting-locale-without-routing-parameter.md b/doc/book/reference/cookbook/setting-locale-without-routing-parameter.md similarity index 100% rename from doc/book/cookbook/setting-locale-without-routing-parameter.md rename to doc/book/reference/cookbook/setting-locale-without-routing-parameter.md diff --git a/doc/book/cookbook/using-a-base-path.md b/doc/book/reference/cookbook/using-a-base-path.md similarity index 100% rename from doc/book/cookbook/using-a-base-path.md rename to doc/book/reference/cookbook/using-a-base-path.md diff --git a/doc/book/cookbook/using-custom-view-helpers.md b/doc/book/reference/cookbook/using-custom-view-helpers.md similarity index 100% rename from doc/book/cookbook/using-custom-view-helpers.md rename to doc/book/reference/cookbook/using-custom-view-helpers.md diff --git a/doc/book/cookbook/using-routed-middleware-class-as-controller.md b/doc/book/reference/cookbook/using-routed-middleware-class-as-controller.md similarity index 100% rename from doc/book/cookbook/using-routed-middleware-class-as-controller.md rename to doc/book/reference/cookbook/using-routed-middleware-class-as-controller.md diff --git a/doc/book/cookbook/using-zend-form-view-helpers.md b/doc/book/reference/cookbook/using-zend-form-view-helpers.md similarity index 100% rename from doc/book/cookbook/using-zend-form-view-helpers.md rename to doc/book/reference/cookbook/using-zend-form-view-helpers.md diff --git a/doc/book/expressive-projects.md b/doc/book/reference/expressive-projects.md similarity index 100% rename from doc/book/expressive-projects.md rename to doc/book/reference/expressive-projects.md diff --git a/doc/book/usage-examples.md b/doc/book/reference/usage-examples.md similarity index 98% rename from doc/book/usage-examples.md rename to doc/book/reference/usage-examples.md index c033534e..9fa99993 100644 --- a/doc/book/usage-examples.md +++ b/doc/book/reference/usage-examples.md @@ -18,7 +18,7 @@ In all examples, the assumption is the following directory structure: We assume also that: -- You have installed zend-expressive per the [installation instructions](index.md#installation). +- You have installed zend-expressive per the [installation instructions](../index.md#installation). - `public/` will be the document root of your application. - Your own classes are under `src/` with the top-level namespace `Application`, and you have configured [autoloading](https://getcomposer.org/doc/01-basic-usage.md#autoloading) in your `composer.json` for those classes. @@ -59,7 +59,7 @@ We assume also that: ### Routing -As noted in the [Application documentation](application.md#adding-routable-middleware), +As noted in the [Application documentation](../features/application.md#adding-routable-middleware), routing is abstracted and can be accomplished by calling any of the following methods: @@ -241,7 +241,7 @@ $app->run(); This is a nice way to encapsulate the application creation. You could then potentially move all service configuration to another file! (We already -[document an ApplicationFactory for exactly this scenario.](container/factories.md#applicationfactory)) +[document an ApplicationFactory for exactly this scenario.](../features/container/factories.md#applicationfactory)) ## Hello World using a Configuration-Driven Container diff --git a/doc/book/router/bookdown.json b/doc/book/router/bookdown.json deleted file mode 100644 index 24195bd6..00000000 --- a/doc/book/router/bookdown.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "title": "Routing Adapters", - "content": [ - {"Introduction": "intro.md"}, - {"Routing Interface": "interface.md"}, - {"URI Generation": "uri-generation.md"}, - {"Route Result Observers": "result-observers.md"}, - {"Routing vs Piping": "piping.md"}, - {"Using Aura": "aura.md"}, - {"Using FastRoute": "fast-route.md"}, - {"Using the ZF2 Router": "zf2.md"} - ] -} diff --git a/doc/book/template/bookdown.json b/doc/book/template/bookdown.json deleted file mode 100644 index b21e50ed..00000000 --- a/doc/book/template/bookdown.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "title": "Templating", - "content": [ - {"Introduction": "intro.md"}, - {"Template Renderer Interface": "interface.md"}, - {"Templated Middleware": "middleware.md"}, - {"Using Plates": "plates.md"}, - {"Using Twig": "twig.md"}, - {"Using zend-view": "zend-view.md"} - ] -} diff --git a/doc/bookdown.json b/doc/bookdown.json deleted file mode 100644 index 03a312be..00000000 --- a/doc/bookdown.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "title": "zend-expressive: PSR-7 Middleware Microframework", - "content": [ - {"Intro": "../README.md"}, - {"Overview and Features": "book/features.md"}, - "book/quick-start/bookdown.json", - {"Applications": "book/application.md"}, - "book/container/bookdown.json", - "book/router/bookdown.json", - "book/template/bookdown.json", - {"Error Handling": "book/error-handling.md"}, - "book/helpers/bookdown.json", - {"Emitters": "book/emitters.md"}, - {"Examples": "book/usage-examples.md"}, - "book/cookbook/bookdown.json", - {"Expressive Projects": "book/expressive-projects.md"}, - "book/migration/bookdown.json" - ], - "target": "./html" -} diff --git a/mkdocs.yml b/mkdocs.yml index 4e32adc4..80160075 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -1,21 +1,60 @@ docs_dir: doc/book site_dir: doc/html -theme: readable +theme_dir: cinder pages: - index.md - - { 'Overview and Features': features.md } - - { 'Quick Start': [{ Standalone: quick-start/standalone.md }, { 'Using the Skeleton Installer': quick-start/skeleton.md }] } - - { Applications: application.md } - - { Containers: [{ Introduction: container/intro.md }, { 'Container Factories': container/factories.md }, { 'Using zend-servicemanager': container/zend-servicemanager.md }, { 'Using Pimple': container/pimple.md }, { 'Using Aura.Di': container/aura-di.md }] } - - { 'Routing Adapters': [{ Introduction: router/intro.md }, { 'Routing Interface': router/interface.md }, { 'URI Generation': router/uri-generation.md }, { 'Route Result Observers': router/result-observers.md }, { 'Routing vs Piping': router/piping.md }, { 'Using Aura': router/aura.md }, { 'Using FastRoute': router/fast-route.md }, { 'Using the ZF2 Router': router/zf2.md }] } - - { Templating: [{ Introduction: template/intro.md }, { 'Template Renderer Interface': template/interface.md }, { 'Templated Middleware': template/middleware.md }, { 'Using Plates': template/plates.md }, { 'Using Twig': template/twig.md }, { 'Using zend-view': template/zend-view.md }] } - - { 'Error Handling': error-handling.md } - - { Helpers: [{ Introduction: helpers/intro.md }, { UrlHelper: helpers/url-helper.md }, { ServerUrlHelper: helpers/server-url-helper.md }, { 'Body Parsing Middleware': helpers/body-parse.md }] } - - { Emitters: emitters.md } - - { Examples: usage-examples.md } - - { Cookbook: [{ 'Prepending a common path to all routes': cookbook/common-prefix-for-routes.md }, { 'Route-specific middleware pipelines': cookbook/route-specific-pipeline.md }, { 'Setting custom 404 page handling': cookbook/custom-404-page-handling.md }, { 'Registering custom view helpers when using zend-view': cookbook/using-custom-view-helpers.md }, { 'Using zend-form view helpers': cookbook/using-zend-form-view-helpers.md }, { 'Using Expressive from a subdirectory': cookbook/using-a-base-path.md }, { 'Building modular applications': cookbook/modular-layout.md }, { 'Setting a locale based on a routing parameter': cookbook/setting-locale-depending-routing-parameter.md }, { 'Setting a locale without a routing parameter': cookbook/setting-locale-without-routing-parameter.md }, { 'Enabling debug toolbars': cookbook/debug-toolbars.md }, { 'Handling multiple routes in a single class': cookbook/using-routed-middleware-class-as-controller.md }] } - - { 'Expressive Projects': expressive-projects.md } - - { Migration: [{ 'From RC5 and Earlier': migration/rc-to-v1.md }] } + - 'Getting Started': + - 'Overview and Features': getting-started/features.md + - 'Quick Start: Standalone': getting-started/standalone.md + - 'Quick Start: Skeleton Installer': getting-started/skeleton.md + - Features: + - Applications: features/application.md + - Containers: + - Introduction: features/container/intro.md + - 'Container Factories': features/container/factories.md + - 'Using zend-servicemanager': features/container/zend-servicemanager.md + - 'Using Pimple': features/container/pimple.md + - 'Using Aura.Di': features/container/aura-di.md + - 'Routing Adapters': + - Introduction: features/router/intro.md + - 'Routing Interface': features/router/interface.md + - 'URI Generation': features/router/uri-generation.md + - 'Route Result Observers': features/router/result-observers.md + - 'Routing vs Piping': features/router/piping.md + - 'Using Aura': features/router/aura.md + - 'Using FastRoute': features/router/fast-route.md + - 'Using the ZF2 Router': features/router/zf2.md + - Templating: + - Introduction: features/template/intro.md + - 'Template Renderer Interface': features/template/interface.md + - 'Templated Middleware': features/template/middleware.md + - 'Using Plates': features/template/plates.md + - 'Using Twig': features/template/twig.md + - 'Using zend-view': features/template/zend-view.md + - 'Error Handling': features/error-handling.md + - Helpers: + - Introduction: features/helpers/intro.md + - UrlHelper: features/helpers/url-helper.md + - ServerUrlHelper: features/helpers/server-url-helper.md + - 'Body Parsing Middleware': features/helpers/body-parse.md + - Emitters: features/emitters.md + - Reference: + - Examples: reference/usage-examples.md + - Cookbook: + - 'Prepending a common path to all routes': reference/cookbook/common-prefix-for-routes.md + - 'Route-specific middleware pipelines': reference/cookbook/route-specific-pipeline.md + - 'Setting custom 404 page handling': reference/cookbook/custom-404-page-handling.md + - 'Registering custom view helpers when using zend-view': reference/cookbook/using-custom-view-helpers.md + - 'Using zend-form view helpers': reference/cookbook/using-zend-form-view-helpers.md + - 'Using Expressive from a subdirectory': reference/cookbook/using-a-base-path.md + - 'Building modular applications': reference/cookbook/modular-layout.md + - 'Setting a locale based on a routing parameter': reference/cookbook/setting-locale-depending-routing-parameter.md + - 'Setting a locale without a routing parameter': reference/cookbook/setting-locale-without-routing-parameter.md + - 'Enabling debug toolbars': reference/cookbook/debug-toolbars.md + - 'Handling multiple routes in a single class': reference/cookbook/using-routed-middleware-class-as-controller.md + - 'Expressive Projects': reference/expressive-projects.md + - Migration: + - 'From RC5 and Earlier': migration/rc-to-v1.md site_name: zend-expressive site_description: 'zend-expressive: PSR-7 Middleware Microframework' repo_url: 'https://github.com/zendframework/zend-expressive' From 2dd085bd5eebab7e7386ad3b1a1a3e5973e5abd9 Mon Sep 17 00:00:00 2001 From: Matthew Weier O'Phinney Date: Thu, 21 Jan 2016 16:10:20 -0600 Subject: [PATCH 05/15] More documentation re-organization - Promoted cookbook up a level - Moved migration under the reference section --- .../cookbook/common-prefix-for-routes.md | 2 +- .../cookbook/custom-404-page-handling.md | 4 +-- .../cookbook/debug-toolbars.md | 0 .../cookbook/modular-layout.md | 0 .../cookbook/route-specific-pipeline.md | 0 ...ting-locale-depending-routing-parameter.md | 0 ...etting-locale-without-routing-parameter.md | 0 .../cookbook/using-a-base-path.md | 0 .../cookbook/using-custom-view-helpers.md | 0 ...g-routed-middleware-class-as-controller.md | 0 .../cookbook/using-zend-form-view-helpers.md | 0 doc/book/getting-started/features.md | 2 +- .../{ => reference}/migration/rc-to-v1.md | 0 mkdocs.yml | 28 +++++++++---------- 14 files changed, 18 insertions(+), 18 deletions(-) rename doc/book/{reference => }/cookbook/common-prefix-for-routes.md (90%) rename doc/book/{reference => }/cookbook/custom-404-page-handling.md (95%) rename doc/book/{reference => }/cookbook/debug-toolbars.md (100%) rename doc/book/{reference => }/cookbook/modular-layout.md (100%) rename doc/book/{reference => }/cookbook/route-specific-pipeline.md (100%) rename doc/book/{reference => }/cookbook/setting-locale-depending-routing-parameter.md (100%) rename doc/book/{reference => }/cookbook/setting-locale-without-routing-parameter.md (100%) rename doc/book/{reference => }/cookbook/using-a-base-path.md (100%) rename doc/book/{reference => }/cookbook/using-custom-view-helpers.md (100%) rename doc/book/{reference => }/cookbook/using-routed-middleware-class-as-controller.md (100%) rename doc/book/{reference => }/cookbook/using-zend-form-view-helpers.md (100%) rename doc/book/{ => reference}/migration/rc-to-v1.md (100%) diff --git a/doc/book/reference/cookbook/common-prefix-for-routes.md b/doc/book/cookbook/common-prefix-for-routes.md similarity index 90% rename from doc/book/reference/cookbook/common-prefix-for-routes.md rename to doc/book/cookbook/common-prefix-for-routes.md index 5a8e2bf8..e04f5f7b 100644 --- a/doc/book/reference/cookbook/common-prefix-for-routes.md +++ b/doc/book/cookbook/common-prefix-for-routes.md @@ -19,7 +19,7 @@ As your application progresses, you may have a mixture of different content, and the above segregated under the path `/api`. This is essentially the same problem as addressed in the -["Segregating your application to a subpath"](../usage-examples.md#segregating-your-application-to-a-subpath) example. +["Segregating your application to a subpath"](../reference/usage-examples.md#segregating-your-application-to-a-subpath) example. To accomplish it: diff --git a/doc/book/reference/cookbook/custom-404-page-handling.md b/doc/book/cookbook/custom-404-page-handling.md similarity index 95% rename from doc/book/reference/cookbook/custom-404-page-handling.md rename to doc/book/cookbook/custom-404-page-handling.md index afcf3316..89937bc7 100644 --- a/doc/book/reference/cookbook/custom-404-page-handling.md +++ b/doc/book/cookbook/custom-404-page-handling.md @@ -1,7 +1,7 @@ # How can I set custom 404 page handling? In some cases, you may want to handle 404 errors separately from the -[final handler](../../features/error-handling.md). This can be done by registering +[final handler](../features/error-handling.md). This can be done by registering middleware that operates late — specifically, after the routing middleware. Such middleware will be executed if no other middleware has executed, and/or when all other middleware calls `return $next()` @@ -78,7 +78,7 @@ that does not rely on the final handler. ## Registering custom 404 handlers We can register either `Application\NotFound` class above as service in the -[service container](../../features/container/intro.md). In the case of the second approach, +[service container](../features/container/intro.md). In the case of the second approach, you would also need to provide a factory for creating the middleware (to ensure you inject the template renderer). diff --git a/doc/book/reference/cookbook/debug-toolbars.md b/doc/book/cookbook/debug-toolbars.md similarity index 100% rename from doc/book/reference/cookbook/debug-toolbars.md rename to doc/book/cookbook/debug-toolbars.md diff --git a/doc/book/reference/cookbook/modular-layout.md b/doc/book/cookbook/modular-layout.md similarity index 100% rename from doc/book/reference/cookbook/modular-layout.md rename to doc/book/cookbook/modular-layout.md diff --git a/doc/book/reference/cookbook/route-specific-pipeline.md b/doc/book/cookbook/route-specific-pipeline.md similarity index 100% rename from doc/book/reference/cookbook/route-specific-pipeline.md rename to doc/book/cookbook/route-specific-pipeline.md diff --git a/doc/book/reference/cookbook/setting-locale-depending-routing-parameter.md b/doc/book/cookbook/setting-locale-depending-routing-parameter.md similarity index 100% rename from doc/book/reference/cookbook/setting-locale-depending-routing-parameter.md rename to doc/book/cookbook/setting-locale-depending-routing-parameter.md diff --git a/doc/book/reference/cookbook/setting-locale-without-routing-parameter.md b/doc/book/cookbook/setting-locale-without-routing-parameter.md similarity index 100% rename from doc/book/reference/cookbook/setting-locale-without-routing-parameter.md rename to doc/book/cookbook/setting-locale-without-routing-parameter.md diff --git a/doc/book/reference/cookbook/using-a-base-path.md b/doc/book/cookbook/using-a-base-path.md similarity index 100% rename from doc/book/reference/cookbook/using-a-base-path.md rename to doc/book/cookbook/using-a-base-path.md diff --git a/doc/book/reference/cookbook/using-custom-view-helpers.md b/doc/book/cookbook/using-custom-view-helpers.md similarity index 100% rename from doc/book/reference/cookbook/using-custom-view-helpers.md rename to doc/book/cookbook/using-custom-view-helpers.md diff --git a/doc/book/reference/cookbook/using-routed-middleware-class-as-controller.md b/doc/book/cookbook/using-routed-middleware-class-as-controller.md similarity index 100% rename from doc/book/reference/cookbook/using-routed-middleware-class-as-controller.md rename to doc/book/cookbook/using-routed-middleware-class-as-controller.md diff --git a/doc/book/reference/cookbook/using-zend-form-view-helpers.md b/doc/book/cookbook/using-zend-form-view-helpers.md similarity index 100% rename from doc/book/reference/cookbook/using-zend-form-view-helpers.md rename to doc/book/cookbook/using-zend-form-view-helpers.md diff --git a/doc/book/getting-started/features.md b/doc/book/getting-started/features.md index 5a4bccb3..1ecd4bd7 100644 --- a/doc/book/getting-started/features.md +++ b/doc/book/getting-started/features.md @@ -151,7 +151,7 @@ will execute in one of two conditions: - routed middleware called on the next middleware instead of returning a response. As such, the largest use case for such middleware is for error handling. -One possibility is for [providing custom 404 handling](../reference/cookbook/custom-404-page-handling.md), +One possibility is for [providing custom 404 handling](../cookbook/custom-404-page-handling.md), or handling application-specific error conditions (such as authentication or authorization failures). diff --git a/doc/book/migration/rc-to-v1.md b/doc/book/reference/migration/rc-to-v1.md similarity index 100% rename from doc/book/migration/rc-to-v1.md rename to doc/book/reference/migration/rc-to-v1.md diff --git a/mkdocs.yml b/mkdocs.yml index 80160075..938dc416 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -40,21 +40,21 @@ pages: - Emitters: features/emitters.md - Reference: - Examples: reference/usage-examples.md - - Cookbook: - - 'Prepending a common path to all routes': reference/cookbook/common-prefix-for-routes.md - - 'Route-specific middleware pipelines': reference/cookbook/route-specific-pipeline.md - - 'Setting custom 404 page handling': reference/cookbook/custom-404-page-handling.md - - 'Registering custom view helpers when using zend-view': reference/cookbook/using-custom-view-helpers.md - - 'Using zend-form view helpers': reference/cookbook/using-zend-form-view-helpers.md - - 'Using Expressive from a subdirectory': reference/cookbook/using-a-base-path.md - - 'Building modular applications': reference/cookbook/modular-layout.md - - 'Setting a locale based on a routing parameter': reference/cookbook/setting-locale-depending-routing-parameter.md - - 'Setting a locale without a routing parameter': reference/cookbook/setting-locale-without-routing-parameter.md - - 'Enabling debug toolbars': reference/cookbook/debug-toolbars.md - - 'Handling multiple routes in a single class': reference/cookbook/using-routed-middleware-class-as-controller.md - 'Expressive Projects': reference/expressive-projects.md - - Migration: - - 'From RC5 and Earlier': migration/rc-to-v1.md + - Migration: + - 'From RC5 and Earlier': reference/migration/rc-to-v1.md + - Cookbook: + - 'Prepending a common path to all routes': cookbook/common-prefix-for-routes.md + - 'Route-specific middleware pipelines': cookbook/route-specific-pipeline.md + - 'Setting custom 404 page handling': cookbook/custom-404-page-handling.md + - 'Registering custom view helpers when using zend-view': cookbook/using-custom-view-helpers.md + - 'Using zend-form view helpers': cookbook/using-zend-form-view-helpers.md + - 'Using Expressive from a subdirectory': cookbook/using-a-base-path.md + - 'Building modular applications': cookbook/modular-layout.md + - 'Setting a locale based on a routing parameter': cookbook/setting-locale-depending-routing-parameter.md + - 'Setting a locale without a routing parameter': cookbook/setting-locale-without-routing-parameter.md + - 'Enabling debug toolbars': cookbook/debug-toolbars.md + - 'Handling multiple routes in a single class': cookbook/using-routed-middleware-class-as-controller.md site_name: zend-expressive site_description: 'zend-expressive: PSR-7 Middleware Microframework' repo_url: 'https://github.com/zendframework/zend-expressive' From 9f2b98695ece28d6ffa5a1af7c1d289dd9653a5a Mon Sep 17 00:00:00 2001 From: Matthew Weier O'Phinney Date: Thu, 21 Jan 2016 16:10:48 -0600 Subject: [PATCH 06/15] Re-orded documentation - Moved Reference after Cookbook --- mkdocs.yml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/mkdocs.yml b/mkdocs.yml index 938dc416..b1d38cb1 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -38,11 +38,6 @@ pages: - ServerUrlHelper: features/helpers/server-url-helper.md - 'Body Parsing Middleware': features/helpers/body-parse.md - Emitters: features/emitters.md - - Reference: - - Examples: reference/usage-examples.md - - 'Expressive Projects': reference/expressive-projects.md - - Migration: - - 'From RC5 and Earlier': reference/migration/rc-to-v1.md - Cookbook: - 'Prepending a common path to all routes': cookbook/common-prefix-for-routes.md - 'Route-specific middleware pipelines': cookbook/route-specific-pipeline.md @@ -55,6 +50,11 @@ pages: - 'Setting a locale without a routing parameter': cookbook/setting-locale-without-routing-parameter.md - 'Enabling debug toolbars': cookbook/debug-toolbars.md - 'Handling multiple routes in a single class': cookbook/using-routed-middleware-class-as-controller.md + - Reference: + - Examples: reference/usage-examples.md + - 'Expressive Projects': reference/expressive-projects.md + - Migration: + - 'From RC5 and Earlier': reference/migration/rc-to-v1.md site_name: zend-expressive site_description: 'zend-expressive: PSR-7 Middleware Microframework' repo_url: 'https://github.com/zendframework/zend-expressive' From 74817826953758bb698dcc7c9071a55f32a501b0 Mon Sep 17 00:00:00 2001 From: Matthew Weier O'Phinney Date: Thu, 21 Jan 2016 16:14:18 -0600 Subject: [PATCH 07/15] Updates to doc toolchain - Removed theme_dir from `mkdocs.yml`, as it depends on having downloaded a 3rd party theme. - Added logic to deployment script to append theme_dir and markdown_extensions to the `mkdocs.yml`. - Downloads our selected theme and unpack it. - Added extension configuration for codehilite to disable pygment highlighting; instead, we'll use prismjs. --- doc/deploy.sh | 16 ++++++++++------ mkdocs.yml | 1 - 2 files changed, 10 insertions(+), 7 deletions(-) diff --git a/doc/deploy.sh b/doc/deploy.sh index 98e462c2..f27effb5 100755 --- a/doc/deploy.sh +++ b/doc/deploy.sh @@ -18,14 +18,18 @@ set -o errexit -o nounset rev=$(git rev-parse --short HEAD) # Get documentation templates and assets -( - cd doc - git clone git://github.com/zendframework/documentation assets -) +wget https://github.com/chrissimpkins/cinder/releases/download/v0.9.3/cinder.zip +unzip -d cinder cinder.zip -mkdir -p doc/html +# Update the mkdocs.yml +echo "markdown_extensions:" >> mkdocs.yml +echo " - markdown.extensions.codehilite:" >> mkdocs.yml +echo " use_pygments: False" >> mkdocs.yml +echo " - pymdownx.superfences" >> mkdocs.yml +echo "theme_dir: cinder" >> mkdocs.yml # Initialize gh-pages checkout +mkdir -p doc/html ( cd doc/html git init @@ -37,7 +41,7 @@ mkdir -p doc/html ) # Build the documentation -mkdocs build +mkdocs build --clean # Commit and push the documentation to gh-pages ( diff --git a/mkdocs.yml b/mkdocs.yml index b1d38cb1..866164b5 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -1,6 +1,5 @@ docs_dir: doc/book site_dir: doc/html -theme_dir: cinder pages: - index.md - 'Getting Started': From 6ba150be1aba02961002e39aa30889b5ea2b5a67 Mon Sep 17 00:00:00 2001 From: Matthew Weier O'Phinney Date: Thu, 21 Jan 2016 17:04:17 -0600 Subject: [PATCH 08/15] Use custom theme for zf project I've created a new repo to hold the custom theme, and tagged an initial release. The deployment script now grabs it from there and extracts it into a directory. --- doc/deploy.sh | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/doc/deploy.sh b/doc/deploy.sh index f27effb5..8522c5b8 100755 --- a/doc/deploy.sh +++ b/doc/deploy.sh @@ -18,15 +18,19 @@ set -o errexit -o nounset rev=$(git rev-parse --short HEAD) # Get documentation templates and assets -wget https://github.com/chrissimpkins/cinder/releases/download/v0.9.3/cinder.zip -unzip -d cinder cinder.zip +wget -O zf-mkdoc-theme.tgz https://github.com/weierophinney/zf-mkdoc-theme/archive/0.1.0.tar.gz +mkdir zf-mkdoc-theme +( + cd zf-mkdoc-theme + tar xzf ../zf-mkdoc-theme.tgz --strip-components=1 +) # Update the mkdocs.yml echo "markdown_extensions:" >> mkdocs.yml echo " - markdown.extensions.codehilite:" >> mkdocs.yml echo " use_pygments: False" >> mkdocs.yml echo " - pymdownx.superfences" >> mkdocs.yml -echo "theme_dir: cinder" >> mkdocs.yml +echo "theme_dir: zf-mkdoc-theme" >> mkdocs.yml # Initialize gh-pages checkout mkdir -p doc/html From 5ff8531ee8416944b3ccf123ebd7d60f15b42224 Mon Sep 17 00:00:00 2001 From: Matthew Weier O'Phinney Date: Thu, 21 Jan 2016 17:17:31 -0600 Subject: [PATCH 09/15] New landing page Creates a new landing page for the documentation, and updates the "site name" to simply "Expressive". --- .gitignore | 2 ++ doc/book/index.md | 31 ++++++++++++++++++++++++++++++- mkdocs.yml | 2 +- 3 files changed, 33 insertions(+), 2 deletions(-) mode change 120000 => 100644 doc/book/index.md diff --git a/.gitignore b/.gitignore index d3db2080..53e74c8b 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,7 @@ doc/html/ vendor/ +zf-mkdoc-theme/ clover.xml composer.lock coveralls-upload.json +zf-mkdoc-theme.tgz diff --git a/doc/book/index.md b/doc/book/index.md deleted file mode 120000 index fe840054..00000000 --- a/doc/book/index.md +++ /dev/null @@ -1 +0,0 @@ -../../README.md \ No newline at end of file diff --git a/doc/book/index.md b/doc/book/index.md new file mode 100644 index 00000000..fb64eb90 --- /dev/null +++ b/doc/book/index.md @@ -0,0 +1,30 @@ +# Expressive: PSR-7 Middleware in Minutes + +Expressive builds on [Stratigility](https://github.com/zendframework/zend-stratigility) +to provide a minimalist [PSR-7](http://www.php-fig.org/psr/psr-7/) middleware +framework for PHP, with the following features: + +- Routing. Choose your own router; we support: + - [Aura.Router](https://github.com/auraphp/Aura.Router) + - [FastRoute](https://github.com/nikic/FastRoute) + - [ZF2's MVC router](https://github.com/zendframework/zend-mvc) +- DI Containers, via [container-interop](https://github.com/container-interop/container-interop). + All middleware composed in Expressive may be retrieved from the composed + container. +- Optionally, templating. We support: + - [Plates](http://platesphp.com/) + - [Twig](http://twig.sensiolabs.org/) + - [ZF2's PhpRenderer](https://github.com/zendframework/zend-view) +- Error handling. Create templated error pages, or use tools like + [whoops](https://github.com/filp/whoops) for debugging purposes. +- Nested middleware applications. Write an application, and compose it later + in another, optionally under a separate subpath. +- [Simplfied installation](getting-started/skeleton.md). Our custom + [Composer](https://getcomposer.org)-based installer prompts you for your + initial stack choices, giving you exactly the base you want to start from. + +Essentially, Expressive allows *you* to develop using the tools *you* prefer, +and provides minimal structure and facilities to ease your development. + +[Keep reading](getting-started/features.md), and get started writing your first +middleware application today! diff --git a/mkdocs.yml b/mkdocs.yml index 866164b5..669656c7 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -54,7 +54,7 @@ pages: - 'Expressive Projects': reference/expressive-projects.md - Migration: - 'From RC5 and Earlier': reference/migration/rc-to-v1.md -site_name: zend-expressive +site_name: Expressive site_description: 'zend-expressive: PSR-7 Middleware Microframework' repo_url: 'https://github.com/zendframework/zend-expressive' copyright: 'Copyright (c) 2016 Zend Technologies USA Inc.' From 6d9e5e86dd7c3e1e09f7c82cffe29f3fcff2283b Mon Sep 17 00:00:00 2001 From: Matthew Weier O'Phinney Date: Thu, 21 Jan 2016 17:25:41 -0600 Subject: [PATCH 10/15] Updated README to refer to mkdocs --- README.md | 12 +++--------- 1 file changed, 3 insertions(+), 9 deletions(-) diff --git a/README.md b/README.md index 4a3f0507..b1d09716 100644 --- a/README.md +++ b/README.md @@ -83,20 +83,14 @@ documentation. ## Documentation -Documentation is [in the doc tree](doc/), and can be compiled using [bookdown](http://bookdown.io): +Documentation is [in the doc tree](doc/book/), and can be compiled using [mkdocs](http://www.mkdocs.org): ```bash -$ bookdown doc/bookdown.json -$ php -S 0.0.0.0:8080 -t doc/html/ # then browse to http://localhost:8080/ +$ mkdocs build ``` -> ### Bookdown -> -> You can install bookdown globally using `composer global require bookdown/bookdown`. If you do -> this, make sure that `$HOME/.composer/vendor/bin` is on your `$PATH`. - Additionally, public-facing, browseable documentation is available at -http://zend-expressive.rtfd.org. +https://zendframework.github.io/zend-expressive/ ## Architecture From bfcaf84ac8887f8030ceab6ddce9da6d6e5597a8 Mon Sep 17 00:00:00 2001 From: Matthew Weier O'Phinney Date: Fri, 22 Jan 2016 15:38:59 -0600 Subject: [PATCH 11/15] Updated travis directives - Added site_url to configuration, for consumption in deploy script. - Updated to 0.1.1 of zf-mkdoc-theme, to pick up fixes for search. - Removed EXECUTE_DOC_CHECK travis directives; no longer relevant. - Install mkdocs deps to user. Uses the `--user` flag to `pip install` to ensure pip installs local to the user, so that permissions will be correct. Also adds `$HOME/.local/bin` to the path, so that `mkdocs` can be executed once installed. - Caches the `$HOME/.local` directory, so that subsequent builds do not need to install the deps again. - Only install mkdocs and pymdown-extensions conditionally, for DEPLOY_DOCS builds. - Updated GH_TOKEN, encrypted for correct repository. --- .travis.yml | 17 +++++++---------- doc/deploy.sh | 4 +++- 2 files changed, 10 insertions(+), 11 deletions(-) diff --git a/.travis.yml b/.travis.yml index 5d5967f5..8c76938c 100644 --- a/.travis.yml +++ b/.travis.yml @@ -5,14 +5,16 @@ language: php cache: directories: - $HOME/.composer/cache + - $HOME/.local - vendor env: global: - - GH_USER_NAME: Matthew Weier O'Phinney + - SITE_URL: https://zendframework.github.io/zend-expressive + - GH_USER_NAME: "Matthew Weier O'Phinney" - GH_USER_EMAIL: matthew@weierophinney.net - GH_REF: github.com/zendframework/zend-expressive.git - - secure: tH8+yLKQtFQlZ01FEALMyCNoGPTD6gkaFK4qO7G5eKM70jbFMmmXaHPRiKMyay6s13pEpjzyu8oU4xbyJuE7fI6agK83J970+zk48Zhdbv51GDkQI9zhs8CPGVuBZMbXG9irxBnqHzui1RnnUF1mRTjIreecs60w9eXrg8ziKgtlkUwtjbU4CtB8SGxG2Smo17g3n7uoBJqw/BfazBCvDIEBi3+P7v0vvxiI7l3u2A+N3dv2JKU4dxWvfyuWq3afw8rPRMHS0hBRPXDIMHNAfDOCCqgx9bmtgdlx9dZhCNBWkTznP+1FuFs53G2ATRHc6wnB/4/1H6BX33iDM3laMnbdVOKKh4Cn5DANdaMOSovjjF99lQXTvbznT37lz9V6xA9req1485puWDZbI3Fu5iAvQKfO6qjQNvZKytPSCNNt5DwBOkn4dTzubW9YHgLATNQbaMkgSDtMGPfiplUqZPV78/cs76ZjnFGHYYlrOVBXvr0xKynt+Zt2Kr/C9T6mV+idrrLPX7m9KrLyt9fGqCtAQu/G8MHKLlZSgZfTOY3sLRBSpIBYwqwhDwd9AD5OmTwY+98YpuCv334aqE+Wxggg3k3NrMrGZgJkvdR+d/Qbl4HS/sDqVAPaNaN/63nFd3d7WRQKp9bA276js9nXqVb0tgxsjlh3HpFTEiSLQF4= + - secure: "C3RfQG69KAbqQqyQAgF6LhPvIpy5zSk0XnILvGEbcDoB36gg6/OcEHFCfFGdDZdSc3itDwwt65eiCVvKC4K5deuvqbCR1gAHAacYpW4jDV4fVaO40eiqZmQ7BZ1LHBQssJsa46yd0lwMmnj7V1Gya8MhD7ga5LINUe6ZxGzgo2Y3XRSWUzYcIiiGbCXXTgix8yG4de+Z5batsx0aT+99E0+U0DVB+DGoVaWRNwOY0UNdggTaKG0ahPJczlMsMsXyafop7LVAsYdIvaYoOMC8gshB/tket+q0b+61i9zaDtQv+x0oWvkobyDksr24jYkLAKMMQGFBq1cVJElVbNHSdtY0dLunpnQn9iaZ8PW8IhIw83YeyR9KPgbX3bF9SRt+Eay2j/YB2RbNK5BG2c/NeidnflMjcjPEhA4Ab6f0N1vy9wex5w/FAJUrhpfQB6AZgIJ/wovnJJAvF1etBSfZ0CYA+oAzYRRFQXo5Eq+lxvX5mQ2w2+sv6sUBS0IoP+1+JKzR98k2pi+q+4HhVVPH28aRfr8PTR/YRCmcUK68H7OKWf8h1vuJYjtN3V5FBOhlej8N9cYqQUBj4YpITqYP0PdzE1iUOoDpZVBMlWqxYw1vKhNiWusMCdJlI1psGWNs9t7hrMpJCg9eRWCe16akEoRrZGreU53ekFZpgeEQgGI=" matrix: fast_finish: true @@ -20,7 +22,6 @@ matrix: - php: 5.5 env: - EXECUTE_CS_CHECK=true - - EXECUTE_DOC_CHECK=true - php: 5.6 env: - EXECUTE_TEST_COVERALLS=true @@ -31,30 +32,26 @@ matrix: - php: hhvm before_install: + - export PATH="$HOME/.local/bin:$PATH" - if [[ $EXECUTE_TEST_COVERALLS != 'true' ]]; then phpenv config-rm xdebug.ini || return 0 ; fi - composer self-update - - if [[ $EXECUTE_DOC_CHECK == 'true' ]]; then composer require --dev --no-update phly/bookdown2mkdocs ; fi - if [[ $EXECUTE_TEST_COVERALLS == 'true' ]]; then composer require --dev --no-update satooshi/php-coveralls:dev-master ; fi install: - travis_retry composer install --no-interaction - composer info -i -before_script: - - if [[ $EXECUTE_DOC_CHECK == 'true' ]]; then cp mkdocs.yml mkdocs.yml.orig ; fi - script: - if [[ $EXECUTE_TEST_COVERALLS == 'true' ]]; then composer test-coverage ; fi - if [[ $EXECUTE_TEST_COVERALLS != 'true' ]]; then composer test ; fi - if [[ $EXECUTE_CS_CHECK == 'true' ]]; then composer cs ; fi - - if [[ $EXECUTE_DOC_CHECK == 'true' ]]; then make mkdocs ; diff mkdocs.yml mkdocs.yml.orig ; return $? ; fi after_script: - if [[ $EXECUTE_TEST_COVERALLS == 'true' ]]; then composer coveralls ; fi after_success: - - if [[ $DEPLOY_DOCS == 'true' && $TRAVIS_BRANCH == 'master' && $TRAVIS_PULL_REQUEST == 'false' ]]; then pip install mkdocs ; fi - - if [[ $DEPLOY_DOCS == 'true' && $TRAVIS_BRANCH == 'master' && $TRAVIS_PULL_REQUEST == 'false' ]]; then pip install pymdown-extensions ; fi + - if [[ $DEPLOY_DOCS == 'true' && $TRAVIS_BRANCH == 'master' && $TRAVIS_PULL_REQUEST == 'false' ]]; then pip install --user mkdocs ; fi + - if [[ $DEPLOY_DOCS == 'true' && $TRAVIS_BRANCH == 'master' && $TRAVIS_PULL_REQUEST == 'false' ]]; then pip install --user pymdown-extensions ; fi - if [[ $DEPLOY_DOCS == 'true' && $TRAVIS_BRANCH == 'master' && $TRAVIS_PULL_REQUEST == 'false' ]]; then ./doc/deploy.sh ; fi notifications: diff --git a/doc/deploy.sh b/doc/deploy.sh index 8522c5b8..f132f116 100755 --- a/doc/deploy.sh +++ b/doc/deploy.sh @@ -3,6 +3,7 @@ # # Environment variables that may be of use: # +# - SITE_URL indicates the URL to the site, to ensure search works; # - GH_USER_NAME indicates the GitHub author name to use; # - GH_USER_EMAIL indicates the email address for that author; # - GH_REF indicates the URI, without scheme or user-info, to the repository; @@ -18,7 +19,7 @@ set -o errexit -o nounset rev=$(git rev-parse --short HEAD) # Get documentation templates and assets -wget -O zf-mkdoc-theme.tgz https://github.com/weierophinney/zf-mkdoc-theme/archive/0.1.0.tar.gz +wget -O zf-mkdoc-theme.tgz https://github.com/weierophinney/zf-mkdoc-theme/archive/0.1.1.tar.gz mkdir zf-mkdoc-theme ( cd zf-mkdoc-theme @@ -26,6 +27,7 @@ mkdir zf-mkdoc-theme ) # Update the mkdocs.yml +echo "site_url: ${SITE_URL}" echo "markdown_extensions:" >> mkdocs.yml echo " - markdown.extensions.codehilite:" >> mkdocs.yml echo " use_pygments: False" >> mkdocs.yml From d0b785d441fd8537eecc61e17635790c15ca3b65 Mon Sep 17 00:00:00 2001 From: Matthew Weier O'Phinney Date: Sat, 23 Jan 2016 11:57:23 -0600 Subject: [PATCH 12/15] Split build and deploy to separate commands Makes it simpler to build the docs on your own. --- doc/build.sh | 35 +++++++++++++++++++++++++++++++++++ doc/deploy.sh | 18 +----------------- 2 files changed, 36 insertions(+), 17 deletions(-) create mode 100755 doc/build.sh diff --git a/doc/build.sh b/doc/build.sh new file mode 100755 index 00000000..8fbe8a10 --- /dev/null +++ b/doc/build.sh @@ -0,0 +1,35 @@ +#!/bin/bash +# Build the documentation. +# +# This script does the following: +# +# - If the zf-mkdoc-theme is not currently present in the checkout, downloads +# and extracts it. +# - Updates the mkdocs.yml to add: +# - site_url +# - markdown extension directives +# - theme directory +# - Builds the documentation. +# - Restores mkdocs.yml to its original state. + +# Get documentation templates and assets +if [[ ! -d zf-mkdoc-theme ]];then + wget -O zf-mkdoc-theme.tgz https://github.com/weierophinney/zf-mkdoc-theme/archive/0.1.2.tar.gz ; + mkdir zf-mkdoc-theme ; + ( + cd zf-mkdoc-theme ; + tar xzf ../zf-mkdoc-theme.tgz --strip-components=1 ; + ) +fi + +# Update the mkdocs.yml +cp mkdocs.yml mkdocs.yml.orig +echo "site_url: ${SITE_URL}" +echo "markdown_extensions:" >> mkdocs.yml +echo " - markdown.extensions.codehilite:" >> mkdocs.yml +echo " use_pygments: False" >> mkdocs.yml +echo " - pymdownx.superfences" >> mkdocs.yml +echo "theme_dir: zf-mkdoc-theme" >> mkdocs.yml + +mkdocs build --clean +mv mkdocs.yml.orig mkdocs.yml diff --git a/doc/deploy.sh b/doc/deploy.sh index f132f116..ea156104 100755 --- a/doc/deploy.sh +++ b/doc/deploy.sh @@ -18,22 +18,6 @@ set -o errexit -o nounset # Get curent commit revision rev=$(git rev-parse --short HEAD) -# Get documentation templates and assets -wget -O zf-mkdoc-theme.tgz https://github.com/weierophinney/zf-mkdoc-theme/archive/0.1.1.tar.gz -mkdir zf-mkdoc-theme -( - cd zf-mkdoc-theme - tar xzf ../zf-mkdoc-theme.tgz --strip-components=1 -) - -# Update the mkdocs.yml -echo "site_url: ${SITE_URL}" -echo "markdown_extensions:" >> mkdocs.yml -echo " - markdown.extensions.codehilite:" >> mkdocs.yml -echo " use_pygments: False" >> mkdocs.yml -echo " - pymdownx.superfences" >> mkdocs.yml -echo "theme_dir: zf-mkdoc-theme" >> mkdocs.yml - # Initialize gh-pages checkout mkdir -p doc/html ( @@ -47,7 +31,7 @@ mkdir -p doc/html ) # Build the documentation -mkdocs build --clean +./doc/build.sh # Commit and push the documentation to gh-pages ( From 05fa3523731500067aff426cebdb68130bc54be6 Mon Sep 17 00:00:00 2001 From: Matthew Weier O'Phinney Date: Mon, 25 Jan 2016 09:08:28 -0600 Subject: [PATCH 13/15] Use zf-mkdoc-theme 0.1.6 Fixes navbar collapse issues, and adds a pager to the top of content whenever the navbar is collapsed. --- doc/build.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/build.sh b/doc/build.sh index 8fbe8a10..26f7c34e 100755 --- a/doc/build.sh +++ b/doc/build.sh @@ -14,7 +14,7 @@ # Get documentation templates and assets if [[ ! -d zf-mkdoc-theme ]];then - wget -O zf-mkdoc-theme.tgz https://github.com/weierophinney/zf-mkdoc-theme/archive/0.1.2.tar.gz ; + wget -O zf-mkdoc-theme.tgz https://github.com/weierophinney/zf-mkdoc-theme/archive/0.1.6.tar.gz ; mkdir zf-mkdoc-theme ; ( cd zf-mkdoc-theme ; From 95155d872571272c4cd390a7613654418b989123 Mon Sep 17 00:00:00 2001 From: Matthew Weier O'Phinney Date: Mon, 25 Jan 2016 15:21:06 -0600 Subject: [PATCH 14/15] Implemented landing page This patch implements a landing page for the documentation. To do so, it replaces the contents generated by mkdocs with bespoke contents that detail marketing features and how to get started. This patch also iterates through all generated HTML pages to add the `class="img-responsive"` attribute to any images detected, ensuring that the layout is consistent across all pages. --- doc/book/images/checkmark.png | Bin 0 -> 7693 bytes doc/book/images/installer.png | Bin 0 -> 103057 bytes doc/book/images/lambda.png | Bin 0 -> 10115 bytes doc/book/images/nodes.png | Bin 0 -> 8602 bytes doc/book/images/pencil.png | Bin 0 -> 31568 bytes doc/book/images/syringe.png | Bin 0 -> 16351 bytes doc/book/images/warning.png | Bin 0 -> 1760 bytes doc/book/index.html | 171 ++++++++++++++++++++++++++++++++++ doc/build.sh | 12 ++- doc/img_responsive.php | 38 ++++++++ doc/swap_index.php | 15 +++ 11 files changed, 235 insertions(+), 1 deletion(-) create mode 100644 doc/book/images/checkmark.png create mode 100644 doc/book/images/installer.png create mode 100644 doc/book/images/lambda.png create mode 100644 doc/book/images/nodes.png create mode 100644 doc/book/images/pencil.png create mode 100644 doc/book/images/syringe.png create mode 100644 doc/book/images/warning.png create mode 100644 doc/book/index.html create mode 100644 doc/img_responsive.php create mode 100644 doc/swap_index.php diff --git a/doc/book/images/checkmark.png b/doc/book/images/checkmark.png new file mode 100644 index 0000000000000000000000000000000000000000..e2107e55c013a9f3c6e60a1937e1bb1a1b6a31c6 GIT binary patch literal 7693 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 literal 0 HcmV?d00001 diff --git a/doc/book/images/installer.png b/doc/book/images/installer.png new file mode 100644 index 0000000000000000000000000000000000000000..c662e24b4c42304e97542dfcaeeb3eb65e726f73 GIT binary patch literal 103057 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 DhoV`6 literal 0 HcmV?d00001 diff --git a/doc/book/images/lambda.png b/doc/book/images/lambda.png new file mode 100644 index 0000000000000000000000000000000000000000..f17f9e0a4f3bf7f2e6cefb1eb8c07a795e377f23 GIT binary patch literal 10115 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 JA=GRl{}1dEs}KMH literal 0 HcmV?d00001 diff --git a/doc/book/images/nodes.png b/doc/book/images/nodes.png new file mode 100644 index 0000000000000000000000000000000000000000..84f2566f4e9e40328abf1c20114e56d0e9d47135 GIT binary patch literal 8602 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�)PCiiT|7@CQw&U9Mfy*YCUW#nr*4 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 +
+

Expressive

+ +

PSR-7 Middleware in Minutes

+
+ + +
+
+ + +
+
+ Middleware
+ +

Middleware

+ +

+ Create middleware + applications, using as many layers as you want, and the architecture + your project needs. +

+
+
+ +
+
+ Routing
+ +

Routing

+ +

+ Route requests to middleware using the routing library of your choice. +

+
+
+
+ +
+
+
+ Dependency Injection
+ +

Dependency Injection

+ +

+ Make your code flexible and robust, using the + dependency injection container of your choice. +

+
+
+ +
+
+ Templating
+ +

Templating

+ +

+ Create templated responses, using + a variety of template engines. +

+
+
+ +
+
+ Error Handling
+ +

Error Handling

+ +

+ Handle errors gracefully, using + templated error pages, whoops, + or your own solution! +

+
+
+
+
+ +
+
+

Get Started Now!

+ +

Installation is only a Composer command away!

+ +

+$ composer create-project -s rc zendframework/zend-expressive-skeleton expressive
+    
+ +

Choose what you want

+ +

+ Expressive provides interfaces for routing and templating, letting you + choose what to use, and how you want to implement it. +

+ +

+ Our unique installer allows you to select your choices when starting + your project! +

+ +
+
+ Expressive Installer
+
+ + +
+ +

Applications, Simplified

+ +
+
+

Write middleware:

+ +

+$pathMiddleware = function (
+    ServerRequestInterface $request,
+    ResponseInterface $response,
+    callable $next
+) {
+    $uri  = $request->getUri();
+    $path = $uri->getPath();
+
+    $response->getBody()->write('You visited ' . $path);
+    return $next($request, $response->withHeader('X-Path', $path));
+};
+    
+ +

And add it to an application:

+ +

+$app->get('/path', $pathMiddleware);
+          
+
+ + +
+
+
+ +
+
+

Learn more

+ + + +

Or use the menu to navigate to the section you're interested in.

+
+
diff --git a/doc/build.sh b/doc/build.sh index 26f7c34e..9d383ca5 100755 --- a/doc/build.sh +++ b/doc/build.sh @@ -14,7 +14,8 @@ # Get documentation templates and assets if [[ ! -d zf-mkdoc-theme ]];then - wget -O zf-mkdoc-theme.tgz https://github.com/weierophinney/zf-mkdoc-theme/archive/0.1.6.tar.gz ; + echo "Fetching and installing theme" ; + wget -O zf-mkdoc-theme.tgz https://github.com/weierophinney/zf-mkdoc-theme/archive/0.1.7.tar.gz ; mkdir zf-mkdoc-theme ; ( cd zf-mkdoc-theme ; @@ -23,6 +24,7 @@ if [[ ! -d zf-mkdoc-theme ]];then fi # Update the mkdocs.yml +echo "Building documentation" cp mkdocs.yml mkdocs.yml.orig echo "site_url: ${SITE_URL}" echo "markdown_extensions:" >> mkdocs.yml @@ -33,3 +35,11 @@ echo "theme_dir: zf-mkdoc-theme" >> mkdocs.yml mkdocs build --clean mv mkdocs.yml.orig mkdocs.yml + +# Make images responsive +echo "Making images responsive" +php doc/img_responsive.php + +# Replace landing page content +echo "Replacing landing page content" +php doc/swap_index.php diff --git a/doc/img_responsive.php b/doc/img_responsive.php new file mode 100644 index 00000000..7da25354 --- /dev/null +++ b/doc/img_responsive.php @@ -0,0 +1,38 @@ +getInnerIterator()->current(); + if (! $fileInfo->isFile()) { + return true; + } + + if ($fileInfo->getBasename('.html') === $fileInfo->getBasename()) { + return true; + } + + $file = $fileInfo->getRealPath(); + $html = file_get_contents($file); + if (! preg_match('#

[^<\/p>#s', $html)) { + return true; + } + $html = preg_replace( + '#(

[^<\/p>)#s', + '$1class="img-responsive"$2', + $html + ); + file_put_contents($file, $html); + + return true; +}; + +iterator_apply($files, $process); diff --git a/doc/swap_index.php b/doc/swap_index.php new file mode 100644 index 00000000..502368a9 --- /dev/null +++ b/doc/swap_index.php @@ -0,0 +1,15 @@ +.*\<\!-- content:end --\>#s', $source, $target) +); From 12d9a55d8cd910748e54ecf6c47e2ca02f584a74 Mon Sep 17 00:00:00 2001 From: Matthew Weier O'Phinney Date: Tue, 26 Jan 2016 12:22:45 -0600 Subject: [PATCH 15/15] Moved build/deploy scripts to zf-mkdoc-theme This commit removes the build/deploy scripts from the repository, and moves them into the zf-mkdoc-theme repository, which includes them as of 0.2.0. `.travis.yml` was updated to conditionally download and extract the latest zf-mkdoc-theme archive, and to execute the build chain from it; it is also now doing so from the repo under the zendframework organization. --- .travis.yml | 11 ++++++++--- doc/build.sh | 45 ------------------------------------------ doc/deploy.sh | 43 ---------------------------------------- doc/img_responsive.php | 38 ----------------------------------- doc/swap_index.php | 15 -------------- 5 files changed, 8 insertions(+), 144 deletions(-) delete mode 100755 doc/build.sh delete mode 100755 doc/deploy.sh delete mode 100644 doc/img_responsive.php delete mode 100644 doc/swap_index.php diff --git a/.travis.yml b/.travis.yml index 8c76938c..8b82d792 100644 --- a/.travis.yml +++ b/.travis.yml @@ -7,6 +7,7 @@ cache: - $HOME/.composer/cache - $HOME/.local - vendor + - zf-mkdoc-theme env: global: @@ -50,9 +51,13 @@ after_script: - if [[ $EXECUTE_TEST_COVERALLS == 'true' ]]; then composer coveralls ; fi after_success: - - if [[ $DEPLOY_DOCS == 'true' && $TRAVIS_BRANCH == 'master' && $TRAVIS_PULL_REQUEST == 'false' ]]; then pip install --user mkdocs ; fi - - if [[ $DEPLOY_DOCS == 'true' && $TRAVIS_BRANCH == 'master' && $TRAVIS_PULL_REQUEST == 'false' ]]; then pip install --user pymdown-extensions ; fi - - if [[ $DEPLOY_DOCS == 'true' && $TRAVIS_BRANCH == 'master' && $TRAVIS_PULL_REQUEST == 'false' ]]; then ./doc/deploy.sh ; fi + - export DEPLOY=$(if [[ $DEPLOY_DOCS == 'true' && $TRAVIS_BRANCH == 'master' && $TRAVIS_PULL_REQUEST == 'false' ]]; then echo -n "true" ; else echo -n "false" ; fi) + - export NEEDS_THEME=$([ -d zf-mkdoc-theme/theme ] ; result=$? ; if (( result == 0 )); then echo -n "false"; else echo -n "true" ; fi) + - if [[ $DEPLOY == "true" ]]; then pip install --user mkdocs ; fi + - if [[ $DEPLOY == "true" ]]; then pip install --user pymdown-extensions ; fi + - if [[ $DEPLOY == "true" && $NEEDS_THEME == "true" ]]; then echo "Downloading zf-mkdoc-theme" ; $(if [[ ! -d zf-mkdoc-theme ]];then mkdir zf-mkdoc-theme ; fi) ; $(curl -s -L https://github.com/zendframework/zf-mkdoc-theme/releases/latest | egrep -o '/zendframework/zf-mkdoc-theme/archive/[0-9]*\.[0-9]*\.[0-9]*.tar.gz' | head -n1 | wget -O zf-mkdoc-theme.tgz --base=https://github.com/ -i -) ; $(cd zf-mkdoc-theme ; tar xzf ../zf-mkdoc-theme.tgz --strip-components=1) ; echo "Finished downloading and installing zf-mkdoc-theme" ; fi + - export CAN_DEPLOY=$([ -f zf-mkdoc-theme/deploy.sh ] ; result=$? ; if (( result == 0 )); then echo -n "true"; else echo -n "false" ; fi) + - if [[ $DEPLOY == "true" && $CAN_DEPLOY == "true" ]]; then echo "Preparing to build and deploy documentation" ; ./zf-mkdoc-theme/deploy.sh ; echo "Completed deploying documentation" ; else echo "Missing deployment script" ; fi notifications: email: true diff --git a/doc/build.sh b/doc/build.sh deleted file mode 100755 index 9d383ca5..00000000 --- a/doc/build.sh +++ /dev/null @@ -1,45 +0,0 @@ -#!/bin/bash -# Build the documentation. -# -# This script does the following: -# -# - If the zf-mkdoc-theme is not currently present in the checkout, downloads -# and extracts it. -# - Updates the mkdocs.yml to add: -# - site_url -# - markdown extension directives -# - theme directory -# - Builds the documentation. -# - Restores mkdocs.yml to its original state. - -# Get documentation templates and assets -if [[ ! -d zf-mkdoc-theme ]];then - echo "Fetching and installing theme" ; - wget -O zf-mkdoc-theme.tgz https://github.com/weierophinney/zf-mkdoc-theme/archive/0.1.7.tar.gz ; - mkdir zf-mkdoc-theme ; - ( - cd zf-mkdoc-theme ; - tar xzf ../zf-mkdoc-theme.tgz --strip-components=1 ; - ) -fi - -# Update the mkdocs.yml -echo "Building documentation" -cp mkdocs.yml mkdocs.yml.orig -echo "site_url: ${SITE_URL}" -echo "markdown_extensions:" >> mkdocs.yml -echo " - markdown.extensions.codehilite:" >> mkdocs.yml -echo " use_pygments: False" >> mkdocs.yml -echo " - pymdownx.superfences" >> mkdocs.yml -echo "theme_dir: zf-mkdoc-theme" >> mkdocs.yml - -mkdocs build --clean -mv mkdocs.yml.orig mkdocs.yml - -# Make images responsive -echo "Making images responsive" -php doc/img_responsive.php - -# Replace landing page content -echo "Replacing landing page content" -php doc/swap_index.php diff --git a/doc/deploy.sh b/doc/deploy.sh deleted file mode 100755 index ea156104..00000000 --- a/doc/deploy.sh +++ /dev/null @@ -1,43 +0,0 @@ -#!/bin/bash -# Deploy documentation to gh-pages -# -# Environment variables that may be of use: -# -# - SITE_URL indicates the URL to the site, to ensure search works; -# - GH_USER_NAME indicates the GitHub author name to use; -# - GH_USER_EMAIL indicates the email address for that author; -# - GH_REF indicates the URI, without scheme or user-info, to the repository; -# - GH_TOKEN is the personal security token to use for commits. -# -# All of the above are exported via the project .travis.yml file (with -# GH_TOKEN being encrypted and present in the `secure` key). The user details -# need to match the token used for this to work. - -set -o errexit -o nounset - -# Get curent commit revision -rev=$(git rev-parse --short HEAD) - -# Initialize gh-pages checkout -mkdir -p doc/html -( - cd doc/html - git init - git config user.name "${GH_USER_NAME}" - git config user.email "${GH_USER_EMAIL}" - git remote add upstream "https://${GH_TOKEN}@${GH_REF}" - git fetch upstream - git reset upstream/gh-pages -) - -# Build the documentation -./doc/build.sh - -# Commit and push the documentation to gh-pages -( - cd doc/html - touch . - git add -A . - git commit -m "Rebuild pages at ${rev}" - git push upstream HEAD:gh-pages -) diff --git a/doc/img_responsive.php b/doc/img_responsive.php deleted file mode 100644 index 7da25354..00000000 --- a/doc/img_responsive.php +++ /dev/null @@ -1,38 +0,0 @@ -getInnerIterator()->current(); - if (! $fileInfo->isFile()) { - return true; - } - - if ($fileInfo->getBasename('.html') === $fileInfo->getBasename()) { - return true; - } - - $file = $fileInfo->getRealPath(); - $html = file_get_contents($file); - if (! preg_match('#

[^<\/p>#s', $html)) { - return true; - } - $html = preg_replace( - '#(

[^<\/p>)#s', - '$1class="img-responsive"$2', - $html - ); - file_put_contents($file, $html); - - return true; -}; - -iterator_apply($files, $process); diff --git a/doc/swap_index.php b/doc/swap_index.php deleted file mode 100644 index 502368a9..00000000 --- a/doc/swap_index.php +++ /dev/null @@ -1,15 +0,0 @@ -.*\<\!-- content:end --\>#s', $source, $target) -);