Code Monkey home page Code Monkey logo

proophessor-do's Introduction

Proophessor Do

prooph components in action

Build Status Gitter

Proophessor Do (short Do) demonstrates the power of prooph components in conjunction with zend expressive. And you're ask to try it yourself. Do includes exercises! So read on and pick up a task!

Business Domain

The business logic implemented in this educational project is very simple and should be known by everybody in one way or the other. It is about managing todo lists for users whereby a todo can have a deadline and the assigned user can add a reminder to get notified when time has passed.

Installation

Installation Documentation

Management UI (new)

Management UI Documentation

Model Exploration

Learning by doing!

When you play around with the application you will notice missing functionality. This has a simple reason. You explore a learning application and what is the best way to learn? Right! Learning by doing! So if you want to learn something about CQRS and Event Sourcing:

  1. Pick up an open task listed below
  2. Get us a note in the corresponding issue that you accept the challenge
  3. Ask if you need help -> Gitter
  4. Have fun and learn!

Note: Some tasks depend on others and some can be split into sub tasks. Let's discuss this in the issues. And of course you can also work together. Sharing work doubles knowledge!

HALL OF FAME

A successfully merged pull request will add you to the HALL OF FAME!

Features

Tutorials

Technology Stack

List of used technologies - We <3 Open Source

Support

Happy messaging!

proophessor-do's People

Contributors

afoeder avatar akireikin avatar angrymisanthrope avatar astavale avatar basz avatar bgaleotti avatar burzum avatar codeliner avatar dragosprotung avatar dranzd avatar jkuchar avatar lucascourot avatar mablae avatar orkin avatar prolic avatar rommsen avatar sandrokeil avatar sbacelic avatar sebastianblum avatar thedisco avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

proophessor-do's Issues

Simplify Installation.md

Hello,

My overall approach is to keep things as simple as possible and don't force the user
to "decide" on all options, when installing the app for first time.

There are two things:

  • Remove snapshot-store introductions => Refer to the snapshotting tutorial in end of Installation.md
  • Decide for one RDMS: MySql OR Postgres ?

What do you think? Also see #98 where I already started with this.

MariaDB config file is missing

hello,

