Laravel Controller - переменная 'name' для получения 'электронной почты' пользователей - не как метод входа в систему - PullRequest
0 голосов
/ 30 января 2019

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

У меня есть проект, который позволяет мне отправлять баллы лояльности моим клиентам.Я могу ввести их зарегистрированный адрес электронной почты и ввести сумму, затем нажать кнопку «Отправить», и она поступит на их счет для расходов на кофе и т. Д., Что является полностью рабочим процессом.

НО , мне нужно, чтобы мое поле формы принимало адрес электронной почты пользователя ИЛИ или его зарегистрированное имя пользователя ... просто я не могу вспомнить его адрес электронной почты, но могу для ихимя пользователя.

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

Blade / Form

<div class="form-group {{ $errors->has('email') ? ' has-danger' : '' }}">
    <label for="email">{{__('Customers Email or Name')}}</label>
    <input type="email" class="form-control" id="email" name="email" required>
</div>

Контроллер

class MoneyTransferController extends Controller
{
    public function sendMoneyForm(Request $request){
        return view('sendmoney.index');
}

public function sendMoney(Request $request){

    $this->validate($request, [
        'amount'    =>  'required|numeric|between:1,5.00',
        'description'   =>  'required|string',
        'email' =>  'required|email|exists:users,email',
    ]);

    $currency = Currency::find(Auth::user()->currency_id);

    $auth_wallet = Auth::user()->walletByCurrencyId($currency->id);

    if((boolean)$currency == false ){
      flash(__('Failed!'), 'danger');
        return back();
    }

    if ( Auth::user()->account_status == 0 ) {
        flash(__('Try again') , 'info');
         return  back();
    }


    if ($request->email == Auth::user()->email) {
        flash(__('You cannot send points to yourself') , 'danger');
        return  back();
    } 

    if ($request->amount > $auth_wallet->amount) {
        flash(__('You have insufficient points to send').' <strong>Try again!</strong>', 'danger');
        return  back();
    }

    $user = User::where('email', $request->email)->first();







    $receive = Receive::create([
        'user_id'   =>   $user->id,
        'from_id'        => Auth::user()->id,
        'transaction_state_id'  =>  3, // waiting confirmation
        'gross'    =>  $request->amount,
        'currency_id' =>  $currency->id,
        'currency_symbol' =>  $currency->symbol,
        'fee'   =>  $receive_fee,
        'net'   =>  $request->amount - $receive_fee,
        'description'   =>  $request->description,
        'send_id'    =>  0
    ]);

    $send = Send::create([
        'user_id'   =>  Auth::user()->id,
        'to_id'        =>  $user->id,
        'transaction_state_id'  =>  3, // waiting confirmation 
        'gross'    =>  $request->amount,
        'currency_id' =>  $currency->id,
        'currency_symbol' =>  $currency->symbol,
        'fee'   =>  $send_fee,
        'net'   =>  $request->amount - $send_fee,
        'description'   =>  $request->description,
        'receive_id'    =>  $receive->id
    ]);

    $user->RecentActivity()->save($receive->Transactions()->create([
        'user_id' => $receive->user_id,
        'entity_id'   =>  $receive->id,
        'entity_name' =>  Auth::user()->name,
        'transaction_state_id'  =>  3, // waiting confirmation
        'money_flow'    => '+',
        'currency_id' =>  $currency->id,
        'currency_symbol' =>  $currency->symbol,
        'activity_title'    =>  'Payment Received',
        'gross' =>  $receive->gross,
        'fee'   =>  $receive->fee,
        'net'   =>  $receive->net,
    ]));

    Auth::user()->RecentActivity()->save($send->Transactions()->create([
        'user_id' =>  Auth::user()->id,
        'entity_id'   =>  $send->id,
        'entity_name' =>  $user->name,
        'transaction_state_id'  =>  3, // waiting confirmation
        'money_flow'    => '-',
        'currency_id' =>  $currency->id,
        'currency_symbol' =>  $currency->symbol,
        'activity_title'    =>  'Payment Sent',
        'gross' =>  $send->gross,
        'fee'   =>  $send->fee,
        'net'   =>  $send->net
    ]));

    return  redirect(route('home'));

}

public function sendMoneyConfirm(Request $request){
    $this->validate($request, [
        'tid'   => 'required|numeric',
    ]);

    $transaction = Transaction::find($request->tid);

    $currency = Currency::find($transaction->currency_id);

    $auth_wallet = Auth::user()->walletByCurrencyId($currency->id);

    if((boolean)$transaction == false ){
        flash(__('Failed!'), 'danger');
        return back();
    }

    if ( Auth::user()->account_status == 0 ) {
        flash(__('pending') , 'info');
         return  back();
    }

    if(Auth::user()->id != $transaction->user_id ){
        flash(__('Failed!'), 'danger');
        return back();
    }

    $send = Send::find($transaction->transactionable_id);

     if((boolean)$send == false ){
        flash(__('Failed!'), 'danger');
        return back();
    }

    if(Auth::user()->id != $send->user_id ){
        flash(__('Failed!'),'danger');
        return back();
    }

    $receive = Receive::find($send->receive_id);

    if((boolean)$receive == false ){
        flash(__('Failed!'), 'danger');
        return back();
    }

    $user = User::find($receive->user_id);

    $user_wallet = $user->walletByCurrencyId($currency->id);

    if((boolean)$user == false ){
        flash(__('Failed!'), 'danger');
        return back();
    }

    $receive_transaction = transaction::where('transactionable_type', 'App\Models\Receive')->where('user_id', $user->id)->where('transaction_state_id', 3)->where('money_flow', '+')->where('transactionable_id', $receive->id)->first();

    if((boolean)$receive_transaction == false ){
        flash(__('Failed!'), 'danger');
        return back();
    }

    if((double)$auth_wallet->amount < (double)$transaction->net ){
         flash(__('You have insufficient points').' <strong></strong>', 'danger');
        return  back();
    }

    $receive->send_id = $send->id;
    $receive->transaction_state_id = 1;
    $receive->save();

    $send->transaction_state_id = 1;
    $send->save();

    $transaction->transaction_state_id = 1;
    $transaction->balance = (double)$auth_wallet->amount - (double)$transaction->net;
    $transaction->save();

    $receive_transaction->transaction_state_id = 1;
    $receive_transaction->balance =  (double)  $user_wallet->amount + $receive_transaction->net;
    $receive_transaction->save();

    $auth_wallet->amount = (double)$auth_wallet->amount - (double)$transaction->net ;
    $auth_wallet->save();

    $user_wallet->amount =  $user_wallet->amount + $receive_transaction->net ;
    $user_wallet->save();



    return  back();
}

}

