Search code examples
cakephpread-eval-print-loop

How do I load the latest code in Cake REPL?


When I make changes to my Entity code, the changes only reflect after restarting the REPL console. How do I always have the latest code in my REPL console?

./bin/cake console
> $ac_table = Cake\Datasource\FactoryLocator::get('Table')->get('AccountChannels');
> $ac = $ac_table->find()->first()
> $ac->someFunc(); // I can only see changes to this function after restarting the console

I also tried to reload the entity with the first() call after a code change, but no luck.


Solution

  • CakePHP uses PsySH under the hood, and currently it doesn't support code reloading, unless you can get a runkit version with import support running in your PHP environment.

    Hey there's an existing fork of runkit for php7. Unfortunatly the runkit_import function was removed in version 4.0.0a1, apparently because of bugs with php7.3+, so this will not work for latest versions of php, but it should be mostly ok for earlier versions (haven't fully tested though). To install:

    1. pecl install runkit7-3.1.0a1

    2. I created a PR to update RunkitReloader.php class (nb: might not work for class props, see pr modifications)

    https://github.com/bobthecow/psysh/issues/416#issuecomment-776631583

    https://github.com/bobthecow/psysh/issues/416