At the moment, in config/autoload (https://github.com/prooph/proophessor-do/tree/master/config/autoload) exists only a

  • mysql_event_store.local.php.dist
  • postgres_event_store.local.php.dist

but the mariadb_event_store.local.php.dist is missing

I tried these configuration:
mariadb_event_store.local.php

<?php
/**
 * This file is part of prooph/proophessor-do.
 * (c) 2014-2017 prooph software GmbH <[email protected]>
 * (c) 2015-2017 Sascha-Oliver Prolic <[email protected]>
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */

declare(strict_types=1);

namespace Prooph\ProophessorDo;

use Prooph\EventStore;

/**
 * Local configuration overrides - make your adjustments here
 */
return [
    // dependencies settings
    'dependencies' => [
        'factories' => [
            EventStore\EventStore::class => [
                EventStore\Pdo\Container\MariaDbEventStoreFactory::class,
                'default',
            ],
            EventStore\Projection\ProjectionManager::class => [
                EventStore\Pdo\Container\MariaDbProjectionManagerFactory::class,
                'default',
            ],
        ],
    ],
    // prooph settings
    'prooph' => [
        'event_store' => [
            'default' => [
                'persistence_strategy' => EventStore\Pdo\PersistenceStrategy\MariaDbSingleStreamStrategy::class,
                'connection' => 'pdo.connection',
            ]
        ],
        'pdo_connection' => [
            'default' => [
                'schema' => 'mysql',
                'host' => '127.0.0.1',
                'port' => '3306',
                'user' => 'root',
                'password' => '',
                'dbname' => 'todo',
                'charset' => 'utf8',
            ],
        ],
        'projection_manager' => [
            'default' => [
                'connection' => 'pdo.connection',
            ],
        ],
    ],
];

but I get this error message:

$ php scripts/create_event_stream.php
PHP Fatal error: Uncaught Zend\ServiceManager\Exception\ServiceNotFoundException: Unable to resolve service "Prooph\EventStore\Pdo\PersistenceStrategy\MariaDbSingleStreamStrategy" to a factory; are you certain you provided it during configuration? in /Users/sebastianblum/PhpstormProjects/proophessor-do/vendor/zendframework/zend-servicemanager/src/ServiceManager.php:681
Stack trace:
#0 /Users/sebastianblum/PhpstormProjects/proophessor-do/vendor/zendframework/zend-servicemanager/src/ServiceManager.php(757): Zend\ServiceManager\ServiceManager->getFactory('Prooph\EventSto...')
#1 /Users/sebastianblum/PhpstormProjects/proophessor-do/vendor/zendframework/zend-servicemanager/src/ServiceManager.php(200): Zend\ServiceManager\ServiceManager->doCreate('Prooph\EventSto...')
#2 /Users/sebastianblum/PhpstormProjects/proophessor-do/vendor/prooph/pdo-event-store/src/Container/AbstractEventStoreFactory.php(83): Zend\ServiceManager\ServiceManager->get('Prooph\EventSto...')
#3 /Users/sebastianblum/PhpstormProjects/proophessor-do/vendor/proop in /Users/sebastianblum/PhpstormProjects/proophessor-do/vendor/zendframework/zend-servicemanager/src/ServiceManager.php on line 681

Dialog Helper is deprecated; Gives error when trying to install this project.

Hi,

According to this page, dialog helper is deprecated.

I'm trying to follow the steps in the installation instructions. At this step:

php bin/migrations.php migrations:migrate

I'll get this error:

PHP Fatal error: Uncaught Error: Class 'Symfony\Component\Console\Helper\DialogHelper' not found in ***\proophessor-do\bin\migrations.php:25 Stack trace: #0 {main} thrown in ***\proophessor-do\bin\migrations.php on line 25

Line 25 contains:

$helperSet->set(new \Symfony\Component\Console\Helper\DialogHelper(), 'dialog');

Support for Docker and Vagrant

To further simplify the installation steps, I can write Docker files which does the job. Vagrant can be used with these Dockerfiles too.

What do you think and which server stack should it be?

Add a new feature to the hall of fame to demonstrate how to check uniqueness

As we talked on Gitter with @codeliner , I would be interested to demonstrate the use of domain services to check, let's say, the uniqueness of an email address.

Example: Check that the user's email is not already used while registering a new user. At the moment, you can register twice with the same email address (when pressing the previous button and filling the registration form again).

Another improvement proposed by @bweston92 :

you wouldn't even do new DateTimeImmutable as it is data relied from the system so you'd have a Clock interface that would give you this information.

How

  • Create a Service Interface in the Domain and its implementation in the Infrastructure.
  • Pass it to the command handler so it passes it to the aggregate root's method.
  • The aggregate root uses the domain service for its business rule.

'Add reminder' doesn't work

How to reproduce

  1. On 'user-todo-list' page press 'Add reminder' button for any existing todo.
  2. Select any date and time in datepicker.
  3. Press enter.

screen shot 2017-02-12 at 21 29 28

Mark a todo as done

  1. Create a dedicated command for the action called MarkTodoAsDone and put it into the todo command folder
  2. Create a command handler for the new command
    • Create a factory for the command handler and put it here
    • The command handler needs to fetch an existing Todo from the TodoList so inject the TodoList as dependency into the command handler using the factory
    • Make the command handler available in the container by using the command handler FQCN as service name and point it to the factory. See configuration for the PostTodoCommandHandler as an example
  3. Now you can route the command to its handler
    • Route the http request representing the command to the Commanding\API.
      You can do this in the routes configuration.
    • The API will translate the request into a command message and dispatch the message on the command bus. The command bus is responsible to locate and invoke the responsible command handler. To do so the command bus also need some route information.
  4. In the command handler you should load the effected Todo from the TodoList
  5. The Todo aggregate root is responsible for handling the action so it needs a new method to do so.
    • In the method the Todo should check it's current status. Only if it is open it can be marked as done otherwise it should throw an exception
    • If the precondition is met the Todo should not change it's state directly but instead record a new domain event called TodoWasMarkedAsDone
    • Add a state changing method in the Todo aggregate root based on the new event. Call the method whenTodoWasMarkedAsDone and require the recorded event as a input parameter then change the TodoStatus to done
  6. The same event needs also be handled by a projector so that the read model gets updated. You already know how to route a command message to a handler. Now do the same for the event and route it to a projector which updates the read model table.

Bonus Points: Write at least one unit test which covers that an open Todo can change its state to done and records a TodoWasMarkedAsDone event to track the change.

[mac][mariadb] Installation error

I'm playing with the manual installation and I got these error running php scripts/create_event_stream.php

php scripts/create_event_stream.php
PHP Fatal error:  Uncaught Prooph\EventStore\Pdo\Exception\RuntimeException: Error during createSchemaFor: 42000; 1064; You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'NOT NULL,
    `aggregate_id` CHAR(36) CHARACTER SET utf8 COLLATE utf8_bin GENERA' at line 8 in /Users/sebastianblum/PhpstormProjects/proophessor-do/vendor/prooph/pdo-event-store/src/MySqlEventStore.php:805
Stack trace:
#0 /Users/sebastianblum/PhpstormProjects/proophessor-do/vendor/prooph/pdo-event-store/src/MySqlEventStore.php(180): Prooph\EventStore\Pdo\MySqlEventStore->createSchemaFor('_4228e4a00331b5...')
#1 /Users/sebastianblum/PhpstormProjects/proophessor-do/vendor/prooph/event-store/src/ActionEventEmitterEventStore.php(74): Prooph\EventStore\Pdo\MySqlEventStore->create(Object(Prooph\EventStore\Stream))
#2 /Users/sebastianblum/PhpstormProjects/proophessor-do/vendor/prooph/common/src/Event/ProophActionEventEmitter.php(57): Prooph\EventStore\ActionEventEmitterEventStore-> in /Users/sebastianblum/PhpstormProjects/proophessor-do/vendor/prooph/pdo-event-store/src/MySqlEventStore.php on line 805

Fatal error: Uncaught Prooph\EventStore\Pdo\Exception\RuntimeException: Error during createSchemaFor: 42000; 1064; You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'NOT NULL,
    `aggregate_id` CHAR(36) CHARACTER SET utf8 COLLATE utf8_bin GENERA' at line 8 in /Users/sebastianblum/PhpstormProjects/proophessor-do/vendor/prooph/pdo-event-store/src/MySqlEventStore.php:805
Stack trace:
#0 /Users/sebastianblum/PhpstormProjects/proophessor-do/vendor/prooph/pdo-event-store/src/MySqlEventStore.php(180): Prooph\EventStore\Pdo\MySqlEventStore->createSchemaFor('_4228e4a00331b5...')
#1 /Users/sebastianblum/PhpstormProjects/proophessor-do/vendor/prooph/event-store/src/ActionEventEmitterEventStore.php(74): Prooph\EventStore\Pdo\MySqlEventStore->create(Object(Prooph\EventStore\Stream))
#2 /Users/sebastianblum/PhpstormProjects/proophessor-do/vendor/prooph/common/src/Event/ProophActionEventEmitter.php(57): Prooph\EventStore\ActionEventEmitterEventStore-> in /Users/sebastianblum/PhpstormProjects/proophessor-do/vendor/prooph/pdo-event-store/src/MySqlEventStore.php on line 805

My system is

  • Mac Book Pro
  • MariaDB: 10.2.9-MariaDB Homebrew

any ideas to fix that problem?

Don't return error when email address is already used

Just accept the command and send email appropriately.
a) If email is new, send welcome registration email.
b) If email is used already, inform user of duplicate registration via email.

