我有一些路由/模型绑定设置。其中大约十个用于各种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个绑定工作正常,只有这两个绑定才能解决。
有人有想法吗?
更新:实际上,似乎我的路线都不会在生产中回应。我"假设"其他人都在工作,因为他们工作正常。我还尝试编辑src/Illuminate/Routing/Router.php bind()
函数来回显一些东西,但不能看到它在生产上回显(在本地)。
我的生产箱上必须有某种类/文件缓存。不确定这是Laravel问题还是我的DigitialOcean盒子。
答案 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-compiled
或php 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');