/ posts / {id}路由在Laravel中阻止了/ posts / create

时间:2019-01-18 08:14:13

标签: php laravel

在我的ChallengesController中,我有以下路线:

public function show($id) {
 $challenge = Challenge::find($id);

 if (!$challenge) {
   return back()->with('error', 'Challenge does not exist');
 }

 $projects = $challenge->projects;

 return view('challenges.show')->with(['challenge' => $challenge, 'projects' => $projects]);
}

 public function create() {
  if (auth()->user()->role === 'user') {
     return back()->with('error', 'You are unauthorized to do that');
  }

  return view('challenges.create');
 }

在我的web.php路由中,我有以下路由:

Route::get('/challenges/{id}', 'ChallengesController@show');
Route::get('/challenges/create', 'ChallengesController@create');

每当我想转到/challenges/create时,它都会认为我必须转到/challenges/{id},并认为{id}是“创建”的。但是在我刚才指定的其他控制器中

 Route::resource('projects', 'ProjectsController');

当我执行php artisan route:list时,它具有相同的路由结构,但是它正在工作,而我的自定义/challenge路由却无效。

是否有一种方法可以覆盖/challenges/create,或者我做错了什么。我正在使用Laravel 5.7.20版本。

2 个答案:

答案 0 :(得分:4)

或更简单的是,更改声明的顺序:

if(e.KeyCode==Keys.Enter){
  if(textBox1.Text = "some string"){
    //your code here...
  }
}

答案 1 :(得分:2)

从Laravel documentation

  

您可以使用where约束路线参数的格式   路由实例上的方法。 where方法接受名称   参数和定义该参数应如何使用的正则表达式   受到约束:

Route::get('challenges/{id}', function ($id) {
    //
})->where('id', '[0-9]+');

现在仅接受数值作为参数id