2014-05-05 5 views
1

я следующий код в моем приложении/routes.php файла:Laravel дает ошибку 404, даже если маршрут определяется

<?php 

// Route/model binding for data 
Route::model('data', 'Data'); 

Route::get('/', function() { 
    return Redirect::to("data"); 
}); 


// Display all data (of all types) 
Route::get('data', function(){ 
    $data = Data::all(); 
    return View::make('data.index') 
    ->with('data', $data); 
}); 


// Display all data of a certain type 
Route::get('data/type/{name}', function($name){ 
    $type = Data::whereName($name)->with('data')->first(); 
    return View::make('data.index') 
    ->with('type', $type) 
    ->with('data', $type->data); 
}); 
Route::get('data/{data}', function($data){ 
    return View::make('data.single') 
    ->with('data', $data); 
}); 


// Create/Add new data 
Route::get('data/create', function(){ 
    $data = new Data; 
    return View::make('data.edit') 
    ->with('data', $data) 
    ->with('method', 'post'); 
}); 
Route::post('data', function(){ 
    $data = Data::create(Input::all()); 
    return Redirect::to('data/'.$data->id) 
    ->with('message', 'Seccessfully added data!'); 
}); 


// Edit data 
Route::get('data/{data}/edit', function(Data $data){ 
    return View::make('data.edit') 
    ->with('data', $data) 
    ->with('method', 'put'); 
}); 
Route::put('data/{data}', function(){ 
    $data->update(Input::all()); 
    return Redirect::to('data/'.$data->id) 
    ->with('message', 'Seccessfully updated page!'); 
}); 


// Delete data 
Route::get('data/{data}/delete', function(Data $data){ 
    return View::make('data.edit') 
    ->with('data', $data) 
    ->with('method', 'delete'); 
}); 
Route::delete('data/{data}', function(Data $data){ 
    $data->delete(); 
    return Redirect::to('data') 
    ->with('message', 'Seccessfully deleted data!'); 
}); 


// The about page (static) 
Route::get('about', function(){ 
    return View::make('about'); 
}); 


// View composer 
View::composer('data.edit', function($view){ 
    $types = Type::all(); 

    if(count($types) > 0) 
    { 
     $type_options = array_combine($types->lists('id'), 
             $types->lists('name')); 
    } 
    else 
    { 
     $type_options = array(null, 'Unspecified'); 
    } 

    $view->with('type_options', $type_options); 
}); 

Все мои маршруты работают отлично, за исключением данных/создания. Когда я посещаю данные/создаю, я получаю ошибку 404 Not Found. Даже если я определяю маршрут следующим образом:

Route::get('data/create', function(){ 
    return "Test"; 
}); 

Я все еще получаю ошибку 404. Однако следующие работы просто прекрасны:

Route::get('somethingElse/create', function(){ 
    return "Test"; 
}); 

Я понятия не имею, в чем проблема. Я следую примерам в книге «Начало работы с Laravel 4» Рафаля Сонье, и автор пишет код, идентичный тому, что у меня выше (хотя вместо «данных» используется «кошки»).

ответ

3

Этот маршрут:

Route::get('data/{data}', function($data){ 
    return View::make('data.single') 
    ->with('data', $data); 
}); 

догоняет ваши хиты в

/data/create 

Переместить его до конца ваших маршрутов. Во всяком случае, он не должен давать вам 404 ...

+0

Это действительно проблема. – chipit24

+0

Он дает 404, потому что '{data}' привязан к модели, а 'create' не является допустимой моделью данных, следовательно 404. – ollieread

Смежные вопросы