This is for preventing to find out registered users by trying different email addresses.

See also: #93 & #94

Use Docker Compose V2 config and PHP 7

We can update the Docker Compose configuration to the new version and we can use PHP 7, because the MongoDB adapter supports PHP 7.

  • 🐳 User Docker Compose V2 config
  • Remove Docker data container and mount files in PHP image (not needed here and has no benefit)
  • 🚀 Use PHP 7 only
  • 📝 Update install instructions

Light theme and Prooph Logo

Thinking about Branding and maybe hosting this project online, as an "reference" app to play with
it would be great to adapt a light theme which fits better into getprooph.org.

Also adding the awesome logo is needed.

What do you think?

Parse error in php 5.6

Line 54 of RegisterUserHandler produces a parse error in Php 5.6

Parse error:  syntax error, unexpected '(' in /var/www/src/Model/User/Handler/RegisterUserHandler.php on line 54

This will create a problem when installing with Docker or Vagrant, since Php 5.6 is still the used version

Further improve error reporting

We should include the original error message if dispatching a command fails. ATM you need to debug the application to identify the root of the exception which is bad for beginners.

Make use of QueryBus

  • Inject the QueryBus instead of the Finder into the controllers
  • Call $promise = $this->queryBus->dispatch($fetchSomething);

and use something like this:

