2017-01-11 10 views
2

Я хочу отправить электронное письмо администратору, а не пользователю, чтобы новый пользователь был запрошен для регистрации. Я попробовал это в контроллереОтправить электронное письмо после регистрации с помощью контроллера или маршрута

<?php 

namespace App\Http\Controllers\Auth; 
use Mail; 
use App\User; 
use Validator; 
use App\Http\Controllers\Controller; 
use Illuminate\Foundation\Auth\RegistersUsers; 
use Illuminate\Http\Request; 
use Jrean\UserVerification\Traits\VerifiesUsers; 
use Jrean\UserVerification\Facades\UserVerification; 


class RegisterController extends Controller 
{ 

    use RegistersUsers; 


    protected $redirectTo = '/regmessage'; 



public function __construct() 
{ 
    $this->middleware('guest'); 
} 

/** 
* Get a validator for an incoming registration request. 
* 
* @param array $data 
* @return \Illuminate\Contracts\Validation\Validator 
*/ 
protected function validator(array $data) 
{ 
    return Validator::make($data, [ 
     'name' => 'required|max:255', 
     'email' => 'required|email|max:255|unique:users', 
     'password' => 'required|min:6|confirmed', 
     'usertype' => 'required', 
    ]); 
} 

/** 
* Create a new user instance after a valid registration. 
* 
* @param array $data 
* @return User 
*/ 
    protected function create(array $data) 
    { 
    //dd($data); 
    return User::create([ 
     'name' => $data['name'], 
     'email' => $data['email'], 
     'password' => bcrypt($data['password']), 
     'usertype' =>$data['usertype'], 
     'status' => 0, 
    ]); 
    $user = array('name' => 'Admin'); 

    Mail::send('emails.reminder', $user, function ($m) { 


     $m->to('[email protected]') 
     ->subject('Confirm email'); 
    }); 
    } 

    /*public function sendEmailReminder(Request $request, $id) 
    { 
    $user = User::findOrFail($id); 

    Mail::send('emails.reminder', ['user' => $user], 
    function ($m) use($user) { 


     $m->to('[email protected]') 
     ->subject('Confirm email'); 
     }); 
    }*/ 

} 

и я также попробовал это в route.php..after делает это маршрут электронной почты посылает, но значения формы регистрации не вставляя в database.what мне нужно делать здесь?

Route::post('/register',function() 
{ 
$data = array('name' => 'Admin'); 

Mail::send('emailMessage', $data, function($message) 
{ 
    $message->to('[email protected]') 
    ->subject('Confirm email'); 
}); 

return view('regmessage'); 
}); 
+0

Есть определенные ошибки, возвращаемые из вашего класса базы данных? –

+0

ошибка не отображается .... если я напишу, что код в маршруте идет по электронной почте, но формирует значения, не вставляя в db ... и если я пишу в контроллере, тогда ничего не происходит, просто перезагружается страница – incorporeal

+0

Я думаю, что вы должны использовать почтовый код до возврат в контроллер. попробуйте один раз. –

ответ

1

Я думаю, что ваш код контроллера необходимо обновить как:

protected function create(array $data) 
{ 
    //dd($data); 
    $user = User::create([ 
     'name' => $data['name'], 
     'email' => $data['email'], 
     'password' => bcrypt($data['password']), 
     'usertype' =>$data['usertype'], 
     'status' => 0, 
    ]); 
    $use = array('name' => 'Admin'); 

    Mail::send('emails.reminder', $use, function ($m) { 

     $m->from('your from email address') 
     $m->to('[email protected]') 
     $m->subject('Confirm email'); 
    }); 
    return $user; 
} 

UPDATE
изменение Make как: Mail::send('emails.reminder', $use, function ($m) use($data){...} и использовать $data['email'].

Надеюсь, что эта работа для вас!

+0

нет! просто перезагрузка страницы не отправляется по электронной почте, данные не вставляются в db. Я попытался очистить кеш и перезапустить php artisan – incorporeal

+0

Просьба указать код 'User model' и что посмотреть, что' 'dd ($ data)' для вас? –

+0

ваш код просто необходим, чтобы редактировать две строки, и это работает сейчас. thnx – incorporeal

1

Хотя я считаю, что, когда вы хотите реагировать на событие модели (в данном случае создание пользователя), лучше всего захватить это событие в методе загрузки модели. Кроме того, не отправляйте электронные письма таким образом, чтобы они блокировали ответ на сервере. Job справляется с этой функциональностью намного лучше.

Во-первых, создать работу, чтобы справиться с этим:

php artisan make:job SendAdminEmailOnUserCreation 

Открыть что новое задание, затем выберите функцию ручки.

public function handle(Illuminate\Mail\Mailer $mail) 
{ 
    $mail->send('emails.reminder', ['name' => 'Admin'], function ($message) { 
     $message->from('[email protected]') 
      ->to('[email protected]') 
      ->subject('A new user has registered'); 
    }); 
} 

Далее, убедитесь, что ваша работа реализует ShouldQueue завод:

class SendAdminEmailOnUserCreation implements ShouldQueue { 

Затем в App\User модели:

public static function boot() 
{ 
    parent::boot(); 

    User::created(function(){ 
     dispatch(new SendAdminEmailOnUserCreation()); 
    }); 
} 

Наконец, убедитесь, что ваша очередь выполняется в порядке для правильного решения проблемы:

php artisan queue:listen 

Примечание

В своем вопросе вы используете emails.reminder, что если что-нибудь подобное emails.auth.reminder оно требует переменной $token. В противном случае, если вы изменили это, убедитесь, что единственная переменная, которую он ищет, - $name, иначе вы получите сообщение об ошибке.

Надеюсь, это поможет.

0

после редактирования моей функции создания в контроллере я получил результат ... мое значение вставляется в db, и электронное письмо отправляет амину, чтобы пользователь был запрошен для регистрации.вот мой код

protected function create(array $data) 
{ 
    //dd($data); 

    $user=User::create([ 
     'name' => $data['name'], 
     'email' => $data['email'], 
     'password' => bcrypt($data['password']), 
     'usertype' =>$data['usertype'], 
     'status' => 0, 
    ]); 
    $use = array('name' => 'Admin'); 

Mail::send('emailMessage', $use, function ($m) { 

$m->to('[email protected]') 
    ->subject('Confirm email'); 
    }); 
return $user; 
} 

спасибо всем за помощь

+0

Точно то, что я говорил вам в последнем комментарии. Рад, что ваш код работает сейчас. :) –

+0

может сказать, как я могу использовать электронную почту в качестве отправителя, который я принимаю, является функцией создания. @jyotimishra – incorporeal

+0

Пожалуйста, проверьте ответ. –

0

TRY:

Mail::send('emailMessage', $use, function ($m) { 
$m->to('To email id') 
    ->subject('Confirm email'); 
$m->from('From email id'); 
    }); 
+0

'to email id' является динамическим. не зафиксировано. принимая вход от пользователей – incorporeal

+0

'email' => $ data ['email'], это письмо? вы отправляете почту после регистрации. –

+0

Нет, это письмо, которое я хочу установить как 'из идентификатора электронной почты'. – incorporeal