laravel 4中的路线问题

时间:2013-01-24 04:19:34

标签: php routing routes laravel laravel-4

我是laravel的新手,现在就学习它。我在routes.php文件

中提供以下路线
Route::resource('contacts', 'ContactsController');

但是当我在浏览器中加载页面时,它会出现以下错误

Unhandled Exception

Message:

Call to undefined method Laravel\Routing\Route::resource()
Location:

/Users/zafarsaleem/Sites/learning-laravel/application/routes.php on line 35

我的完整routes.php文件位于

之下
Route::resource('contacts', 'ContactsController');

Route::get('/', function()   //<------- This is line 35
{
    return View::make('home.index');
});

如何删除此错误?

修改

ContactsController代码如下,我想要使用index()函数

class ContactsController extends BaseController {

/**
 * Display a listing of the resource.
 *
 * @return Response
 */
public function index()
{
    Contact::all();
}

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

/**
 * Store a newly created resource in storage.
 *
 * @return Response
 */
public function store()
{
    $input = Input::json();

    Contact::create(array(
        'first_name' => $input->first_name
        'last_name' => $input->last_name
        'email_address' => $input->email_address
        'description' => $input->description
    ));
}

/**
 * Display the specified resource.
 *
 * @return Response
 */
public function show($id)
{
    return Contact::find($id);
}

/**
 * Show the form for editing the specified resource.
 *
 * @return Response
 */
public function edit($id)
{
    //
}

/**
 * Update the specified resource in storage.
 *
 * @return Response
 */
public function update($id)
{
    $contact = Contact::find($id);
    $input = Input::json();

    $contact->first_name = $input->first_name;
    $contact->last_name = $input->last_name;
    $contact->email_address = $input->email_ddress;
    $contact->description = $input->description;

    $contact->save();
}

/**
 * Remove the specified resource from storage.
 *
 * @return Response
 */
public function destroy($id)
{
    return Contact::find($id)->delete();
}

}

修改2

我尝试了以下两条路线,但最终错误

Route::resource('contacts', 'ContactsController', ['only', => ['index']]);
Route::get('contacts','ContactsController@index');

重新安装laravel 4后,我收到了以下错误

404 Not Found

The requested URL /contacts was not found on this server.
_____________________________________________________________________
Apache/2.2.22 (Unix) DAV/2 PHP/5.3.15 with Suhosin-Patch Server at bb.dev Port 80

编辑3

以下是现在的操作,编辑“/private/etc/apache2/users/.conf”并从“AllowOverride None”更改为“AllowOverride All”,然后重新启动我的apache服务器。现在我收到了以下错误

403 Forbidden

You don't have permission to access /contacts on this server.
__________________________________________________________________________________
Apache/2.2.22 (Unix) DAV/2 PHP/5.3.15 with Suhosin-Patch Server at bb.dev Port 80

为什么我没有此联系人控制器的权限?它现在让我发疯了。

这是我的.htaccess文件

<IfModule mod_rewrite.c>
Options -MultiViews
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]
</IfModule>

5 个答案:

答案 0 :(得分:9)

您是否在其他服务器上试过这个?很多事情都可能出现重写错误(我已经失去了修复.htaccess的时间),所以问题可能是Apache而不是Laravel。

这适用于我public/.htaccess

<IfModule mod_rewrite.c>
     RewriteEngine on

     RewriteCond %{REQUEST_FILENAME} !-f
     RewriteCond %{REQUEST_FILENAME} !-d

     RewriteRule ^(.*)$ index.php/$1 [L]
</IfModule>

您是否尝试过index.php/contacts代替/contacts?如果可行,问题是Apache,而不是Laravel。

答案 1 :(得分:0)

这可能是命名空间问题 - 它应该调用 Illuminate \ Routing \ Router上的函数,但您的异常是指 Laravel \ Routing \ Route :: resource ()。

您的配置文件是否仍然可以引用Laravel3?

答案 2 :(得分:0)

尝试将路线更改为

Route::resource('/contacts', 'ContactsController');

在ContactsController.php中更改索引以返回模型的实例

public function index()
{
    return Contact::all();
}

答案 3 :(得分:0)

我有同样的$#%&amp;问题,经过几个小时的搜索,我发现它不是.httacess文件的问题。我刚刚做了什么来解决这个问题:

composer update --dev

我认为--dev位是重要的。希望有所帮助。

答案 4 :(得分:0)

好吧,我有一分钟前的问题! 这是因为ide-helper 解决你应该在routes.php

中注释以下代码
use Illuminate\Routing\Route;