Как добавить слаг в Cartalyst-Sentinel, добавив имя и фамилию?
Я делаю проект с Laravel. И я использую Cartalyst-Sentinel с ним. Как я могу добавить слаг из имя_ фамилии + фамилия в таблице пользователей из базы данных
Я добавил slug для таблицы "role", но не знаю, как добавить значения в столбцы "slug" в таблице "users", добавив 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 ответ
Я не уверен, почему вы хотели бы иметь столбец слагов в таблице пользователей в первую очередь, но вы можете установить слаг автоматически при вставке / обновлении пользователя, вы можете использовать события модели Laravel или наблюдателей Laravel. Интересующее вас событие - это saving
событие, которое вызывается непосредственно перед обновлением / созданием пользователя в базе данных.
В качестве альтернативы вы также можете использовать мутаторы Laravel, чтобы при установке свойства first_name или last_name свойство slug также обновлялось.
Кроме того, вы можете использовать вспомогательный метод Laravel str_slug (). Который может преобразовать строку в слизняк.
Ниже приведен пример с наблюдателями:
Приложение / Наблюдатели /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);
}
}
приложение / Провайдеры /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();
Плагин пользователя также будет сохранен.