zerodahero / laravel-workflow

Use the Symfony Workflow component in Laravel
MIT License
197 stars 37 forks source link

Argument 1 passed to Symfony\Component\Workflow\Marking::__construct() must be of the type array, string given #9

Closed clipsmm closed 4 years ago

clipsmm commented 4 years ago

Trying to get model transitions:

$transitions = $model->workflow_transitions();

But it's throwing an error. Here is my setup

config/workflow.php

return [
    'requisitions' => [
        'type' => 'workflow',
        'metadata' => [
            'title' => 'Requisition Workflow',
        ],
        'marking_store' => [
            'type'      => 'multiple_state',
            'arguments' => ['status'],
        ],
        'supports' => ['App\Models\WorkOrder'],
        'initial_marking' => 'draft',
        'places' => ['draft', 'pending', 'quotation', 'procurement', 'lpo', 'declined'],
        'transitions' => [
            'submit' => [
                'from' => 'draft',
                'to' => 'pending',
            ],
            'approve-work-orders-quotation' => [
                'from' => 'pending',
                'to' => 'quotation',
            ],
            'approve-work-orders-procurement' => [
                'from' => 'quotation',
                'to' => 'procurement',
            ],
            'generate-work-orders-lpo' => [
                'from' => 'procurement',
                'to' => 'lpo',
            ],
            'reject-work-order' => [
                'from' => 'procurement',
                'to' => 'declined',
            ],
        ],
    ]
];

What am I doing wrong?

zerodahero commented 4 years ago

What version of Symfony did composer pull in?

On Sun, Nov 10, 2019, 14:59 Mitamita Cliff Oscar notifications@github.com wrote:

Trying to get model transitions: $model->workflow_transitions();

But it's throwing an error. Here is my setup

config/workflow.php

`<?php

use App\Models\WorkOrder;

return [ 'requisitions' => [ 'type' => 'workflow', 'metadata' => [ 'title' => 'Requisition Workflow', ], 'marking_store' => [ 'type' => 'multiple_state', 'arguments' => ['status'], ], 'supports' => ['App\Models\WorkOrder'], 'initial_marking' => 'draft', 'places' => ['draft', 'pending', 'quotation', 'procurement', 'lpo', 'declined'], 'transitions' => [ 'submit' => [ 'from' => 'draft', 'to' => 'pending', ], 'approve-work-orders-quotation' => [ 'from' => 'pending', 'to' => 'quotation', ], 'approve-work-orders-procurement' => [ 'from' => 'quotation', 'to' => 'procurement', ], 'generate-work-orders-lpo' => [ 'from' => 'procurement', 'to' => 'lpo', ], 'reject-work-order' => [ 'from' => 'procurement', 'to' => 'declined', ], ], ] ]; `

— You are receiving this because you are subscribed to this thread. Reply to this email directly, view it on GitHub https://github.com/zerodahero/laravel-workflow/issues/9?email_source=notifications&email_token=ABRAFAAVWOQL5AJVGMHKJNLQTBYZLA5CNFSM4JLOH4JKYY3PNVWWK3TUL52HS4DFUVEXG43VMWVGG33NNVSW45C7NFSM4HYIS3TA, or unsubscribe https://github.com/notifications/unsubscribe-auth/ABRAFAH6F3MFDK4H2OMGO5LQTBYZLANCNFSM4JLOH4JA .

clipsmm commented 4 years ago

"zerodahero/laravel-workflow": "^2.1"

zerodahero commented 4 years ago

What does composer info |grep symfony show?

On Mon, Nov 11, 2019 at 2:47 AM Mitamita Cliff Oscar < notifications@github.com> wrote:

"zerodahero/laravel-workflow": "^2.1"

— You are receiving this because you commented. Reply to this email directly, view it on GitHub https://github.com/zerodahero/laravel-workflow/issues/9?email_source=notifications&email_token=ABRAFAGWXVIF2UP3772SQCLQTELYTA5CNFSM4JLOH4JKYY3PNVWWK3TUL52HS4DFVREXG43VMVBW63LNMVXHJKTDN5WW2ZLOORPWSZGOEDWCTNA#issuecomment-552348084, or unsubscribe https://github.com/notifications/unsubscribe-auth/ABRAFAAP5OG4LCDV6YBX2MDQTELYTANCNFSM4JLOH4JA .

