在一个控制器中创建视图并将数据存储在其他控制器Laravel中

发布于 2025-02-11 11:21:15 字数 8845 浏览 1 评论 0原文

我是Laravel的新手,我正在尝试存储一种表格。我使用房屋控制器创建了视图,但是现在我想使用预订控制器将数据存储在视图中。但是,当我单击按钮时,什么都不会发生。

我的问题是,是否有可能使用一个控制器进行视图并与另一个控制器一起存储,或者可能还有其他解决方案。

我也想使用房屋的ID存储。我如何在另一个控制器中得到它?

Web路线

<?php

use Illuminate\Support\Facades\Route;

/*
|--------------------------------------------------------------------------
| Web Routes
|--------------------------------------------------------------------------
|
| Here is where you can register web routes for your application. These
| routes are loaded by the RouteServiceProvider within a group which
| contains the "web" middleware group. Now create something great!
|
*/

Route::get('/', [\App\Http\Controllers\HouseController::class, 'index']);
Route::get('house/{house}', [\App\Http\Controllers\HouseController::class, 'show']);

Route::post('house/{house}', [\App\Http\Controllers\BookingController::class, 'store']);

Route::get('rental', [\App\Http\Controllers\HouseController::class, 'getUserHouses']);

Route::get('rental/new', [\App\Http\Controllers\HouseController::class, 'create']);
Route::post('rental/new', [\App\Http\Controllers\HouseController::class, 'store']);


Route::get('rental/edit/{house}', [\App\Http\Controllers\HouseController::class, 'edit']);
Route::put('rental/edit/{house}', [\App\Http\Controllers\HouseController::class, 'update']);

Auth::routes();

预订控制器

<?php

namespace App\Http\Controllers;

use App\Models\Booking;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;

class BookingController extends Controller
{
    /**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function index()
    {
        // 
    }

    /**
     * Show the form for creating a new resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function create()
    {
        //
    }

    /**
     * Store a newly created resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return \Illuminate\Http\Response
     */
    public function store(Request $request)
    {
        $newBooking = Booking::create([
            'user_id' => Auth::id(),
            'house_id' => $request->id,
            'begin' => $request->begin,
            'end' => $request->end,
            'status' => 0
        ]);
        return redirect('/');
    }

    /**
     * Display the specified resource.
     *
     * @param  \App\Models\Booking  $booking
     * @return \Illuminate\Http\Response
     */
    public function show(Booking $booking)
    {
        //
    }

    /**
     * Show the form for editing the specified resource.
     *
     * @param  \App\Models\Booking  $booking
     * @return \Illuminate\Http\Response
     */
    public function edit(Booking $booking)
    {
        //
    }

    /**
     * Update the specified resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \App\Models\Booking  $booking
     * @return \Illuminate\Http\Response
     */
    public function update(Request $request, Booking $booking)
    {
        //
    }

    /**
     * Remove the specified resource from storage.
     *
     * @param  \App\Models\Booking  $booking
     * @return \Illuminate\Http\Response
     */
    public function destroy(Booking $booking)
    {
        //
    }
}

房屋控制器

<?php

namespace App\Http\Controllers;

use App\Models\house;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use App\Helper\Imageable;
use DB;

class HouseController extends Controller
{
    /**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function index()
    {
        $houses = House::all();
        return view('/home', [
            'houses' => $houses
        ]);
    }

    /**
     * Display a listing of the houses the owner has
     *
     * @return \Illuminate\Http\Response
     */
    public function getUserHouses()
    {

        $houses = DB::table('houses')
            ->where('user_id', '=', Auth::id())
            ->get();

        return view('/rental/rental', [
            'houses' => $houses
        ]);
    }

    /**
     * Show the form for creating a new resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function create()
    {
        return view('rental/new');
    }

    /**
     * Store a newly created resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return \Illuminate\Http\Response
     */
    public function store(Request $request)
    {

        $path = Imageable::storeMedia($request);
        $request->online === 'on' ? $online = 1 : $online = 0;

        $newHouse = House::create([
            'title' => $request->title,
            'price_per_night' => $request->price,
            'summary' => $request->summary,
            'place' => $request->place,
            'country' => $request->country,
            'user_id' => Auth::id(),
            'online' => $online,
            'image' => $path,
        ]);

        return redirect('rental');
    }

    /**
     * Display the specified resource.
     *
     * @param  \App\Models\house  $house
     * @return \Illuminate\Http\Response
     */
    public function show(house $house)
    {
        return view(
            '/house',
            [
                'house' => $house
            ]
        );
    }

    /**
     * Show the form for editing the specified resource.
     *
     * @param  \App\Models\house  $house
     * @return \Illuminate\Http\Response
     */
    public function edit(house $house)
    {
        return view(
            'rental/edit',
            [
                'house' => $house
            ]
        );
    }

