передача идентификатора при загрузке формы laravel с блейда (исправлено) - PullRequest
0 голосов
/ 18 января 2020

Я создаю адресную книгу в php, используя laravel. У меня есть две таблицы, контакт и адрес. Они связаны в формате oneToMany с каждым адресом, имеющим столбец contact_id

Я пытаюсь создать адрес с помощью основного идентификатора контакта, но не могу получить основной идентификатор контакта для передачи в форму для использовать при создании.

Я пробовал так много вещей из разных постов, но ничего не получается ...

// Blade Routes
Route::get('/search', 'ContactController@search')->name('contacts.search');
Route::get('/createAddress', 'ContactController@createAddress');
// Route::post('/storeAddress/{id}', 'AddressController@store')->name('storeAddress');
// Route::get('/show', 'ContactController@show')->name('contacts.show');
Route::get('/edit', 'ContactController@edit')->name('contacts.edit');

// get id for address function
// Route::get('createAddress/{id}', ['as'=>'id','uses'=>'AddressController@store'])->name('contacts.createAddress');
// Route::get('/map', 'ContactController@map')->name('map');

// MySQL data routes
Route::resource('contacts', 'ContactController');
Route::resource('addresses', 'AddressController');

вызов формы из createAddress

        {{ Form::model($contact, ['route'=>['addresses.store', $contact->id], 'method'=>'POST']) }}
        @csrf
        @include('contacts.form_address')
      {{ form::close() }}

Контроллер контактов

public function createAddress (Contact $contact)
{
    return view('contacts.createAddress')->with('contact', $contact);
}

Контроллер адресов

    public function store(Request $request)
    {
        dump($request->toArray());
        // dd($request->id);
        $data = [
            'number'    => $request->number,
            'street'    => $request->street,
            'city'      => $request->city,
            'state'     => $request->state,
            'zip'       => $request->zip,
            'type'      => $request->type,
            // 'contact-id'=> $id
        ];
        $request->validate([
            'number'    =>'integer',
            'street'    =>'required|string|max:255',
            'city'      =>'required|string|max:255',
            'state'     =>'string|max:255',
            'zip'       =>'integer',
            'type'      =>'string|max:255',
            // 'contact-id'=>'required|integer'
            ]);
            dump($data); 
        Address::create($request->all());
        return redirect()->route('contacts.show')->with('contact', $contact);
    }

Это код из index.blade. php из папки контактов.

@foreach ($contacts as $key => $value)
                <tr>
                    {{--  Need to add in sort functions for each catagory --}}
                    <td>{{$value->firstName}}</td>
                    <td>{{$value->lastName}}</td>
                    <td>{{$value->email}}</td>
                    <td>{{$value->phone}}</td>
                    <td>{{$value->birthday}}</td>
                    <td>
                        <form action="{{ route('contacts.destroy', $value->id) }}" method="post">
                            <a class="btn btn-sm btn-success" href="{{ route('contacts.show', $value->id)}}">Show</a>
                            <a class="btn btn-sm btn-warning" href="{{ route('contacts.edit', $value->id)}}">Edit</a>
                            <a class="btn btn-sm btn-second" href="{{ route('contacts.createAddress', $value->id)}}">Add Address</a>
                            {{-- @crsf --}}
                            @method('DELETE')
                            <button type="submit" class="btn btn-sm btn-danger">Delete</button>
                        </form>
                    </td>
                </tr>
@endforeach 

Спасибо за помощь, вот как я решил проблему. Это была комбинация ответов, которые я получил.

Ответ:

Маршруты

Route::post('/storeAddress/{contact_id}', 'AddressController@store')->name('addresses.store');
Route::get('/search', 'ContactController@search')->name('contacts.search');

Контроллер контактов

    public function createAddress (Request $request)
    {
        // dump($request->toArray());
        // dump($request->contact_id);
        $contact_id = $request->contact_id;
        return view('contacts.createAddress')->with('contact_id', $contact_id);
    }

Адрес контроллера

    public function store(Request $request)
    {
        $request->validate([
            'number'    =>'integer',
            'street'    =>'required|string|max:255',
            'city'      =>'required|string|max:255',
            'state'     =>'string|max:255',
            'zip'       =>'integer',
            'type'      =>'string|max:255',
            'contact_id'=>'required|integer'
            ]); 
        Address::create($request->all());

        $contact = Contact::find($request->contact_id);
        return view('contacts.details',compact('contact'));
    }

А на index.blade. php в папке контактов я изменил вызов для createAddress на

<a class="btn btn-sm btn-second" href="{{ route('contacts.createAddress', ['contact_id' => $value->id])}}">Add Address</a>
...