Open Menu

Reference Documentation#^ TOP

In this section you will learn about the internals of the workshop application which will enable you to build robust and advanced workshops.

You can use this section as a useful reference to refer back to during the development of your workshop.

For a walk through approach detailing the initial setup of a workshop and the development of your first exercise, check out the Workshop Tutorial.

Sections#^ TOP

The Container

The workshop utilises a container to build and publish services. Learn how to register new services and replace existing ones.

Available Services

Learn about the services exposed by the container, many of them utilities you can use in your exercises, checks and other services.

Exercise Types

Exercises can be of either CLI or CGI type. Learn about the differences here and which one is right for your exercise.

Exercise Solutions

Exercise solutions can consist of one or many files, which could consist of an entire application. They can also contain Composer dependencies in order to model real-world scenarios.

Results & Renderers

Learn about Results and Result Renderers.

Exercise Checks

Learn what Exercise Checks are and how to use them in your exercise.

Bundled Checks

Learn about the available Exercise Checks in the workshop framework and how to use them.

Creating Simple Checks

Learn how to create your own Simple Check.

Creating Custom Results

Create a custom result to use in your check.

Creating Custom Result Renderers

Create a renderer for your result.


Learn about all the events available for listening to in the workshop framework and how to listen to them.

Creating Listener Checks

Learn how to utilise events to build a Listener Check by following a tutorial to build a Couch DB check.

Self Checking Exercise

Add simple checking logic directly in your exercise.

Exercise Events

Listen to events directly in your exercise instead of building a custom check.

Patching Exercise Solutions

Learn how to modify the student's solution on the fly, injecting variables, wrapping code in in try/catch blocks, registering error handlers and so on.