    /**
     * Update the specified resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \App\Models\house  $house
     * @return \Illuminate\Http\Response
     */
    public function update(Request $request, house $house)
    {

        $path = Imageable::storeMedia($request);
        $request->online === 'on' ? $online = 1 : $online = 0;

        $house->update([
            'title' => $request->title,
            'price_per_night' => $request->price,
            'summary' => $request->summary,
            'place' => $request->place,
            'country' => $request->country,
            'online' => $online,
            'image' => $path,
        ]);
        return redirect('rental/edit/' . $house->id);
    }

    /**
     * Remove the specified resource from storage.
     *
     * @param  \App\Models\house  $house
     * @return \Illuminate\Http\Response
     */
    public function destroy(house $house)
    {
        //
    }
}

View

@extends('layouts.app')

@section('content')
    <div class="container">


        <div class="row">
            <div class="col-12">
                <h1 class="display-one ">{{ $house->title }}</h1>
                <p class=".text-light">{{ $house->place }}, {{ $house->country }}</p>
            </div>
        </div>
        <div class="row mt-5">
            <div class="col-sm-6">
                <img src="{{ asset("img/houses/$house->image") }}" alt="{{ $house->title }}" class="img-fluid" />
            </div>
            <div class="col-sm-6">
                <div class="form-group">
                    <label for="exampleFormControlSelect1">Kies een datum en reserveer direct</label>

                    <form method="POST" action="">
                        @csrf

                        <input type="date" name="begin">
                        <input type="date" name="end">

                        <div class="col-md-12 bg-light mt-3">
                            <button type="button" class="btn btn-warning ml-2">Vraag aan</button>
                        </div>

                    </form>

                </div>
            </div>
        </div>

        <div class="row mt-3">
            <div class="col-sm-6">
                <p class="display-one ">{{ $house->summary }}</p>
            </div>
            <div class="col-sm-6">
                <h2 class="display-one ">Aangeboden door</h2>
                <p>Prijs per nacht &euro;{{ $house->price_per_night }}</p>
            </div>
        </div>

    </div>
@endsection

I'm new to Laravel and I'm trying to store a form. I created the view with the House controller but now I want to store the data in the view with the Booking controller. But when I click the button nothing happens.

My question is if it is possible to make a view with one controller and store it with another controller or maybe there is an other solution.

I also want to use the id of the house to store. How do I get that in the other controller as well?

Web Route

<?php

use Illuminate\Support\Facades\Route;

/*
|--------------------------------------------------------------------------
| Web Routes
|--------------------------------------------------------------------------
|
| Here is where you can register web routes for your application. These
| routes are loaded by the RouteServiceProvider within a group which
| contains the "web" middleware group. Now create something great!
|
*/

Route::get('/', [\App\Http\Controllers\HouseController::class, 'index']);
Route::get('house/{house}', [\App\Http\Controllers\HouseController::class, 'show']);

Route::post('house/{house}', [\App\Http\Controllers\BookingController::class, 'store']);

Route::get('rental', [\App\Http\Controllers\HouseController::class, 'getUserHouses']);

Route::get('rental/new', [\App\Http\Controllers\HouseController::class, 'create']);
Route::post('rental/new', [\App\Http\Controllers\HouseController::class, 'store']);


Route::get('rental/edit/{house}', [\App\Http\Controllers\HouseController::class, 'edit']);
Route::put('rental/edit/{house}', [\App\Http\Controllers\HouseController::class, 'update']);

Auth::routes();

Booking controller

<?php

namespace App\Http\Controllers;

use App\Models\Booking;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;

class BookingController extends Controller
{
    /**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function index()
    {
        // 
    }

    /**
     * Show the form for creating a new resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function create()
    {
        //
    }

    /**
     * Store a newly created resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return \Illuminate\Http\Response
     */
    public function store(Request $request)
    {
        $newBooking = Booking::create([
            'user_id' => Auth::id(),
            'house_id' => $request->id,
            'begin' => $request->begin,
            'end' => $request->end,
            'status' => 0
        ]);
        return redirect('/');
    }

    /**
     * Display the specified resource.
     *
     * @param  \App\Models\Booking  $booking
     * @return \Illuminate\Http\Response
     */
    public function show(Booking $booking)
    {
        //
    }

    /**
     * Show the form for editing the specified resource.
     *
     * @param  \App\Models\Booking  $booking
     * @return \Illuminate\Http\Response
     */
    public function edit(Booking $booking)
    {
        //
    }

    /**
     * Update the specified resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \App\Models\Booking  $booking
     * @return \Illuminate\Http\Response
     */
    public function update(Request $request, Booking $booking)
    {
        //
    }

    /**
     * Remove the specified resource from storage.
     *
     * @param  \App\Models\Booking  $booking
     * @return \Illuminate\Http\Response
     */
    public function destroy(Booking $booking)
    {
        //
    }
}

House controller

<?php

namespace App\Http\Controllers;

use App\Models\house;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use App\Helper\Imageable;
use DB;