clipsmm commented 4 years ago

symfony/workflow 4.3.6

zerodahero commented 4 years ago

The only thing I'm seeing so far is that initial_marking should be initial_place, though I'm not sure that's the main culprit here. Can you post your entire stack trace?

clipsmm commented 4 years ago
[2019-11-10 23:55:47] local.ERROR: Argument 1 passed to Symfony\Component\Workflow\Marking::__construct() must be of the type array, string given, called in /Users/garage/Code/epmas/vendor/symfony/workflow/MarkingStore/MultipleStateMarkingStore.php on line 47 {"userId":1,"exception":"[object] (Symfony\\Component\\Debug\\Exception\\FatalThrowableError(code: 0): Argument 1 passed to Symfony\\Component\\Workflow\\Marking::__construct() must be of the type array, string given, called in /Users/garage/Code/epmas/vendor/symfony/workflow/MarkingStore/MultipleStateMarkingStore.php on line 47 at /Users/garage/Code/epmas/vendor/symfony/workflow/Marking.php:26)
[stacktrace]
#0 /Users/garage/Code/epmas/vendor/symfony/workflow/MarkingStore/MultipleStateMarkingStore.php(47): Symfony\\Component\\Workflow\\Marking->__construct('pending')
#1 /Users/garage/Code/epmas/vendor/symfony/workflow/Workflow.php(55): Symfony\\Component\\Workflow\\MarkingStore\\MultipleStateMarkingStore->getMarking(Object(App\\Models\\WorkOrder))
#2 /Users/garage/Code/epmas/vendor/symfony/workflow/Workflow.php(213): Symfony\\Component\\Workflow\\Workflow->getMarking(Object(App\\Models\\WorkOrder))
#3 /Users/garage/Code/epmas/vendor/zerodahero/laravel-workflow/src/Traits/WorkflowTrait.php(24): Symfony\\Component\\Workflow\\Workflow->getEnabledTransitions(Object(App\\Models\\WorkOrder))
#4 /Users/garage/Code/epmas/app/Http/Controllers/Admin/WorkOrderController.php(67): App\\Models\\WorkOrder->workflow_transitions()
#5 [internal function]: App\\Http\\Controllers\\Admin\\WorkOrderController->show(Object(App\\Models\\WorkOrder))
#6 /Users/garage/Code/epmas/vendor/laravel/framework/src/Illuminate/Routing/Controller.php(54): call_user_func_array(Array, Array)
#7 /Users/garage/Code/epmas/vendor/laravel/framework/src/Illuminate/Routing/ControllerDispatcher.php(45): Illuminate\\Routing\\Controller->callAction('show', Array)
#8 /Users/garage/Code/epmas/vendor/laravel/framework/src/Illuminate/Routing/Route.php(219): Illuminate\\Routing\\ControllerDispatcher->dispatch(Object(Illuminate\\Routing\\Route), Object(App\\Http\\Controllers\\Admin\\WorkOrderController), 'show')
#9 /Users/garage/Code/epmas/vendor/laravel/framework/src/Illuminate/Routing/Route.php(176): Illuminate\\Routing\\Route->runController()
#10 /Users/garage/Code/epmas/vendor/laravel/framework/src/Illuminate/Routing/Router.php(680): Illuminate\\Routing\\Route->run()
#11 /Users/garage/Code/epmas/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(30): Illuminate\\Routing\\Router->Illuminate\\Routing\\{closure}(Object(Illuminate\\Http\\Request))
#12 /Users/garage/Code/epmas/app/Http/Middleware/ShouldChangePassword.php(27): Illuminate\\Routing\\Pipeline->Illuminate\\Routing\\{closure}(Object(Illuminate\\Http\\Request))
#13 /Users/garage/Code/epmas/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(163): App\\Http\\Middleware\\ShouldChangePassword->handle(Object(Illuminate\\Http\\Request), Object(Closure), 'admin')
#14 /Users/garage/Code/epmas/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(53): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#15 /Users/garage/Code/epmas/vendor/laravel/framework/src/Illuminate/Routing/Middleware/SubstituteBindings.php(41): Illuminate\\Routing\\Pipeline->Illuminate\\Routing\\{closure}(Object(Illuminate\\Http\\Request))
#16 /Users/garage/Code/epmas/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(163): Illuminate\\Routing\\Middleware\\SubstituteBindings->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#17 /Users/garage/Code/epmas/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(53): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#18 /Users/garage/Code/epmas/vendor/laravel/framework/src/Illuminate/Auth/Middleware/Authenticate.php(43): Illuminate\\Routing\\Pipeline->Illuminate\\Routing\\{closure}(Object(Illuminate\\Http\\Request))
#19 /Users/garage/Code/epmas/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(163): Illuminate\\Auth\\Middleware\\Authenticate->handle(Object(Illuminate\\Http\\Request), Object(Closure), 'admin')
#20 /Users/garage/Code/epmas/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(53): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#21 /Users/garage/Code/epmas/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/VerifyCsrfToken.php(75): Illuminate\\Routing\\Pipeline->Illuminate\\Routing\\{closure}(Object(Illuminate\\Http\\Request))
#22 /Users/garage/Code/epmas/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(163): Illuminate\\Foundation\\Http\\Middleware\\VerifyCsrfToken->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#23 /Users/garage/Code/epmas/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(53): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#24 /Users/garage/Code/epmas/vendor/laravel/framework/src/Illuminate/View/Middleware/ShareErrorsFromSession.php(49): Illuminate\\Routing\\Pipeline->Illuminate\\Routing\\{closure}(Object(Illuminate\\Http\\Request))
#25 /Users/garage/Code/epmas/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(163): Illuminate\\View\\Middleware\\ShareErrorsFromSession->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#26 /Users/garage/Code/epmas/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(53): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#27 /Users/garage/Code/epmas/vendor/laravel/framework/src/Illuminate/Session/Middleware/StartSession.php(56): Illuminate\\Routing\\Pipeline->Illuminate\\Routing\\{closure}(Object(Illuminate\\Http\\Request))
#28 /Users/garage/Code/epmas/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(163): Illuminate\\Session\\Middleware\\StartSession->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#29 /Users/garage/Code/epmas/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(53): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#30 /Users/garage/Code/epmas/vendor/laravel/framework/src/Illuminate/Cookie/Middleware/AddQueuedCookiesToResponse.php(37): Illuminate\\Routing\\Pipeline->Illuminate\\Routing\\{closure}(Object(Illuminate\\Http\\Request))
#31 /Users/garage/Code/epmas/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(163): Illuminate\\Cookie\\Middleware\\AddQueuedCookiesToResponse->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#32 /Users/garage/Code/epmas/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(53): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#33 /Users/garage/Code/epmas/vendor/laravel/framework/src/Illuminate/Cookie/Middleware/EncryptCookies.php(66): Illuminate\\Routing\\Pipeline->Illuminate\\Routing\\{closure}(Object(Illuminate\\Http\\Request))
#34 /Users/garage/Code/epmas/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(163): Illuminate\\Cookie\\Middleware\\EncryptCookies->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#35 /Users/garage/Code/epmas/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(53): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#36 /Users/garage/Code/epmas/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(104): Illuminate\\Routing\\Pipeline->Illuminate\\Routing\\{closure}(Object(Illuminate\\Http\\Request))
#37 /Users/garage/Code/epmas/vendor/laravel/framework/src/Illuminate/Routing/Router.php(682): Illuminate\\Pipeline\\Pipeline->then(Object(Closure))
#38 /Users/garage/Code/epmas/vendor/laravel/framework/src/Illuminate/Routing/Router.php(657): Illuminate\\Routing\\Router->runRouteWithinStack(Object(Illuminate\\Routing\\Route), Object(Illuminate\\Http\\Request))
#39 /Users/garage/Code/epmas/vendor/laravel/framework/src/Illuminate/Routing/Router.php(623): Illuminate\\Routing\\Router->runRoute(Object(Illuminate\\Http\\Request), Object(Illuminate\\Routing\\Route))
#40 /Users/garage/Code/epmas/vendor/laravel/framework/src/Illuminate/Routing/Router.php(612): Illuminate\\Routing\\Router->dispatchToRoute(Object(Illuminate\\Http\\Request))
#41 /Users/garage/Code/epmas/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(176): Illuminate\\Routing\\Router->dispatch(Object(Illuminate\\Http\\Request))
#42 /Users/garage/Code/epmas/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(30): Illuminate\\Foundation\\Http\\Kernel->Illuminate\\Foundation\\Http\\{closure}(Object(Illuminate\\Http\\Request))
#43 /Users/garage/Code/epmas/vendor/barryvdh/laravel-debugbar/src/Middleware/InjectDebugbar.php(65): Illuminate\\Routing\\Pipeline->Illuminate\\Routing\\{closure}(Object(Illuminate\\Http\\Request))
#44 /Users/garage/Code/epmas/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(163): Barryvdh\\Debugbar\\Middleware\\InjectDebugbar->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#45 /Users/garage/Code/epmas/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(53): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#46 /Users/garage/Code/epmas/vendor/fideloper/proxy/src/TrustProxies.php(57): Illuminate\\Routing\\Pipeline->Illuminate\\Routing\\{closure}(Object(Illuminate\\Http\\Request))
#47 /Users/garage/Code/epmas/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(163): Fideloper\\Proxy\\TrustProxies->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#48 /Users/garage/Code/epmas/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(53): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#49 /Users/garage/Code/epmas/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php(21): Illuminate\\Routing\\Pipeline->Illuminate\\Routing\\{closure}(Object(Illuminate\\Http\\Request))
#50 /Users/garage/Code/epmas/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(163): Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#51 /Users/garage/Code/epmas/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(53): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#52 /Users/garage/Code/epmas/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php(21): Illuminate\\Routing\\Pipeline->Illuminate\\Routing\\{closure}(Object(Illuminate\\Http\\Request))
#53 /Users/garage/Code/epmas/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(163): Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#54 /Users/garage/Code/epmas/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(53): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#55 /Users/garage/Code/epmas/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/ValidatePostSize.php(27): Illuminate\\Routing\\Pipeline->Illuminate\\Routing\\{closure}(Object(Illuminate\\Http\\Request))
#56 /Users/garage/Code/epmas/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(163): Illuminate\\Foundation\\Http\\Middleware\\ValidatePostSize->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#57 /Users/garage/Code/epmas/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(53): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#58 /Users/garage/Code/epmas/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/CheckForMaintenanceMode.php(62): Illuminate\\Routing\\Pipeline->Illuminate\\Routing\\{closure}(Object(Illuminate\\Http\\Request))
#59 /Users/garage/Code/epmas/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(163): Illuminate\\Foundation\\Http\\Middleware\\CheckForMaintenanceMode->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#60 /Users/garage/Code/epmas/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(53): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#61 /Users/garage/Code/epmas/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(104): Illuminate\\Routing\\Pipeline->Illuminate\\Routing\\{closure}(Object(Illuminate\\Http\\Request))
#62 /Users/garage/Code/epmas/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(151): Illuminate\\Pipeline\\Pipeline->then(Object(Closure))
#63 /Users/garage/Code/epmas/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(116): Illuminate\\Foundation\\Http\\Kernel->sendRequestThroughRouter(Object(Illuminate\\Http\\Request))
#64 /Users/garage/Code/epmas/public/index.php(55): Illuminate\\Foundation\\Http\\Kernel->handle(Object(Illuminate\\Http\\Request))
#65 /Users/garage/.composer/vendor/laravel/valet/server.php(158): require('/Users/garage/C...')
#66 {main}
"} 
zerodahero commented 4 years ago

On your model, is status cast to an array?

clipsmm commented 4 years ago

No my status is a string field

zerodahero commented 4 years ago

Oh, then you should set your marking store type to single_state

clipsmm commented 4 years ago

Changed to single_state and the error is gone

But now i am getting an empty array on : $transitions = $model->workflow_transitions();

Result []

Isn't it supposed to return a list of possible transitions?

zerodahero commented 4 years ago

Yes, that should return a list of possible transitions. Check your marking (on the model) to see the value, and make sure it lines up with the places you've defined. Also, check the guards--if they are blocking a transition, it will not show in that list.

clipsmm commented 4 years ago

I have not setup any guards yet, should that be a problem? My model has status which i am using to track the currentPlace, the current value is inline with one of the places defined

zerodahero commented 4 years ago

Not having guards shouldn't be a problem. Try using tinker to create a new model and try out a few of the places to make sure everything lines up. I'll try and re-create that issue in the meantime.

zerodahero commented 4 years ago

I've setup a very basic example here: https://github.com/zerodahero/laravel-workflow-example It is currently setup very similarly to yours (single_state, linear workflow). Hopefully that helps.

clipsmm commented 4 years ago

@zerodahero on tinker its working, weird.