【问题标题】:Route [/createhotel] not defined. laravel 5.4路线 [/createhotel] 未定义。拉拉维尔 5.4
【发布时间】:2018-10-14 23:09:56
【问题描述】:

这是我的索引视图页面。

@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');

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

【问题讨论】:

  • 你已经发布了所有那些已经工作并且没有任何问题的代码,但是你没有发布HotelReviewController的代码......你写的打开的链接是什么创建页面?
  • 我已经删除了HotelReviewController 部分,现在情况是我在viewpost 页面上。然后点击一个按钮后我想去createhotel页面。
  • 好的,现在在您的HotelController 中创建一个名为create() 的方法,并创建一个指向该方法的路线。而且我假设您不想正确到达外部路线('travelapp.me/hotel/viewpost/createhotel)...这是什么'travelapp.me/hotel/viewpost/createhotel
  • 如果您想使用'HotelPostsController@createhotel',请删除travelapp.me,并将您的链接指向/hotel/viewpost/createhotel....请参阅下面的帖子
  • 我想我必须添加完整的路线所以我添加了这个。travelapp.me/hotel/viewpost/createhotel

标签: laravel routes


【解决方案1】:

route() 辅助方法接受名称作为参数,而不是实际路由。

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

【讨论】:

  • 能否详细说明。我有点困惑。
  • 您有一个按钮:&lt;button href="{{ route('/createhotel') }}" type="button" class="btn btn-default"&gt;Left&lt;/button&gt; 您正在使用的路由方法需要一个命名路由。您正在传递路线的 url,而不是名称。好消息,您已经定义了名称:Route::get('/hotel/create', 'HotelReviewController@create')-&gt;name('create'); 所以在路由中使用名称“create”。或者使用不同的方法,url('the/actual/route/here')
  • 好的,我做到了。错误消失了,但它仍然不会进入页面。即创建酒店
  • http://travelapp.me/hotel/viewpost/1 这是我在 viewpost 页面上的链接。所以在Route中我是否必须添加hotel/viewpost/1/createhotel?
  • 我认为你有非常相似的路线让自己感到困惑。这也让我很困惑。我告诉过你指向HotelReviewController@create 的命名路线,但我认为你想点击HotelPostsController@createhotel。您需要给这条路线起一个名字,并更改我告诉您的内容以匹配该新名称。你的名字也可以更干净,比如hotel.create。另外,这是一个酒店帖子,那么为什么要使用 createHotel 方法呢?我认为只是“创造”就可以了。然后它可以返回具有该文件夹结构的视图hotels.posts.create。不过,这只是我的看法。
【解决方案2】:

在由视图刀片页面填充的索引操作值中,它似乎是错误的

&lt;form method="get" action="/hotel/viewpost.blade.php"&gt;

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

【讨论】:

    【解决方案3】:
    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】:

      改变

      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>
      

      现在在这个例子中,当你点击创建酒店链接时,这将调用 HotelPostsController 控制器的方法 createhotel()
      更新:
      问题
      在您的控制器中,您没有将任何数据传递给视图

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

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

      <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);
       }
      

      【讨论】:

      • 现在报错Trying to get property 'image' of non-object (View: \htdocs\travelapp\resources\views\hotel\viewpost.blade.php)
      • 它试图为我在 viewpost 中使用的图像提供错误。虽然网址更改为http://travelapp.me/hotel/viewpost/createhotel
      • 是的,当您将图像放在 HTML 文件上时,URL 将自动更改,使用 &lt;img src="{{url('/img/img.1')}}"&gt;&lt;img src="{{asset('/img/img.1')}}"&gt; 之类的填充路径
      • 但是我从 db 获取图像并通过 php var 访问它
      • 非常感谢,终于成功了,非常感谢
      猜你喜欢
      • 2019-05-26
      • 1970-01-01
      • 2014-10-24
      • 2021-08-14
      • 2017-03-16
      • 2018-06-08
      • 2018-09-18
      • 2021-12-30
      • 2016-07-30
      相关资源
      最近更新 更多