Мне просто нужно решение, чтобы, если я введу имя пользователя ' name , 'затем он сравнивает его с зарегистрированным адресом электронной почты пользователя, а затем продолжает обрабатывать его как обычно, как если бы электронное письмо было введено.

Надеюсь, у меня есть смысл ... довольно устал от этого конца!

Спасибо за любую помощь - очень признателен.


Может ли это быть сделано с некоторой логикой, такой как:

$user = User::where('email', $request->email);
if
$user = User::where('name', $request->name);
name =  $request->email

или даже:

$user = User::where('email', $request->email)->first(); 
if (!$user) {
$user = User::where('name', $request->email)->first(); 
}

Обаиз которых до сих пор не работает!owch!

для того, чтобы получить адрес электронной почты из ввода "имя" ... любые идеи, пожалуйста, ????

Ответы [ 2 ]

0 голосов
/ 30 января 2019
  First you need to change the html form email type to text. dont forget to check manually if username or email exist

  <div class="form-group {{ $errors->has('email') ? ' has-danger' : '' }}">
        <label for="email">{{__('Customers Email or Username')}}</label>
        <input type="text" class="form-control" id="email" name="email" required>
    </div>

    public function sendMoney(Request $request)
        {
            $this->validate($request, [
                'amount' => 'required|numeric',
                'email' => 'required|string',
            ]);

        if(filter_var($request->email, FILTER_VALIDATE_EMAIL)) {
            if ($request->email == Auth::user()->email) {
                flash(__('You cannot send points to your own account'), 'danger');
                return back();
            }
 $user = User::where('email', $request->email)->first();
        } else {
            if ($request->email == Auth::user()->username) {
                flash(__('You cannot send points to your own account'), 'danger');
                return back();
            }
 $user = User::where('username', $request->email)->first();
        }
        }
0 голосов
/ 30 января 2019

// Это будет проверять пользователя на основе имени

$user = User::where('name',$request->name)->first() 

// $ user - это набор данных пользователя, поэтому dd ($ user выведет письмо)

dd($user->email)
...