所以假设我在子目录中有2个模型
App\Models\AotherModelFolder\MyModel
App\Models\Custom\Test
我将其作为用户执行操作的模型类型存储在数据库中,
id | user_id | action | model_type | model_id
1 | 1 | deleted| App\Models\AotherModelFolder\MyModel | 1
2 | 1 | updated| App\Models\Custom\Test | 2
我想发布行动和他们执行行动的部分,所以让我们说
{{ __("You :action on :model with an id of :id", [
'action', $activity->action,
'model', $activity->model_type,
'id', $activity->model_id,
]) }}
这将在App \ Models \ AotherModelFolder \ MyModel上删除,ID为1
我试图不显示整个模型,而是将其替换为让我们说My model
我会有多个,所以我可以在数组中播放它们然后从中拉出名字吗?我怎样才能做到这一点?
答案 0 :(得分:0)
我会根据您的fallback_locale
通常en
创建一个语言文件
/resources/lang/en/models.json
并列出所有模型及其缩短方式:
{
"App\Models\AotherModelFolder\MyModel": "My model"
}
如果您想为不同的语言设置不同的名称,请将文件复制到右侧文件夹中进行翻译。
接下来,我将编辑/创建另一个文件,每个文件都针对您要支持的每种语言,例如:
/resources/lang/en/messages.json
{
"action_preformed": "You :action on :model with an id of :id"
}
如果您拥有所有邮件,请将相同的文件复制到例如/resources/lang/es/messages.json
并翻译文本"You :action on :model with an id of :id"
现在在你的代码中你可以使用:
{{ __("messages.action_preformed", [
'action' => $activity->action,
'model' => trans('models.' . $activity->model_type),
'id' => $activity->model_id,
]) }}
如果您真的想要翻译消息,那么您也应该以同样的方式翻译deleted
,updated
等
有关该主题的更多信息:https://laravel.com/docs/5.5/localization
答案 1 :(得分:0)
你可以定义一个关系" morph map"指示Eloquent为每个模型使用自定义名称而不是类名:
use Illuminate\Database\Eloquent\Relations\Relation;
Relation::morphMap([
'posts' => 'App\Post',
'videos' => 'App\Video',
]);
您可以在morphMap
的{{1}}功能中注册boot
,也可以根据需要创建单独的服务提供商。
答案 2 :(得分:0)
好的很简单,你想在某些型号上记录用户操作。
并且您只想显示模型的名称。
例如: 我们在某些型号上有用户更改,例如:App \ User
记录将是:action: delete
model: App\User
id: 43
只显示用户,你可以这样做:
$model = $model; // which is "App\User"
$modelName = class_basename(new $model()); // this will return User
您可以定义变量,例如:该模型中的modelName,
对于App \ User Model,它将是
public $modelName = "User Model";
你可以做到
$model = $model; // which is: "App\User"
$modelName = (new $model())->modelName;
您可以在App \ Model类
中定义静态varpublic static $modelName = "my User Model";
然后你可以这样称呼它:
$model = $model;
$modelName = $model::$modelName;