【问题标题】:how can route form in laravel 5.2如何在 laravel 5.2 中路由表单
【发布时间】:2017-12-13 02:42:46
【问题描述】:

我的 EventsController 函数在我的 Laravel 应用中是这样的

public function storetask(Request $request, $id, Task $task)
    {
        $task = new Task;
        $task->task_name   = $request->input('name');
        $task->body = $request->input('body');
        $task->assign          = $request->input('status');
        $task->priority        = $request->input('status');
        $task->duedate  = $request->input('date');
        $task->project_id        = $id;

        $task->save();
}

我需要使用上述控制器功能将表单数据保存在我的事件文件夹 show.blade.php 文件中 我的表单路线是这样的

<form method="post" action="{{ route('events.storetask') }}">

我的 route.php 是这个

Route::resource('events', 'EventsController');

但我收到此错误消息

Route [events.storetask] not defined. (View: C:\Users\Flex\Desktop\kuruja\resources\views\events\show.blade.php)

如何解决这个问题?

【问题讨论】:

    标签: php laravel-5


    【解决方案1】:

    如下定义您的路线:

    Route::post('/storeTask/{projectId}',array('uses'=>'EventsController@storetask','as'=>'storeTask'));
    

    在你的视野中打电话

    <form method="post" action="{{ route('storeTask',$yourProjectId) }}">
    

    用下面的函数替换你的控制器函数:

    public function storetask($id=0)
    {
            $task = new Task();
            $task->task_name    = \Input::get('name');
            $task->body         = \Input::get('body');
            $task->assign       = \Input::get('status');
            $task->priority     = \Input::get('status');
            $task->duedate      = \Input::get('date');
            $task->project_id   = $id;
    
            $task->save();
    }
    

    【讨论】:

    • 我在这里用作 storetask 可以用作 storeTask 吗
    • 由于未定义路由 [storetask] 而发生错误。 (查看:C:\Users\Lilan\Desktop\conji\resources\views\events\show.blade.php)
    • 使用{{route('storeTask')}},没问题就是我定义的路由名称
    • 现在新的错误类 App\Http\Controllers\EventsController 不存在
    • 那么你的控制器名称是什么?
    【解决方案2】:

    你需要一个 storetask 的路由。当您使用资源时,它会创建 7 个您应该在事件控制器上拥有的路由。索引、创建、存储、显示、编辑、更新、销毁。您可以直接将您的表单用于存储或创建存储任务。

    你也可以使用 php artisan routes 命令查看你所有的路由,你可以看到没有一个名为 storetask。

    【讨论】:

    • 你的意思是我可以改变我的路线::resource('events', 'EventsController');当我使用 storetask 时
    • 您正在使用 storetask,但您没有为它定义路由。因此您可以为 storetask 添加另一个路由,也可以使用 store 代替,因为 store 已经定义并包含在您已经拥有的资源路由中。
    【解决方案3】:

    我认为问题出在这里:

    <form method="post" action="{{ route('events.storetask') }}">
    

    当您向控制器注册一个资源丰富的路由时,例如:

    Route::resource('photo', 'PhotoController');
    

    这个单一的路由声明创建了多个路由来处理对照片资源的各种 RESTful 操作。同样,生成的控制器将已经为这些操作中的每一个设置了方法,包括通知您它们处理哪些 URI 和动词的注释。

    资源控制器处理的操作

    Verb    Path    Action  Route Name
    GET /photo  index   photo.index
    GET /photo/create   create  photo.create
    POST    /photo  store   photo.store
    GET /photo/{photo}  show    photo.show
    GET /photo/{photo}/edit edit    photo.edit
    PUT/PATCH   /photo/{photo}  update  photo.update
    DELETE  /photo/{photo}  destroy photo.destroy
    

    但在您的情况下,storetask 方法与上述列表不匹配。所以根据列表更改名称再试一次。

    Reference

    【讨论】:

      猜你喜欢
      • 2016-04-23
      • 2018-03-19
      • 1970-01-01
      • 2017-07-05
      • 2016-10-10
      • 2016-08-30
      • 2016-12-01
      • 2016-06-24
      • 1970-01-01
      相关资源
      最近更新 更多