MorphMap 在 Laravel 5.6 中不工作
MorphMap is not working in Laravel 5.6
我在我的模型中使用多态关系,对于多态关系,我想使用 Moprph 映射。为了实现 morph map 的概念,我编写了自己的服务提供者并在 app.php 中注册了它。除 Morph 贴图外,一切正常。即使使用 AppServiceProvider,Morphmap 也无法正常工作。请看看我的代码
服务提供商
namespace App\Providers;
use Illuminate\Support\ServiceProvider;
use Illuminate\Database\Eloquent\Relations\Relation;
class MorphServiceProvider extends ServiceProvider
{
/**
* Bootstrap services.
*
* @return void
*/
public function boot()
{
Relation::morphMap([
'First' => FirstModel::class,
'Second' => SecondModel::class,
'Third' => ThirdModel::class
]);
}
/**
* Register services.
*
* @return void
*/
public function register()
{
//
}
}
我运行也遇到这种情况。最后我通过 运行 artisan 命令解决了这个问题:
php artisan cache:clear
MorphMap 不工作的原因
未加载新的自定义服务。检查bootstrap/cache/services.php
以查看新的ServiceProvider是否在providers
的数组中
<?php return array (
'providers' =>
array (
0 => 'Illuminate\Auth\AuthServiceProvider',
1 => 'Illuminate\Broadcasting\BroadcastServiceProvider',
2 => 'Illuminate\Bus\BusServiceProvider',
3 => 'Illuminate\Cache\CacheServiceProvider',
4 => 'Illuminate\Foundation\Providers\ConsoleSupportServiceProvider',
5 => 'Illuminate\Cookie\CookieServiceProvider',
6 => 'Illuminate\Database\DatabaseServiceProvider',
7 => 'Illuminate\Encryption\EncryptionServiceProvider',
8 => 'Illuminate\Filesystem\FilesystemServiceProvider',
//...
默认情况下,此文件应在 app.php
更改后自动更新。
在我的情况下,我不小心 运行 之前的命令 php artisan config:cache
。这会阻止 services.php
更新。进一步参考:
为什么缓存配置会阻止 services.php
更新
- 检查
bootstrap/cache/config.php
,看看里面有什么。 providers
是应用程序配置的一部分
检查Illuminate\Foundation\Http\Kernel
受保护的 $bootstrappers = [
\Illuminate\Foundation\Bootstrap\LoadEnvironmentVariables::class,
\Illuminate\Foundation\Bootstrap\LoadConfiguration::class,
\Illuminate\Foundation\Bootstrap\HandleExceptions::class,
\Illuminate\Foundation\Bootstrap\RegisterFacades::class,
\Illuminate\Foundation\Bootstrap\RegisterProviders::class,
\Illuminate\Foundation\Bootstrap\BootProviders::class,
];
- 检查
Illuminate\Foundation\Bootstrap\LoadConfiguration
- 检查
Illuminate\Foundation\Application
、registerConfiguredProviders
最后,我不得不说我对laravel很陌生。如果我犯了一些错误,请告诉我。谢谢。
我在我的模型中使用多态关系,对于多态关系,我想使用 Moprph 映射。为了实现 morph map 的概念,我编写了自己的服务提供者并在 app.php 中注册了它。除 Morph 贴图外,一切正常。即使使用 AppServiceProvider,Morphmap 也无法正常工作。请看看我的代码
服务提供商
namespace App\Providers;
use Illuminate\Support\ServiceProvider;
use Illuminate\Database\Eloquent\Relations\Relation;
class MorphServiceProvider extends ServiceProvider
{
/**
* Bootstrap services.
*
* @return void
*/
public function boot()
{
Relation::morphMap([
'First' => FirstModel::class,
'Second' => SecondModel::class,
'Third' => ThirdModel::class
]);
}
/**
* Register services.
*
* @return void
*/
public function register()
{
//
}
}
我运行也遇到这种情况。最后我通过 运行 artisan 命令解决了这个问题:
php artisan cache:clear
MorphMap 不工作的原因
未加载新的自定义服务。检查bootstrap/cache/services.php
以查看新的ServiceProvider是否在providers
<?php return array (
'providers' =>
array (
0 => 'Illuminate\Auth\AuthServiceProvider',
1 => 'Illuminate\Broadcasting\BroadcastServiceProvider',
2 => 'Illuminate\Bus\BusServiceProvider',
3 => 'Illuminate\Cache\CacheServiceProvider',
4 => 'Illuminate\Foundation\Providers\ConsoleSupportServiceProvider',
5 => 'Illuminate\Cookie\CookieServiceProvider',
6 => 'Illuminate\Database\DatabaseServiceProvider',
7 => 'Illuminate\Encryption\EncryptionServiceProvider',
8 => 'Illuminate\Filesystem\FilesystemServiceProvider',
//...
默认情况下,此文件应在 app.php
更改后自动更新。
在我的情况下,我不小心 运行 之前的命令 php artisan config:cache
。这会阻止 services.php
更新。进一步参考:
为什么缓存配置会阻止 services.php
更新
- 检查
bootstrap/cache/config.php
,看看里面有什么。providers
是应用程序配置的一部分 检查
Illuminate\Foundation\Http\Kernel
受保护的 $bootstrappers = [ \Illuminate\Foundation\Bootstrap\LoadEnvironmentVariables::class, \Illuminate\Foundation\Bootstrap\LoadConfiguration::class, \Illuminate\Foundation\Bootstrap\HandleExceptions::class, \Illuminate\Foundation\Bootstrap\RegisterFacades::class, \Illuminate\Foundation\Bootstrap\RegisterProviders::class, \Illuminate\Foundation\Bootstrap\BootProviders::class, ];
- 检查
Illuminate\Foundation\Bootstrap\LoadConfiguration
- 检查
Illuminate\Foundation\Application
、registerConfiguredProviders
最后,我不得不说我对laravel很陌生。如果我犯了一些错误,请告诉我。谢谢。