代码之家  ›  专栏  ›  技术社区  ›  thirteen4054

未定义路线[/createhotel]。laravel 5.4

  •  0
  • thirteen4054  · 技术社区  · 6 年前

    这是我的索引视图页面。

    @extends('layouts.app')
    
    <!DOCTYPE html>
    <html lang="en">
    <head>
    <link href="css/hotel.css" rel="stylesheet" type="text/css"/>
    
    </head>
    <body>
    
    @section('content')
    <h2>Hotels</h2>
    
    <div class="container-fluid sug-1">
        <div class="ui_column is-12 h1 ui_header sug-1head">{{ $data[0]->city}}&nbsp;
        </div>
    <div style="display:flex; flex-direction: row; justify-content: center; align-items: center">   
    
    @for ($i = 0; $i < 4; $i++)
    
      <div  class= "img__wrap">
      <form method="get" action="/hotel/viewpost.blade.php"> 
        <a href="/hotel/viewpost/{{$data[$i]->id }}"><img class = "img__img" src={{asset($data[$i]->image)}} alt="Logo" style="width:90%;height:90%" ></a>
        <p class = "img__description"> {{$data[$i]->name}} <br> {{$data[$i]->rating}}<br> {{$data[$i]->price}}</p>
      </form>
          </div>
    @endfor
    
     <input class="sug1btn"  type=Button id="allsugbtn" onclick="findHotels();" value="See all"/>
    
    </div>
    
    @endsection
    
    </body>
    </html>
    

    这是我索引的控制器:

    <?php
    
    namespace App\Http\Controllers;
    
    use Illuminate\Http\Request;
    
    class HotelController extends Controller
    {
       public function index()
       {
            $hotelData['data'] = \DB::table('hotels')->get();
            if(count($hotelData) > 0)
            {
                return view("hotel.index",$hotelData);
            }
            else
            {
                return view("hotel.index");
            }
       } 
    
    
    }
    

    我创建了从索引到viewpost的路由,即以下代码:

    @extends('layouts.app')
    
    <!DOCTYPE html>
    <html lang="en">
    <head>
          <link href="css/hotel.css" rel="stylesheet" type="text/css"/>
    
    
    
    </head>
    <body>
    
    @section('content')
    
    <div class="container-fluid sug-1">
        <div class="ui_column is-12 h1 ui_header sug-1head">
        </div>
    <div style="display:flex; flex-direction: row; justify-content: left; align-items: left">   
    
     <div class="card">
      <img src={{asset($data->image)}} alt="Image" style="width:100%">
      <div class="container">
        <h4><b>{{$data->name}}</b></h4> 
        <p>Rating: {{$data->rating}}<br>Price: {{$data->price}}</p> 
      </div>
    </div>
    
     <button href="{{ route('/createhotel') }}" type="button" class="btn btn-default">Left</button>
    </div>
    
    <h2>Reviews</h2>
    
    @foreach ($reviews as $review)
        <p>{{ $review->user_name }}<br>{{ $review->description }}</p>
        <br><br><br>
    
    @endforeach
    
    @endsection
    
    </body>
    </html>
    

    这是我的viewpost和createhotel的HotelPostController:

    <?php
    
    namespace App\Http\Controllers;
    
    use Illuminate\Http\Request;
    
    class HotelPostsController extends Controller
    {
        public function show($hotelviewid)
       {
            $imagedata['data'] = \DB::table('hotels')->select('id','image','name','city','rating','price' )->where('id', $hotelviewid)->first();
    
            $reviewdata['reviews'] = \DB::table('hotel_reviews')->where('hotel_id', $hotelviewid)->get();
    
    
            return view("hotel.viewpost",$imagedata,$reviewdata);
       }
    
       public function createhotel()
       {
            return view("hotel.createhotel");
       }
    }
    

    这是web。php路由文件:

    Route::get('/', 'HotelController@index');
    Route::get('/hotel', 'HotelController@index');
    Route::get('/hotel/viewpost/{hotelviewid}', 'HotelPostsController@show');
    Route::get('travelapp.me/hotel/viewpost/createhotel, 'HotelPostsController@createhotel');
    

    我面临的问题是,在视图文件夹中,我创建了一个名为hotel的子文件夹,它有3个文件index、viewpost和createhotel。第一个页面是索引,当用户单击某篇文章时,它会在viewpost中打开。现在,我想创建一个按钮,转到第三页,即creathotel。我在控制器中创建了一个函数,还添加了路由,但它给出了未定义路由的错误。

    4 回复  |  直到 6 年前
        1
  •  0
  •   BetaDev    6 年前

    改变

    Route::get('travelapp.me/hotel/viewpost/createhotel, 'HotelPostsController@createhotel');
    

    Route::get('/hotel/viewpost/createhotel, 'HotelPostsController@createhotel');
    

    以及转到创建页面的按钮:

    <a href="{{url('/hotel/viewpost/createhotel')}}">Create Hotel</a>
    

    方法 url() 将自动为您提供完整的URL。您只需要从根目录创建URL( / )您不必附加完整域。

    你可以这样做(只是一个例子)

    Route::get('/hotel-create, 'HotelPostsController@createhotel');
    

    和按钮转到该页

     <a href="{{url('/hotel-create')}}">Create Hotel</a>
    

    在本例中,当您单击Create Hotel link时,将调用该方法 createhotel() 属于 HotelPostsController 控制器。
    更新时间:
    问题
    在控制器中,您没有向视图传递任何数据

    public function createhotel()
    {
         return view("hotel.createhotel");
    }
    

    那么,如何访问名为$data的变量

    <img src={{asset($data->image)}} alt="Image" style="width:100%">
    

    解决方案:(将数据传递到模板)

    public function createhotel()
    {
        $imagedata['data'] = \DB::table('hotels')->select('id','image','name','city','rating','price' )->where('id', $hotelviewid)->first();
    
         $reviewdata['reviews'] = \DB::table('hotel_reviews')->where('hotel_id', $hotelviewid)->get();
         return view("hotel.createhotel",$imagedata,$reviewdata);
     }
    
        2
  •  0
  •   parker_codes    6 年前

    这个 route() helper方法接受名称作为参数,而不是实际的路由。

    route('create') 是你想要的。要使用url, url('/hotel/create')

        3
  •  0
  •   Kuldeep Mishra    6 年前
    Route::get('/hotel/create', 'HotelReviewController@create')->name('create');
    

    将其更改为

     Route::get('/hotel/create', 'HotelReviewController@create')->name('createhotel');
    

    我希望它能起作用。您正在使用命名路由,请阅读此处有关路由的内容。 https://laravel.com/docs/5.6/routing#named-routes

        4
  •  -1
  •   Mehdi Heydari    6 年前

    在您的索引操作值中填充了一个查看刀片页,它似乎是错误的

    <form method="get" action="/hotel/viewpost.blade.php">

    在viewpost中,您需要将{{route(“/create”)}}}更改为{!!route(“create”)!!}