Laravel 5 路由模型绑定在服务器上不工作
Laravel 5 Route Model Binding not working on server
我对 Laravel 5 路由模型绑定有疑问
我正在使用以下控制器方法
public function destroy(PrimaryLocation $primaryLocation) {
dd($primaryLocation->id);
$primaryLocation->delete();
return redirect()->back()->with('locationDeleted', true);
}
其中 PrimaryLocation 是一个 Eloquent 模型
我的RouteServiceProvider的启动函数:
public function boot(Router $router)
{
parent::boot($router);
$router->model('user', 'App\User');
$router->model('PrimaryLocation', 'App\PrimaryLocation');
}
在我的 routes.php
Route::delete('deletePrimaryLocation/{PrimaryLocation}',
['as' => 'admin.deletePrimaryLocation', 'uses' => 'LocationsController@destroy']);
此设置在我的本地计算机上运行良好,但是当我将文件部署到我的开发服务器时,模型绑定在某处中断;
Location 不会在执行该方法时被删除。
我做了一些var_dumps
dd($primaryLocation->id);
在本地计算机上,此 return 是正确的 ID,但在服务器上它将
只是 return 空;
但是如果我做
dd($primaryLocation)
结果在本地
PrimaryLocation {#178 ▼
#fillable: array:1 [▶]
#connection: null
#table: null
#primaryKey: "id"
#perPage: 15
+incrementing: true
+timestamps: true
#attributes: array:4 [▶]
#original: array:4 [▶]
#relations: []
#hidden: []
#visible: []
#appends: []
#guarded: array:1 [▶]
#dates: []
#casts: []
#touches: []
#observables: []
#with: []
#morphClass: null
+exists: true
}
在我的服务器上几乎相同...但缺少属性:
PrimaryLocation {#195 ▼
#fillable: array:1 [▶]
#connection: null
#table: null
#primaryKey: "id"
#perPage: 15
+incrementing: true
+timestamps: true
#attributes: []
#original: []
#relations: []
#hidden: []
#visible: []
#appends: []
#guarded: array:1 [▶]
#dates: []
#casts: []
#touches: []
#observables: []
#with: []
#morphClass: null
+exists: false
}
有人知道可能出了什么问题吗?
[更新]
如果我注释掉
// $router->model('PrimaryLocation', 'App\PrimaryLocation');
在我的 ServiceProvider 中,本地行为与服务器上的行为相同。
也许加载 ServiceProvider 有问题?也许有某种缓存?
经历同样的问题后,我发现在生产环境中,storage/framework/compiled.php
不会像在开发模式中那样定期重建。
基本上,您只是 运行在您的生产服务器上安装旧版本的 RoutesServiceProvider.php。
虽然修复很简单。就 运行 php artisan clear-compiled
.
最好也向任何部署脚本添加行。
只需将此行添加到 serviceProvider::boot()
$router->model('attribute', Attribute::class);
我对 Laravel 5 路由模型绑定有疑问 我正在使用以下控制器方法
public function destroy(PrimaryLocation $primaryLocation) {
dd($primaryLocation->id);
$primaryLocation->delete();
return redirect()->back()->with('locationDeleted', true);
}
其中 PrimaryLocation 是一个 Eloquent 模型
我的RouteServiceProvider的启动函数:
public function boot(Router $router)
{
parent::boot($router);
$router->model('user', 'App\User');
$router->model('PrimaryLocation', 'App\PrimaryLocation');
}
在我的 routes.php
Route::delete('deletePrimaryLocation/{PrimaryLocation}',
['as' => 'admin.deletePrimaryLocation', 'uses' => 'LocationsController@destroy']);
此设置在我的本地计算机上运行良好,但是当我将文件部署到我的开发服务器时,模型绑定在某处中断; Location 不会在执行该方法时被删除。
我做了一些var_dumps
dd($primaryLocation->id);
在本地计算机上,此 return 是正确的 ID,但在服务器上它将 只是 return 空;
但是如果我做
dd($primaryLocation)
结果在本地
PrimaryLocation {#178 ▼
#fillable: array:1 [▶]
#connection: null
#table: null
#primaryKey: "id"
#perPage: 15
+incrementing: true
+timestamps: true
#attributes: array:4 [▶]
#original: array:4 [▶]
#relations: []
#hidden: []
#visible: []
#appends: []
#guarded: array:1 [▶]
#dates: []
#casts: []
#touches: []
#observables: []
#with: []
#morphClass: null
+exists: true
}
在我的服务器上几乎相同...但缺少属性:
PrimaryLocation {#195 ▼
#fillable: array:1 [▶]
#connection: null
#table: null
#primaryKey: "id"
#perPage: 15
+incrementing: true
+timestamps: true
#attributes: []
#original: []
#relations: []
#hidden: []
#visible: []
#appends: []
#guarded: array:1 [▶]
#dates: []
#casts: []
#touches: []
#observables: []
#with: []
#morphClass: null
+exists: false
}
有人知道可能出了什么问题吗?
[更新]
如果我注释掉
// $router->model('PrimaryLocation', 'App\PrimaryLocation');
在我的 ServiceProvider 中,本地行为与服务器上的行为相同。 也许加载 ServiceProvider 有问题?也许有某种缓存?
经历同样的问题后,我发现在生产环境中,storage/framework/compiled.php
不会像在开发模式中那样定期重建。
基本上,您只是 运行在您的生产服务器上安装旧版本的 RoutesServiceProvider.php。
虽然修复很简单。就 运行 php artisan clear-compiled
.
最好也向任何部署脚本添加行。
只需将此行添加到 serviceProvider::boot()
$router->model('attribute', Attribute::class);