$receivedMessage = null;
$promise->then(function ($result) use (&$receivedMessage) {
    $receivedMessage = $result;
});
  • Create a query object for every needed query.
  • Route the query object to the finder
  • Add / update tests

Clean up model dir

We should clean up the model dir and move commands, handlers, events and exceptions into sub folders of the aggregate root folder:

Model\User
|__ Command
      |__ RegisterUser.php
|__ Handler
      |__ RegisterUserHandler.php
|__ Event
      |__ UserWasRegistered.php
|__ Exception
      |__ UserNotFound.php
|__ User.php
|__ UserCollection.php
|__ UserId.php

This change makes it easier to get a clear view of the domain.

POST methods are returning content.

When creating a task if validation fails there should be a redirect to "create a todo" view with a validation error message. Having the view returned in that POST request allows the user to press F5 and re-attempt the previous request which may confuse them when "are you sure you want to send that data again" pops up.

This is known as Post/Validate/Redirect or Post/Redirect/Get pattern. POST is your action and GET is your query.

Fatal error in history_replay script (replay function undefined)

Hello,
I have a problem with replaying history when i run the history_replay script.
I have a fatal error which tells that the function replay is undefined.

Call to undefined method Prooph\EventStore\ActionEventEmitterEventStore::replay() in /app/scripts/history_replay.php

Do you have an idea about that?
Thanks.

Projection containers are not starting

How to reproduce the issue

Go through all the steps from this file.

What happened

During the step 3.4 there are some problems with starting projectors.

MacBook-Pro:proophessor-do akireikin$ docker-compose up
Creating network "proophessordo_default" with the default driver
Creating proophessordo_mysql_1
Creating proophessordo_mongodb_1
Creating proophessordo_projection_todo_reminder_1
Creating proophessordo_projection_user_1
Creating proophessordo_php_1
Creating proophessordo_projection_todo_1
Creating proophessordo_nginx_1

ERROR: for projection_todo_reminder  Cannot start service projection_todo_reminder: oci runtime error: container_linux.go:247: starting container process caused "exec: \"/app/.docker/wait_for_sql.sh\": permission denied"

ERROR: for projection_user  Cannot start service projection_user: oci runtime error: container_linux.go:247: starting container process caused "exec: \"/app/.docker/wait_for_sql.sh\": permission denied"

ERROR: for projection_todo  Cannot start service projection_todo: oci runtime error: container_linux.go:247: starting container process caused "exec: \"/app/.docker/wait_for_sql.sh\": permission denied"
ERROR: Encountered errors while bringing up the project.

What is wrong

.docker/wait_for_sql.sh is not executable

Mark todo as expired feature

What's the requirement for this feature?

Is this a feature where user sends a command to mark as expired or is this marked by the system when it goes expired?

Does expired means that the current time is past that deadline?

Docker installation or documentation is missing event store adapter

Today I was trying to install the docker version of proophessor-do.

It turned out that this version is not installing any adapter for the event store. so the first migration is skipped.

Because of this registering a new user failed:
Message dispatch failed during locate-handler phase. Error: An exception was raised while creating "Prooph\ProophessorDo\Model\User\Handler\RegisterUserHandler"; no instance returned"

I had to manually install the doctrine adapter:

 docker run --rm -it --volume $(pwd):/app prooph/composer:7.0 composer require prooph/event-store-doctrine-adapter

After this everything worked fine

The version I used last week (the one still using php 5.6) worked out of the box.

If this is intended behavior the docs should be updated.

Aura router produces php notice

the route:

[
            'name' => 'page::user-todo-list',
            'path' => '/user-todo-list/{user_id}',
            'middleware' => \Prooph\ProophessorDo\App\Action\UserTodoList::class,
            'allowed_methods' => ['GET'],
            'options' => [
                'tokens' => [
                    'user_id' => '[0-9A-Fa-f]{8}-[0-9A-Fa-f]{4}-[0-9A-Fa-f]{4}-[0-9A-Fa-f]{4}-[0-9A-Fa-f]{12}'
                ],
            ],
        ],

