Laravel路线走错路线

时间:2017-03-02 10:22:55

标签: php laravel routes

我不明白以下问题。

这是我的路线:

Route::get('events', array('as' => 'events' ,'uses' => 'EventController@index'));
Route::get('event/{id}', array('as' => 'event' ,'uses' => 'EventController@view'));
Route::get('event/new_event', array('as'=> 'new_event', 'uses' => 'EventController@newEvent'));
Route::post('event/create', array('uses' => 'EventController@create'));
Route::get('event/{id}/edit', array('as' => 'edit_event', 'uses' => 'EventController@edit'));
Route::post('event/update', array('uses' => 'EventController@update'));
Route::delete('event/delete', array('uses' => 'EventController@destroy'));

我无法创建新活动,因为当我点击“新活动”按钮时,它会使用EventController@view代替EventController@newEvent

这是EventController:

<?php

namespace App\Http\Controllers;

use Illuminate\Support\Facades\Input;
use Illuminate\Http\Request;
use App\EventModel;

class EventController extends Controller
{
    public function index()
    {
        $events = EventModel::all();
        return \View::make('event/index')->with('events', $events);
    }

    public function view($id)
    {
        return \View::make('event/view')
        ->with('event', EventModel::find($id));

    }

    public function newEvent()
    {
        dd("dd");
      return \View::make('event/create');
    }

    public function create()
    {
        $validator = EventModel::validate(Input::all());

        if($validator->fails())
        {   
            $messages = $validator->messages();

            return redirect()->action('EventController@newEvent')
            ->withErrors($validator)
            ->withinput();
        }
        else
        {
            EventModel::create(array(
                'title'=>Input::get('title'),
                'start'=>Input::get('start'),
                'end'=>Input::get('end'),
                'userID'=>\Auth::user()->id,
            ));

            //Session::flash('message', 'New event has been created!');   
            flash()->overlay('New event has been created!', 'Success');

            return redirect()->back();
        }
    }

    public function edit($id)
    {
        return \View::make('event/edit')
        ->with('event', EventModel::find($id));
    }

    public function update()
    {   
        $event = EventModel::find(Input::get('event_id'));

        $validator = EventModel::validate(Input::all());

        if($validator->fails())
        {   
            $messages = $validator->messages();

            return redirect()->back()
            ->withErrors($validator)
            ->withinput();
        }
        else
        {
            $event->title = Input::get('title');
            $event->start = Input::get('start');         
            $event->end = Input::get('end');
            $event->save();

            //Session::flash('message', 'Successfully updated!');     
            flash()->overlay('Event has been sucessfully updated!', 'Success');

            return redirect()->back();
        }
    }

    public function destroy()
    {
        $id = Input::get('event_id');
        dd("$id");
    }
}

为什么会出现此问题?

2 个答案:

答案 0 :(得分:3)

您必须对路线进行排序,因为laravel会检查路线的顺序。

尝试:

Route::get('events', array('as' => 'events' ,'uses' => 'EventController@index'));
Route::get('event/new_event', array('as'=> 'new_event', 'uses' => 'EventController@newEvent'));
Route::post('event/create', array('uses' => 'EventController@create'));
Route::post('event/update', array('uses' => 'EventController@update'));
Route::delete('event/delete', array('uses' => 'EventController@destroy'));
Route::get('event/{id}', array('as' => 'event' ,'uses' => 'EventController@view'));
Route::get('event/{id}/edit', array('as' => 'edit_event', 'uses' => 'EventController@edit'));

答案 1 :(得分:2)

Laravel路线按照定义的顺序进行检查。

event/new_eventevent/{id}都具有相同的路由结构,因此会进行view操作。

更改订单 -

Route::get('event/new_event', array('as'=> 'new_event', 'uses' => 'EventController@newEvent'));
Route::get('event/{id}', array('as' => 'event' ,'uses' => 'EventController@view'));
相关问题