主页找不到Laravel控制器方法

时间:2014-01-07 18:42:42

标签: php laravel laravel-4

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

目前,当用户访问网站的“/ 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没有通过改变路径将'events'数组传递到视图中?!任何帮助/补救/解释都将非常感激。

1 个答案:

答案 0 :(得分:0)

这就是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');

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