produces a PHP Notice:

PHP Notice:  Array to string conversion in /var/www/proophessor-do/vendor/aura/router/src/Generator.php on line 131

This can cause trouble as routes are assembled and injected into JS code so the notice breaks JS syntax then.

We should check if we can avoid the notice and also improve the JS parser (or replace it with a better mechanism).

Add deadline to todo

  • User should be able to add a deadline as a date in the future to a todo
  • User should not be able to add a deadline, if the date is in the past

Final classes

Why the read model repositories are marked as final?

  • It's impossible to unit test classes depending upon them, or at least it is possible with lots of mocking of the Doctrine's Connection/Statement class
  • Quoting Marco Pivetta:

Final classes only work effectively under following assumptions: There is an abstraction (interface) that the final class implements, All of the public API of the final class is part of that interface

An interface should be introduced or the final removed then.

Add reminder to todo

  • User should be the owner of the todo
  • User should be able to add a reminder as a date in the future to a todo
  • User should not be able to add a reminder, if the date is in the past

HTTP 500 Error on creating new user

When I am trying to create new user, the API response for request http://localhost:8080/api/commands/register-user is HTTP 500.

I'm using docker version, which was installed step by step with instruction. The only thing which reported problem was the setup_mongodb.sh script, which returned error:

Starting proophessordo_dataphp_1
bin/setup_mongodb.sh: 3: bin/setup_mongodb.sh: Bad substitution
using adapter mongodb

Both files were created (config/autoload/mongo_client.local.php and config/autoload/event_store.local.php), so i assume it works properly.

The JSON response for the request looks like:

{"message":"Server Error"}

so it is not helpful. Is there any way to turn on the debug mode? Did I do something wrong?

Reopen a todo

Depends on #1

Step By Step Guide

  1. Create a dedicated command for the action called ReopenTodo and put it into the todo command folder
  2. Create a command handler for the new command
    • Create a factory for the command handler and put it here
    • The command handler needs to fetch an existing Todo from the TodoList so inject the TodoList as dependency into the command handler using the factory
    • Make the command handler available in the container by using the command handler FQCN as service name and point it to the factory. See configuration for the PostTodoCommandHandler as an example
  3. Now you can route the command to its handler
    • Route the http request representing the command to the Commanding\API.
      You can do this in the routes configuration.
    • The API will translate the request into a command message and dispatch the message on the command bus. The command bus is responsible to locate and invoke the responsible command handler. To do so the command bus also need some route information.
  4. In the command handler you should load the effected Todo from the TodoList
  5. The Todo aggregate root is responsible for handling the action so it needs a new method.
    • In the method the Todo should check it's current status. Only if it is done it can be marked as open again otherwise it should throw an exception
    • If the precondition is met the Todo should not change it's state directly but instead record a new domain event called TodoWasReopened
    • Add a state changing method in the Todo aggregate root based on the new event. Call the method whenTodoWasReopened and require the recorded event as a input parameter then change the TodoStatus to open
  6. The same event needs also be handled by a projector so that the read model gets updated. You already know how to route a command message to a handler. Now do the same for the event and route it to a projector which updates the read model table.

Bonus Points: Write at least one unit test which covers that a done Todo can change its state to open again and records a TodoWasReopened event to track the change.

prooph/pdo-event-store (dev) is not compatible with prooph/event-store (dev)

How to reproduce the issue

Update composer dependencies.

What happened

Everywhere in the project

Fatal error: Class Prooph\EventStore\Pdo\MySqlEventStore contains 3 abstract methods and must therefore be declared abstract or implement the remaining methods (Prooph\EventStore\ReadOnlyEventStore::fetchStreamNames, Prooph\EventStore\ReadOnlyEventStore::fetchCategoryNames, Prooph\EventStore\ReadOnlyEventStore::fetchProjectionNames) in /app/vendor/prooph/pdo-event-store/src/MySqlEventStore.php on line 42

What is wrong

It seems prooph/pdo-event-store package version doesn't compatible with prooph/event-store version.

List of installed packages

