路线模型绑定不起火

时间:2015-03-08 09:38:47

标签: php laravel routes laravel-5

我有一些路由/模型绑定设置。其中大约十个用于各种ID。没什么特别的:

$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盒子。

2 个答案:

答案 0 :(得分:2)

这可能是由于Laravels预编译。

框架预编译基本上每个请求都使用的某些类。这有助于性能优化。要编译的文件可以在config/compile.php下的files中指定。 default one看起来像这样:

'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以及您的" new"应该使用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"
    ]
},

答案 1 :(得分:0)

在定义路线之前尝试放置绑定部分。

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

    // code
});

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