路由模型绑定不点火(Route Model Binding Not Firing)

2019-10-22 04:33发布

我有一些航线/模型绑定设置。 其中约有10条用于各种IDS。 没有什么特别的事情:

$router->get('/notifications/{active_notification_id}/open', 'NotificationsController@open');

$router->bind('active_notification_id', function ($id)
{
    echo 'here'; echo $id; exit;

    // code
});

结合不点火的。 工程在八对人不错,但对于他们两个人只是不火。 它直接与这比崩溃我的代码空模型控制器。

在疯狂的事情是,他们都在我的本地盒就好了(Windows)中,但只有其在服务器上(Ubuntu的)这个问题的工作。 我的PHP版本只用一个次要版本关闭。 但是,绑定8个工作,这只是这两个根本不会触发。

人有一个想法?

  • 请注意我的Laravel和封装版本两端相同。

更新:所以实际上它似乎没有我的路线将回声出生产。 我“假设”其他的人工作,因为他们工作正常。 我也尝试过编辑src/Illuminate/Routing/Router.php bind()函数来呼应的东西,但不能看到它呼应生产(不当地)。

必须有我的箱子生产某种类/文件缓存的。 不知道这是Laravel问题或与我DigitialOcean箱的东西。

Answer 1:

这可能是由于Laravels预编译。

该框架预编译被上基本上每个请求使用的特定的类。 这提供的性能优化的目的。 编译的文件可以在指定config/compile.phpfiles 。 在默认的一个看起来是这样的:

'files' => [
    realpath(__DIR__.'/../app/Providers/AppServiceProvider.php'),
    realpath(__DIR__.'/../app/Providers/BusServiceProvider.php'),
    realpath(__DIR__.'/../app/Providers/ConfigServiceProvider.php'),
    realpath(__DIR__.'/../app/Providers/EventServiceProvider.php'),
    realpath(__DIR__.'/../app/Providers/RouteServiceProvider.php'),
],

当运行php artisan optimize未启用调试时(或与--force选项)所列出的那些文件和其他框架类将被写入到storage/framework/compiled.php 。 (在Laravel 5.0.16的路径已被更改为vendor/compiled.php

尝试运行php artisan clear-compiledphp artisan optimize和您的“新” RouteServiceProvider应该被使用。


背景资料

php artisan optimize被称为每次运行时间composer update composer install (和composer create-project ),因为它被注册为后脚本:

"scripts": {
    "post-install-cmd": [
        "php artisan clear-compiled",
        "php artisan optimize"
    ],
    "post-update-cmd": [
        "php artisan clear-compiled",
        "php artisan optimize"
    ],
    "post-create-project-cmd": [
        "php artisan key:generate"
    ]
},


Answer 2:

尝试把绑定区间定义路线之前。

$router->bind('active_notification_id', function ($id)
{
    echo 'here'; echo $id; exit;

    // code
});

$router->get('/notifications/{active_notification_id}/open', 'NotificationsController@open');


文章来源: Route Model Binding Not Firing