Как получить свойство необъекта? - PullRequest
0 голосов
/ 28 сентября 2019

моя реферальная система работает отлично, но я хотел бы указать имя, имя пользователя или адрес электронной почты реферала на странице html Пример: {$ username}.На моем контроллере у меня в данный момент работает «перенаправление», но если я поставлю {$ username}, он вернет «неопределенную переменную», но если я изменю ее на «View», {$ username} работает, но регистрация выполняется с «admin»как указано по умолчанию.

Мой контроллер:

    <?php

namespace App\Http\Controllers;
use App\User;
use Illuminate\Http\Request;

class RefController extends Controller
{
    public function index( $username )
     {
    $user = User::where( 'username', $username )->first();

    return ( is_null( $user ) )
        ? redirect( '/' )
        : redirect( '/register' )->withCookie( cookie()->forever( 'referrer_id', $user->id ) );
     }
}

Маршруты:

Route::get('/user/{username}', 'RefController@index' );

Обновлено

Мой RegisterController:

 protected function create(array $data) {
    if($data['gender']=='male'){

        $avatar_path = 'boy.png';
    }
    else
        { 
            $avatar_path = 'girl.png';
        }
        $referrer = User::find( Cookie::get( 'referrer_id' ) );

        return User::create([
            'name' => $data['name'],
            'username' => $data['username'],
            'avatar' => $avatar_path,
            'gender' => $data['gender'],
            'email' => $data['email'],
            'passaport' => $data['passaport'],
            'country' => $data['country'],
            'city' => $data['city'],
            'state' => $data['state'],
            'address' => $data['address'],
            'postcode' => $data['postcode'],
            'password' => Hash::make($data['password']),
            'referrer_id' => (is_null($referrer )) ? 1 : $referrer->id,
        ]);

Обновлено

Мои миграции add_Ref_to_user_table:

    <?php

use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;

class AddReferrerToUsersTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::table('users', function (Blueprint $table) 
        {
                $table->integer('referrer_id')->unsigned()->default(1)->after('id');
                $table->foreign('referrer_id')->references('id')->on('users');
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::table('users', function (Blueprint $table)
         {
                $table->dropForeign(['referrer_id']);
                $table->dropColumn( 'referrer_id' );
        });
    }
}

И код, который возвращает ошибку, таков:

{{ Auth::user()->name }}

Ответы [ 2 ]

1 голос
/ 28 сентября 2019

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

Route::get('/user/{username}', 'RefController@index' )->middleware('auth');

Попробуйте изменить код в вашем контроллере следующим образом:

return ( is_null( $user ) )
        ? redirect( '/' )
        : view( 'auth.register', compact( 'referrer_id', 'user' ) );

В представлении auth.register попытайтесь получить {{ $user->name }} вместо {{ Auth::user()->name }}.

1 голос
/ 28 сентября 2019

Поскольку это реферальная система, пользователь должен получить 404 для вставки несуществующего реферала в URL

Использовать firstOrFail

public function index($username)
{
    $user = User::where('username', $username)->firstOrFail();
    return view('auth.register')->with([
        'referrer_id' => $user->id,
        'username' => $username
    ]);
}

, затем отобразить имя пользователя впосмотреть так

{{ $username }}

Предполагая, что у вас есть столбец имени в таблице базы данных

Schema::create('users', function (Blueprint $table) {
    $table->bigIncrements('id');
    $table->string('name'); // Must have this
    $table->string('username')->unique(); // Must have this unique
    $table->string('email')->unique();
    $table->timestamp('email_verified_at')->nullable();
    $table->string('password');
    $table->rememberToken();
    $table->timestamps();
});

Обновление

Заменить этот код

'referrer_id' => (is_null($referrer )) ? 1 : $referrer->id,

По фактическому целому числу, хранящемуся в Cookie

'referrer_id' => $referrer,
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...