使用工厂构建模型 Laravel
Building Model Using Factory Laravel
我正在尝试 build/factor 使用 Service Provider 建模,但我似乎缺少一两个步骤来使其正常工作。
下面是我的服务商
class TranslationProvider extends ServiceProvider
{
/**
* Bootstrap the application services.
*
* @return void
*/
public function boot()
{
$this->app->bind(TranslatableModel::class, function($app){
$translation = \App::make(Repository::class);
$model = (new TranslatableModel())->setTranslationRepository($translation);
return $model;
});
}
public function register()
{
}
}
这是我的 TranslatableModel
class TranslatableModel extends Model
{
use Translatable, TranslationTrait;
/** @var \App\Repositories\Translation\Repository $translationRepository */
public $translationRepository;
public function __construct(array $attributes = array())
{
parent::__construct($attributes);
}
public function setTranslationRepository(Repository $repo)
{
$this->translationRepository = $repo;
return $this;
}
}
我知道我正在尝试将存储库注入模型,我知道情况应该相反,但是我的逻辑依赖于这种情况。感谢您的帮助。
谢谢
在模型内部使用 \App::make(Repository::class) 的问题会导致闭包时出现序列化 500 错误。
解决方法是为其创建服务提供者和外观,如下所示。
<?php
namespace App\Facades;
use Illuminate\Support\Facades\Facade;
class Translate extends Facade
{
protected static function getFacadeAccessor()
{
return 'Translate';
}
}
实例化我的 class 使用服务提供商单例如下
<?php
namespace App\Providers;
use App\Repositories\Translation\Repository;
use Illuminate\Support\ServiceProvider;
class TranslationProvider extends ServiceProvider
{
public function register()
{
$this->app->singleton('Translate', function() {
return \App::make(Repository::class);
});
}
}
现在在我的 TransalatableModel 中,我将使用 Facade 引用翻译存储库,如下所示:
@Translate::translateText($this->short_description, 'en', 'ar')[0];
我正在尝试 build/factor 使用 Service Provider 建模,但我似乎缺少一两个步骤来使其正常工作。
下面是我的服务商
class TranslationProvider extends ServiceProvider
{
/**
* Bootstrap the application services.
*
* @return void
*/
public function boot()
{
$this->app->bind(TranslatableModel::class, function($app){
$translation = \App::make(Repository::class);
$model = (new TranslatableModel())->setTranslationRepository($translation);
return $model;
});
}
public function register()
{
}
}
这是我的 TranslatableModel
class TranslatableModel extends Model
{
use Translatable, TranslationTrait;
/** @var \App\Repositories\Translation\Repository $translationRepository */
public $translationRepository;
public function __construct(array $attributes = array())
{
parent::__construct($attributes);
}
public function setTranslationRepository(Repository $repo)
{
$this->translationRepository = $repo;
return $this;
}
}
我知道我正在尝试将存储库注入模型,我知道情况应该相反,但是我的逻辑依赖于这种情况。感谢您的帮助。
谢谢
在模型内部使用 \App::make(Repository::class) 的问题会导致闭包时出现序列化 500 错误。
解决方法是为其创建服务提供者和外观,如下所示。
<?php
namespace App\Facades;
use Illuminate\Support\Facades\Facade;
class Translate extends Facade
{
protected static function getFacadeAccessor()
{
return 'Translate';
}
}
实例化我的 class 使用服务提供商单例如下
<?php
namespace App\Providers;
use App\Repositories\Translation\Repository;
use Illuminate\Support\ServiceProvider;
class TranslationProvider extends ServiceProvider
{
public function register()
{
$this->app->singleton('Translate', function() {
return \App::make(Repository::class);
});
}
}
现在在我的 TransalatableModel 中,我将使用 Facade 引用翻译存储库,如下所示:
@Translate::translateText($this->short_description, 'en', 'ar')[0];