首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何通过添加first_name和last_name在Cartalyst-Sentinel中添加slug?

如何通过添加first_name和last_name在Cartalyst-Sentinel中添加slug?
EN

Stack Overflow用户
提问于 2018-12-31 19:07:06
回答 1查看 197关注 0票数 0

我正在和laravel一起做一个项目。我正在使用Cartalyst-Sentinel。如何在数据库的users表中添加来自first_name+last_name的插件

我为"roles“表添加了slug,但我不知道如何通过添加first_name和last_name来在"users”表的"slug“列中添加值。例如: first_name= "JOHN",last_name="CENA",slug="JOHN-CENA“

代码语言:javascript
复制
Schema::create('users', function (Blueprint $table) {
        $table->increments('id');
        $table->string('email');
        $table->string('password');



        $table->string('birthday')->nullable();
        $table->string('gender')->nullable();

        $table->text('permissions')->nullable();
        $table->timestamp('last_login')->nullable();
        $table->string('first_name')->nullable();
        $table->string('last_name')->nullable();
        $table->string('slug');
        $table->timestamps();

        $table->engine = 'InnoDB';
        $table->unique('email');

        $table->unique('slug');


    });

    DB::table('roles')->insert(array(
            array('id'=>1, 'slug'=> 'admin', 'name'=> 'Admin', 'permissions'=> NULL),
            array('id'=>2, 'slug'=> 'user', 'name'=> 'User', 'permissions'=> NULL)
        )
    );
EN

回答 1

Stack Overflow用户

发布于 2019-01-19 08:44:06

我不知道为什么首先要在users表中有一个slug列,但是您可以在插入/更新用户时自动设置slug,您可以使用Laravel model eventsLaravel observers。您感兴趣的事件是saving事件,该事件在数据库上更新/创建用户之前被调用。

或者,也可以使用Laravel mutators,以便在设置first_name或last_name属性时,也会更新slug属性。

此外,您还可以使用Laravel的辅助方法str_slug()。它可以将字符串转换为slug。

下面是一个包含观察者的示例:

app/Observers/UserObserver.php

代码语言:javascript
复制
namespace App\Observers\UserObserver;

use Cartalyst\Sentinel\Users\EloquentUser;

class UserObserver
{
    public function saving(EloquentUser $user)
    {
        $user->slug = str_slug($user->first_name . ' ' . $user->last_name);
    }
}

app/Providers/AppServiceProvider.php

代码语言:javascript
复制
namespace App\Providers;

use Cartalyst\Sentinel\Users\EloquentUser;
use App\Observers\UserObserver;
use Illuminate\Support\ServiceProvider;

class AppServiceProvider extends ServiceProvider
{
    public function boot()
    {
        EloquentUser::observe(UserObserver::class);
    }
}

现在,无论你在哪里做类似这样的事情:

代码语言:javascript
复制
$user = Sentinel::register([
    'first_name' => 'John',
    'last_name' => 'Cena',
    'email' => 'JohnCena@example.com'
    'password' => 'justanexample'
]);

代码语言:javascript
复制
$user->save();

用户段塞也将被保存。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53986732

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档