Skip to content
This repository has been archived by the owner on Dec 14, 2019. It is now read-only.

re() doesn't reload observers code #50

Closed
anderson-xd opened this issue May 15, 2018 · 5 comments
Closed

re() doesn't reload observers code #50

anderson-xd opened this issue May 15, 2018 · 5 comments

Comments

@anderson-xd
Copy link

anderson-xd commented May 15, 2018

Hello,

First of all, I'm loving tinx!

But now comes the problem, I'm developing an observer and I'm testing it on tinx, it happens that when I change something in observer and I use the re();

My change does not happen in tinx, I need to give an exit and run it all over again to make it work :(

Is there any limitation for observers?

Thank you.

@anderson-xd anderson-xd changed the title re() doesn't reload observers re() doesn't reload observers code May 15, 2018
@ajthinking
Copy link
Collaborator

Are you on version 2.1.6? Where is your observer class located and is it autoloaded? I have noted the following in my current application:

  • changes in User.php are reloaded with re()
  • changes in app\Helpers.php are NOT reloaded with re()
    Even though my Helper class is autoloaded
    "autoload": {
        "classmap": [
            "database/seeds",
            "database/factories"
        ],
        "psr-4": {
            "App\\": "app/"
        },
        "files": [
            "app/Helpers.php"
        ]
    },

Feels like it might be the same error we are experiencing? Can you confirm by adding a static to User.php and modify it between re()-calls?

    public static function sayHi()
    {
        return "change_number_123";
    }

@anderson-xd
Copy link
Author

Yes, I'm in version 2.1.6.
I tested what you asked for and it worked with re();

My observer is in App/Observers it is called by ObserverProvider, this provider is in the default App/Providers folder and it is registered in config/app.php along with the other providers.

@furey
Copy link
Owner

furey commented Mar 20, 2019

Hi @anderson-flores,

I've just spent a bit of time looking into this.

It seems like classes used in service providers don't reload changes properly on re().

I'm guessing this has something to do with class autoloading and where these classes are first defined in an application's running order relative to Tinx's reload functionality… but I'm not sure.

For example, if your ObserverProvider has use statements referencing your model and observer classes, they probably won't reload class changes on re(). But if you pulled those classes out of that provider and instead called App\[Model]::observe(App\Observers\[Model]Observer::class) from somewhere else in your application (outside of the server provider stack), your changes will probably reload correctly on re().

I'm not sure how to fix the issue, but am documenting my findings here in case it prompts any ideas or suggestions from any other users.

Cheers.

@TsaiKoga
Copy link

TsaiKoga commented Oct 15, 2019

I have this problem with my php@7.1.
After I updated php version to 7.2,
re() is working now

@furey
Copy link
Owner

furey commented Dec 11, 2019

⛔️ Closing open issues and pull requests as the project is now archived.

@furey furey closed this as completed Dec 11, 2019
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Projects
None yet
Development

No branches or pull requests

4 participants