Как добавить слаг в Cartalyst-Sentinel, добавив имя и фамилию? - PullRequest
0 голосов
/ 31 декабря 2018

Я делаю проект с Laravel.И я использую Cartalyst-Sentinel с ним.Как я могу добавить слаг из first_name + last_name в таблицу пользователей из базы данных

Я добавил слаг для таблицы «роли», но я не знаю, как я могу добавить значения в столбцы «слаг» в таблице «пользователи»добавив имя и фамилию.например: first_name = "JOHN", last_name = "CENA", slug = "JOHN-CENA"

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)
        )
    );

1 Ответ

0 голосов
/ 19 января 2019

Я не уверен, почему вы хотели бы иметь столбец слагов в таблице пользователей в первую очередь, но вы можете установить слаг автоматически при вставке / обновлении пользователя, вы можете использовать События модели Laravel или Наблюдатели Laravel .Интересующее вас событие - это событие saving, которое вызывается непосредственно перед обновлением / созданием пользователя в базе данных.

В качестве альтернативы вы также можете использовать мутаторы Laravel , чтобыесли задано свойство first_name или last_name, свойство slug также обновляется.

Кроме того, вы можете использовать вспомогательный метод Laravel str_slug () .Который может преобразовать строку в слаг.

Ниже приведен пример с наблюдателями:

app / Observers / UserObserver.php

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

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);
    }
}

Теперь везде, где вы делаете что-то вроде:

$user = Sentinel::register([
    'first_name' => 'John',
    'last_name' => 'Cena',
    'email' => 'JohnCena@example.com'
    'password' => 'justanexample'
]);

или

$user->save();

ПользовательСлизняк также будет сохранен.

...