Получить данные с URL в laravel - PullRequest
0 голосов
/ 26 февраля 2020

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

Столбец, который генерирует реферальные ссылки:

        <td>{{ route('refs.user',['name' => $referralCategory->name,'id'=>$referralCategory->id]) }}</td>

web. php

Route::get('refs/{name}/{id}','ReferralCategoryController@refs')->name('refs.user');

И функция, которая перенаправляет на страницу регистрации

public function refs($name = null,$id = null){
        //dd($name);
        if(!$id){
            return redirect(route('login'));
        }
        else{

            if($id){
                $refCategory = ReferralCategory::where('id', $id)->first();
                ReferralCategory::where('id', $id)->update([
                    'referral_visits' => $refCategory->referral_visits + 1
                ]);
            }
            return redirect()->route('register', ['name' => $name]);

        }
        if(Cookie::get('id')){
            return(route('register'));
        }
        return response(route('register'))
        ->cookie('id', $id, 60*24*30*12)
        ->cookie('name',$name, 60*24*30*12);
    }

Контроллер регистра:

Route::get('register/{name}','Auth\RegisterController@register_ref')->name('register_ref.cat');
<?php

    namespace App\Http\Controllers\Auth;

    use App\User;
    use App\Http\Controllers\Controller;
    use Illuminate\Support\Facades\Validator;
    use Illuminate\Foundation\Auth\RegistersUsers;
    use Illuminate\Http\Request;

    class RegisterController extends Controller
    {
        /*
        |--------------------------------------------------------------------------
        | Register Controller
        |--------------------------------------------------------------------------
        |
        | This controller handles the registration of new users as well as their
        | validation and creation. By default this controller uses a trait to
        | provide this functionality without requiring any additional code.
        |
        */

        use RegistersUsers;

        /**
         * Where to redirect users after registration.
         *
         * @var string
         */
        protected $redirectTo = '/home';

        /**
         * Create a new controller instance.
         *
         * @return void
         */
        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|string|max:255',
                'email' => 'required|string|email|max:255|unique:users',
                'password' => 'required|string|min:6|confirmed',
                'referred_by' => 'string|max:20',
            ]);
        }

        public function register_ref( $name = null){


            return redirect()->route('register', ['name' => $name]);


        }

        /**
         * Create a new user instance after a valid registration.
         *


   * @param  array  $data
     * @return \App\User
     */
    protected function create(array $data)
    {       


            return User::create(    [

                'name' => $data['name'],
                'email' => $data['email'],
                'password' => bcrypt($data['password']),
                'referred_by' => $data['referred_by'],

                ]);


    }


}

Ответы [ 2 ]

1 голос
/ 26 февраля 2020

Переменные, которые вы проходите по маршруту, можно вызывать прямо в методе:

public function helloWorld($variableFromRoute) { }

Лучше : если вы хотите зарегистрировать пользователя, вам следует работать с постом http request.

<form method="post" action="/user/register">
  <input type="text" name="username">
  <input type="password" name="pw">
  <input type="password" name="pw_repeated">
  <input type="submit" name="submit" value="Register">
</form>

public function register(Request $request) {
  // validate
  // create record
  // redirect
}

Best : ... Или просто используйте laravel систему аутентификации.

Приветствия,

Niklas

0 голосов
/ 26 февраля 2020

Давайте посмотрим на этот код.

public function refs($name = null,$id = null){
    // IF THIS WERE EMPTY IT WOULDN'T MATCH THE ROUTE
    if(!$id){
        return redirect(route('login'));
    }
    else{
        // WHY DO YOU CHECK THIS AGAIN?
        if($id){
            $refCategory = ReferralCategory::where('id', $id)->first();
            // WHY DO ANOTHER LOOKUP HERE?
            ReferralCategory::where('id', $id)->update([
                'referral_visits' => $refCategory->referral_visits + 1
            ]);
        }
        return redirect()->route('register', ['name' => $name]);

    }
    // BOTH BRANCHES HAVE RETURNED, THIS CODE IS NEVER EXECUTED
    if(Cookie::get('id')){
        return(route('register'));
    }
    return response(route('register'))
    ->cookie('id', $id, 60*24*30*12)
    ->cookie('name',$name, 60*24*30*12);
}

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

public function refs($name, ReferralCategory $id)
{
    $id->referral_visits += 1;
    $id->save();
    return redirect()
        ->route("register", ["name"=>$name])
        ->with("category", $id->id);
}

Вот и все. $id автоматически преобразуется в экземпляр ReferralCategory; механизм маршрутизации вернет 404, если это не так. После обновления экземпляра вы можете перенаправить с данными сеанса с помощью метода with().

С вашей точки зрения, вы можете получить к нему доступ с помощью помощника session(), например:

<p>Passed category ID {{ session("category") }}.</p>

Помимо этого, я не могу сказать много. Вы не объяснили, что будет дальше. Маршрут «регистрации» по какой-то причине не делает ничего, кроме перенаправления на другой маршрут, о котором вы нам не сказали.


Еще одно замечание:

'password' => bcrypt($data['password']),

Вы почти наверняка делаете что-то не так здесь. Laravel имеет надежную и проверенную систему аутентификации . Используйте это!

...