이 답변은 주로 현재의 해결책을보고 원래 질문의 대시로 표시됩니다.
createNew
과 같은 방법으로 모델을 작성하는 대신, 모델과 상호 작용하기 위해 특별히 유형의 클래스를 만드는 경우 관리하기가 더 쉽습니다. 이것을 리포지토리 또는 서비스 또는 무엇이든지 좋아하는 것으로 부를 수는 있지만 서비스로 실행합니다. 깨끗하게 해결 될 수있다 -
// app/Models/User.php
class User ... {
public function setPasswordAttribute($password) {
$this->attributes[ 'password' ] = bcrypt($password);
}
}
그리고 지금 우리가 활성화 이메일을 전송하는 문제가있다 :
// app/Services/UserService.php
<?php namespace App\Services;
use App\Models\User; // or wherever your User model is
class UserService {
public function __construct(User $user) {
$this->user = $user;
}
public function create(array $attributes, $role = null) {
$user = $this->user->create($attributes);
if ($role) {
$user->attachRole($role);
}
return $user;
}
}
이제 우리는 우리가 암호 해시를 잃었다는 사실 다룰 필요 이벤트.
php artisan make:event UserHasRegistered
과는 다음과 같이 보일 것입니다 : 터미널이 실행
// app/Events/UserHasRegistered.php
<?php namespace App\Events;
use App\Models\User;
use Illuminate\Queue\SerializesModels;
class UserHasRegistered extends Event {
use SerializesModels;
public $user;
public function __construct(User $user) {
$this->user = $user;
}
}
지금 우리는 이벤트에 대한 리스너가 필요합니다
php artisan make:listener SendUserWelcomeEmail
을 그리고 이것은 복잡 할 수있다 당신이 원한다면, 내가 여기 누워있는 프로젝트에서 복사/붙여 넣기를 한 것입니다 :
// app/Listeners/SendUserWelcomeEmail.php
<?php namespace App\Listeners;
use App\Events\UserHasRegistered;
use App\Services\NotificationService;
class SendUserWelcomeEmail {
protected $notificationService;
public function __construct(NotificationService $notificationService) {
$this->notify = $notificationService;
}
public function handle(UserHasRegistered $event) {
$this->notify
->byEmail($event->user->email, 'Welcome to the site', 'welcome-user')
->send();
}
}
남은 일은 Laravel에게 방금 만든 이벤트와 수신기가 관련이 있다는 것을 말한 다음 이벤트를 발생시키는 것입니다.
// app/Providers/EventServiceProvider.php
use App\Events\UserHasRegistered;
use App\Listeners\SendUserWelcomeEmail;
class EventServiceProvider extends ServiceProvider {
// find this array near the top, and add this in
protected $listen = [
UserHasRegistered::class => [
SendUserWelcomeEmail::class,
],
];
// ...
}
이제 이벤트를 제기하면됩니다. 모델 관찰자에 관한 다른 게시물을 참조하십시오. 먼저 Event
및 App\Events\UserHasRegistered
을 가져오고 created
방법에서는 Event::fire(new UserHasRegistered($user))
을 호출하면됩니다.
방금이 설정할 수없는'은'Model'의 __construct'? –
'Users' 테이블에 추가되지 않았기 때문에 사용자의 ID를 사용하여 외래 키를 생성합니다. –
사용자가 선택한 항목에 따라 다른 역할을 할당하겠습니까? 항상 특정 역할을 부여 받습니까? – Joe