MacBook-Pro:proophessor-do akireikin$ docker run --rm -it --volume $(pwd):/app prooph/composer:7.1 show
Do not run Composer as root/super user! See https://getcomposer.org/root for details
aura/router                                    2.3.1               A web router implementation; given a URI path and a copy of $_SERVER, it will extract path-info parameter values for a spe...
beberlei/assert                                v2.7.3              Thin assertion library for input validation in business models.
container-interop/container-interop            1.1.0               Promoting the interoperability of container objects (DIC, SL, etc.)
doctrine/annotations                           v1.3.1              Docblock Annotations Parser
doctrine/cache                                 v1.6.1              Caching library offering an object-oriented API for many cache backends
doctrine/collections                           v1.4.0              Collections Abstraction library
doctrine/common                                v2.7.2              Common Library for Doctrine projects
doctrine/dbal                                  v2.5.12             Database Abstraction Layer
doctrine/inflector                             v1.1.0              Common String Manipulations with regard to casing and singular/plural rules.
doctrine/instantiator                          1.0.5               A small, lightweight utility to instantiate objects in PHP without invoking their constructors
doctrine/lexer                                 v1.0.1              Base library for a lexer that can be used in Top-Down, Recursive Descent Parsers.
fig/http-message-util                          1.1.2               Utility classes and constants for use with PSR-7 (psr/http-message)
filp/whoops                                    1.1.10              php error handling for cool kids
friendsofphp/php-cs-fixer                      v2.0.0              A tool to automatically fix PHP code style
guzzle/guzzle                                  v3.8.1              Guzzle is a PHP HTTP client library and framework for building RESTful web service clients
http-interop/http-middleware                   0.2.0               Common interface for HTTP middleware
malukenho/docheader                            0.1.5               A small library to check header docs
marc-mabe/php-enum                             v2.3.1              Simple and fast implementation of enumerations with native PHP 5.3 and upper
myclabs/deep-copy                              1.6.0               Create deep copies (clones) of your objects
paragonie/random_compat                        v2.0.4              PHP 5.x polyfill for random_bytes() and random_int() from PHP 7
phpdocumentor/reflection-common                1.0                 Common reflection classes used by phpdocumentor to reflect the code structure
phpdocumentor/reflection-docblock              3.1.1               With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is...
phpdocumentor/type-resolver                    0.2.1               
phpspec/prophecy                               dev-patch-1 15e4b25 Highly opinionated mocking framework for PHP 5.3+
phpunit/php-code-coverage                      4.0.5               Library that provides collection, processing, and rendering functionality for PHP code coverage information.
phpunit/php-file-iterator                      1.4.2               FilterIterator implementation that filters files based on a list of suffixes.
phpunit/php-text-template                      1.2.1               Simple template engine.
phpunit/php-timer                              1.0.8               Utility class for timing
phpunit/php-token-stream                       1.4.9               Wrapper around PHP's tokenizer extension.
phpunit/phpunit                                5.7.13              The PHP Unit Testing framework.
phpunit/phpunit-mock-objects                   3.4.3               Mock Object library for PHPUnit
prooph/common                                  v4.0.0              Common classes used across prooph packages
prooph/event-sourcing                          5.0.x-dev 81df9a5   PHP EventSourcing library
prooph/event-store                             7.0.x-dev 43f644d   PHP EventStore Implementation
prooph/event-store-bus-bridge                  3.0.x-dev ee8abef   Marry CQRS with Event Sourcing
prooph/pdo-event-store                         dev-master 3141da2  Prooph PDO EventStore
prooph/php-cs-fixer-config                     v0.1.1              PHP CS Fixer config for prooph components
prooph/psr7-middleware                         0.4.x-dev 874aae4   PSR-7 Middleware for prooph components
prooph/service-bus                             6.0.x-dev 20de452   PHP Enterprise Service Bus Implementation supporting CQRS and DDD
proophsoftware/prooph-cli                      v0.2.0              prooph components command line tool for rapid development
psr/http-message                               1.0.1               Common interface for HTTP messages
psr/log                                        1.0.2               Common interface for logging libraries
ramsey/uuid                                    3.5.2               Formerly rhumsaa/uuid. A PHP 5.4+ library for generating RFC 4122 version 1, 3, 4, and 5 universally unique identifiers (U...
react/promise                                  v2.5.0              A lightweight implementation of CommonJS Promises/A for PHP
roave/security-advisories                      dev-master 4112836  Prevents installation of composer packages with known security vulnerabilities: no API, simply require it
sandrokeil/interop-config                      2.0.1               Provides interfaces and a concrete implementation to create instances depending on configuration via factory classes and e...
satooshi/php-coveralls                         v1.0.1              PHP client library for Coveralls API
sebastian/code-unit-reverse-lookup             1.0.0               Looks up which function or method a line of code belongs to
sebastian/comparator                           1.2.4               Provides the functionality to compare PHP values for equality
sebastian/diff                                 1.4.1               Diff implementation
sebastian/environment                          2.0.0               Provides functionality to handle HHVM/PHP environments
sebastian/exporter                             2.0.0               Provides the functionality to export PHP variables for visualization
sebastian/global-state                         1.1.1               Snapshotting of global state
sebastian/object-enumerator                    2.0.0               Traverses array structures and object graphs to enumerate all referenced objects
sebastian/recursion-context                    2.0.0               Provides functionality to recursively process PHP variables
sebastian/resource-operations                  1.0.0               Provides a list of PHP built-in functions that operate on resources
sebastian/version                              2.0.1               Library that helps with managing the version number of Git-hosted PHP projects
symfony/config                                 v3.2.3              Symfony Config Component
symfony/console                                v3.2.3              Symfony Console Component
symfony/debug                                  v3.2.3              Symfony Debug Component
symfony/event-dispatcher                       v3.2.3              Symfony EventDispatcher Component
symfony/filesystem                             v3.2.3              Symfony Filesystem Component
symfony/finder                                 v3.2.3              Symfony Finder Component
symfony/polyfill-mbstring                      v1.3.0              Symfony polyfill for the Mbstring extension
symfony/polyfill-php54                         v1.3.0              Symfony polyfill backporting some PHP 5.4+ features to lower PHP versions
symfony/process                                v3.2.3              Symfony Process Component
symfony/stopwatch                              v3.2.3              Symfony Stopwatch Component
symfony/yaml                                   v3.2.3              Symfony Yaml Component
webmozart/assert                               1.2.0               Assertions to validate method input/output with nice error messages.
zendframework/zend-code                        3.1.0               provides facilities to generate arbitrary code using an object oriented interface
zendframework/zend-config                      2.6.0               provides a nested object property based user interface for accessing this configuration data within application code
zendframework/zend-diactoros                   1.3.10              PSR HTTP Message implementations
zendframework/zend-escaper                     2.5.2               
zendframework/zend-eventmanager                3.1.0               Trigger and listen to events within a PHP application
zendframework/zend-expressive                  1.1.1               PSR-7 Middleware Microframework based on Stratigility
zendframework/zend-expressive-aurarouter       1.0.0               Aura.Router integration for Expressive
zendframework/zend-expressive-helpers          2.2.0               Helper/Utility classes for Expressive
zendframework/zend-expressive-router           1.3.2               Router subcomponent for Expressive
zendframework/zend-expressive-template         1.0.4               Template subcomponent for Expressive
zendframework/zend-expressive-zendviewrenderer 1.2.1               zend-view PhpRenderer integration for Expressive
zendframework/zend-filter                      2.7.1               provides a set of commonly needed data filters
zendframework/zend-loader                      2.5.1               
zendframework/zend-mail                        2.7.2               provides generalized functionality to compose and send both text and MIME-compliant multipart e-mail messages
zendframework/zend-mime                        2.6.1               
zendframework/zend-servicemanager              3.2.0               
zendframework/zend-stdlib                      3.1.0               
zendframework/zend-stratigility                1.3.3               Middleware for PHP
zendframework/zend-validator                   2.8.2               provides a set of commonly needed validators
zendframework/zend-view                        2.8.1               provides a system of helpers, output filters, and variable escaping

Composer could not find a composer.json file in /app

Followed the docker instructions in the docs/installation.md on Fedora 23.

The first step worked fine. This was:
docker pull prooph/php:5.6-fpm && docker pull prooph/composer:5.6 && docker pull prooph/nginx:www
but the next step is reporting "Composer could not find a composer.json file in /app". This is after the command:
docker run --rm -it --volume $(pwd):/app prooph/composer:5.6 install -o --prefer-dist
Plus the warning "Running composer as root/super user is highly discouraged as packages, plugins and scripts cannot always be trusted".

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.