【问题标题】:Laravel Controller method not found for homepage找不到主页的 Laravel 控制器方法
【发布时间】:2014-01-25 14:08:04
【问题描述】:

我知道我的代码有点错误(因此我的帖子!)。我希望在访问者访问网站的“/”部分时显示我的“主页”视图。

目前,当用户访问网站的“/home”部分时,视图会起作用。我目前正在为如何做到这一点而烦恼!

Route.php:

Route::controller('/', 'HomeController');
Route::controller('users', 'UsersController');
Route::get('events/{id}/{slug}', 'EventsController@show');
Route::controller('events', 'EventsController');

HomeController.php:

<?php

class HomeController extends BaseController {

    protected $layout = "layouts.main";

    public function getHome(){

        $events = myApp\Event::where('date','>=', DB::raw('CURDATE()'))->first();
        $this->layout->content = View::make('home', array('events' => $events));
    }
}

Home.blade.php:

<div class="col-md-4">
    <h2>Next Event</h2>
    <h3>{{$events->title}}</h3>
    <p>Presented by {{ $events->consultant()->first()->title }} {{ $events->consultant()->first()->surname }}</p>
    <b><p>{{ date("j F Y", strtotime($events->date)) }} from {{ date("g:ia", strtotime($events->start_time)) }}</p></b>
    <a class="btn btn-success" href="{{ URL::to('events/' . $events->slug) }}">Book your place now.</a>
</div>

通过在我的 routes.php 中使用它,我设法让视图与“/”目录一起工作:

Route::get('/', function(){
    return View::make('home');
});

但是,我遇到了错误:

未定义变量:事件(视图:/Users/Sites/gp/app/views/home.blade.php)。

就好像,HomeController 没有将“事件”数组传递到视图中,只是通过更改路由?!任何帮助/补救措施/解释将不胜感激。

【问题讨论】:

    标签: php laravel laravel-4


    【解决方案1】:

    这就是 Laravel RESTful 控制器的工作原理,但您可以在其他路由之前为 / 创建一个新路由,指向该操作:

    Route::controller('users', 'UsersController');
    Route::get('events/{id}/{slug}', 'EventsController@show');
    Route::controller('events', 'EventsController');
    
    Route::get('/', 'HomeController@getHome');
    Route::controller('/', 'HomeController');
    

    编辑

    您必须了解 Laravel 路由系统会尽可能快地解析路由,因此如果它找到适合当前 URI 的路由,它将使用该路由并忘记所有其他路由。一个例子:

    Route::get('/{variable}' 'Controller@action');
    

    这是非常通用的路线,可以解决任何问题,甚至

    http://your-site.dev/events
    

    所以,如果你在这条路线之前添加那条路线:

    Route::get('events/{id}/{slug}', 'EventsController@show');
    

    您的活动路线永远不会被击中。这就是为什么你最通用的路线必须是最后一条。

    【讨论】:

    • 效果很好,谢谢你,安东尼奥。一个简单的问题,如果可以的话,为什么我需要在 get 方法之后调用控制器? @getHome 函数会完成所有工作吗?我知道当然不是!我只是跳出框框思考。
    • 另外,为了让我的应用程序工作,我不得不改变我的路线到这个订单 - pastebin.com/e8zcuUzL,有什么原因吗?感谢您的帮助,安东尼奥。
    • Laravel 中的路由按照你定义它们的顺序工作,你的 Route::controller() 也会为/ 定义一个路由,但它会将它重定向到/home,所以如果你先定义相同的路由,定义的一个 Route::controller() 将不起作用。
    • 编辑为您提供一个可能有助于更好地理解路由的示例。
    猜你喜欢
    • 1970-01-01
    • 2023-01-27
    • 2016-04-04
    • 2014-03-09
    • 2014-05-12
    • 2014-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多