class HouseController extends Controller
{
    /**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function index()
    {
        $houses = House::all();
        return view('/home', [
            'houses' => $houses
        ]);
    }

    /**
     * Display a listing of the houses the owner has
     *
     * @return \Illuminate\Http\Response
     */
    public function getUserHouses()
    {

        $houses = DB::table('houses')
            ->where('user_id', '=', Auth::id())
            ->get();

        return view('/rental/rental', [
            'houses' => $houses
        ]);
    }

    /**
     * Show the form for creating a new resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function create()
    {
        return view('rental/new');
    }

    /**
     * Store a newly created resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return \Illuminate\Http\Response
     */
    public function store(Request $request)
    {

        $path = Imageable::storeMedia($request);
        $request->online === 'on' ? $online = 1 : $online = 0;

        $newHouse = House::create([
            'title' => $request->title,
            'price_per_night' => $request->price,
            'summary' => $request->summary,
            'place' => $request->place,
            'country' => $request->country,
            'user_id' => Auth::id(),
            'online' => $online,
            'image' => $path,
        ]);

        return redirect('rental');
    }

    /**
     * Display the specified resource.
     *
     * @param  \App\Models\house  $house
     * @return \Illuminate\Http\Response
     */
    public function show(house $house)
    {
        return view(
            '/house',
            [
                'house' => $house
            ]
        );
    }

    /**
     * Show the form for editing the specified resource.
     *
     * @param  \App\Models\house  $house
     * @return \Illuminate\Http\Response
     */
    public function edit(house $house)
    {
        return view(
            'rental/edit',
            [
                'house' => $house
            ]
        );
    }

    /**
     * Update the specified resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \App\Models\house  $house
     * @return \Illuminate\Http\Response
     */
    public function update(Request $request, house $house)
    {

        $path = Imageable::storeMedia($request);
        $request->online === 'on' ? $online = 1 : $online = 0;

        $house->update([
            'title' => $request->title,
            'price_per_night' => $request->price,
            'summary' => $request->summary,
            'place' => $request->place,
            'country' => $request->country,
            'online' => $online,
            'image' => $path,
        ]);
        return redirect('rental/edit/' . $house->id);
    }

    /**
     * Remove the specified resource from storage.
     *
     * @param  \App\Models\house  $house
     * @return \Illuminate\Http\Response
     */
    public function destroy(house $house)
    {
        //
    }
}

View

@extends('layouts.app')

@section('content')
    <div class="container">


        <div class="row">
            <div class="col-12">
                <h1 class="display-one ">{{ $house->title }}</h1>
                <p class=".text-light">{{ $house->place }}, {{ $house->country }}</p>
            </div>
        </div>
        <div class="row mt-5">
            <div class="col-sm-6">
                <img src="{{ asset("img/houses/$house->image") }}" alt="{{ $house->title }}" class="img-fluid" />
            </div>
            <div class="col-sm-6">
                <div class="form-group">
                    <label for="exampleFormControlSelect1">Kies een datum en reserveer direct</label>

                    <form method="POST" action="">
                        @csrf

                        <input type="date" name="begin">
                        <input type="date" name="end">

                        <div class="col-md-12 bg-light mt-3">
                            <button type="button" class="btn btn-warning ml-2">Vraag aan</button>
                        </div>

                    </form>

                </div>
            </div>
        </div>

        <div class="row mt-3">
            <div class="col-sm-6">
                <p class="display-one ">{{ $house->summary }}</p>
            </div>
            <div class="col-sm-6">
                <h2 class="display-one ">Aangeboden door</h2>
                <p>Prijs per nacht €{{ $house->price_per_night }}</p>
            </div>
        </div>

    </div>
@endsection

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

旧故 2025-02-18 11:21:15

首先,当您单击表单提交按钮时,什么都不会发生“ 。您可以使用Laravel做任何您想做的事情。如果您希望您的表格点击另一个控制器方法,则可以在表单标签中简单地指定它。像这样:

想象一下,这是由housecontoller呈现的视图中的一种形式

<form method="POST" action="{{ url('/save/from/booking/controller') }}">
      // ....
</form>

,现在在housecontroller呈现的视图内进行表单提交,您实际上会遇到一条正在预订controller响应的路线。这是您的路线被形式击中

Route::post('/save/from/booking/controller', [BookingController::class, 'store']);

First of all, nothing happens when you click the form submit button because it is currently type="button" and in order this button to play role of submission button it must be type="submit". You can do whatever you want with Laravel. If you want your form to hit another controller method you can simply specify that in your form tag. Like so:

Imagine this is a form inside a view that is rendered by HouseController

<form method="POST" action="{{ url('/save/from/booking/controller') }}">
      // ....
</form>

And now on form submission inside a view that is rendered by HouseController, you will actually hit a route that is BookingController responsive for. And here is your route that is being hit by the form

Route::post('/save/from/booking/controller', [BookingController::class, 'store']);
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文