【问题标题】:Routing Laravel namepsace issue路由 Laravel 命名空间问题
【发布时间】:2017-12-13 01:10:23
【问题描述】:

当我删除初始 use Illuminate\Http\Request 并改为在 Controller 文件中添加 use App\Item 时,items/create 路由以 404 响应。我怎样才能仍然使用 App\Item 命名空间并到达 items/create 路由?我已经尝试添加两者,但不起作用。

web.php

Route::get('items', 'ItemsController@index');
Route::get('items/{item}', 'ItemsController@show');
Route::get('items/create', 'ItemsController@create');

ItemsController.php

<?php

namespace App\Http\Controllers;

use App\Item;

class ItemsController extends Controller
{
    public function index(){
      $items = Item::all();
      return view('items.index', ['items' => $items]);
    }

    public function show(Item $item){
      return $item->body;
    }

    public function create(){
      return view('items.create');
    }
}

Item.php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Item extends Model
{
    //
}

【问题讨论】:

  • 你能提供Item模型的代码吗?
  • 它只是一个标准模型,还没有任何内容。不过,我已经添加了它。
  • 所以经过多一点测试,我发现Controller文件中的命名空间可能不是问题,但可能在web.php文件中。我已经删除了除 items/create 之外的所有路由和关联的控制器功能,它会转到页面。

标签: php laravel


【解决方案1】:

问题是 laravel 尝试按照声明的顺序匹配路由,items/{item} 路由将匹配所有以items/ 开头的路由,包括items/create。并且由于路由模型绑定,Laravel 会尝试加载 ID 为 createItem,这显然不存在,因此会引发 404 错误。

the docs中的路由模型绑定:

由于$user 变量被类型提示为App\User Eloquent 模型 并且变量名匹配{user} URI 段,Laravel 将 自动注入 ID 匹配的模型实例 请求 URI 中的相应值。如果匹配的模型实例 在数据库中未找到,将自动返回 404 HTTP 响应 生成。

要修复它,只需更改路线的顺序并将items/{item} 放在所有其他item/* 路线之后:

Route::get('items', 'ItemsController@index');
Route::get('items/create', 'ItemsController@create');
Route::get('items/{item}', 'ItemsController@show');

【讨论】:

  • 这就是解决方案。感谢您的解释!
【解决方案2】:

请你试试这个。

<?php

namespace App\Http\Controllers;
use App\Item;
class ItemsController extends Controller
{
    public function index(){
      $items = Item::all();
      return view('items.index', ['items' => $items]);
    }

    public function show($id){
      $item= Item::find($id);
        return $item->body;
    }

    public function create(){
      return view('items.create');
    }
}

【讨论】:

    猜你喜欢
    • 2018-05-05
    • 2012-01-25
    • 1970-01-01
    • 2012-07-05
    • 1970-01-01
    • 2014-09-07
    • 2023-03-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多