在 Laravel 路由中使用参数调用自定义类方法

Dyl*_*236 2 php routes laravel

所以我有这个函数,将用作 1 作为 artisan 命令或 2 作为用户可以使用的链接。

这是函数:

public function saveAll($whatLocation)
    {
      $userSaved = $this->saveUsersData();
      $componentSaved = $this->saveComponentsData();
      $issueSaved = $this->saveIssuesData();
      $timelogSaved = $this->saveTimelogsData();
      if($userSaved === 1 && $componentSaved === 1 && $timelogSaved === 1)
      {
        $this->allSaved = 1;
      }
      if($whatLocation != "artisanCommand")
      {
        return redirect()->back();
      }
      else
      {
        return $this->allSaved;
      }

    }
Run Code Online (Sandbox Code Playgroud)

这个想法是,如果它来自我创建的 artisan 控制台命令,我会传递“artisanCommand”,但如果它来自路线,它会提取我的 api 数据并重定向到上一页。

问题是这样的:

在网络路由文件中,我现在无法调用具有参数的函数?

Route::get('/pull-and-save-api-data', [App\Classes\SaveApiData::class, 'saveAll'])->name('pull-and-save-api-data');
Run Code Online (Sandbox Code Playgroud)

如果函数上没有参数,这可以工作,但现在有参数就行不通了?

我试过了:

Route::get('/pull-and-save-api-data', [App\Classes\SaveApiData::class, 'saveAll("notcommand")'])->name('pull-and-save-api-data');

Route::get('/pull-and-save-api-data/{notcommand}', [App\Classes\SaveApiData::class, 'saveAll'])->name('pull-and-save-api-data');
Run Code Online (Sandbox Code Playgroud)

都不起作用?

lag*_*box 5

因为没有从路由传递给函数的值,所以只为该函数创建一个默认参数怎么样?

public function saveAll($whatLocation = null)
Run Code Online (Sandbox Code Playgroud)

我不会直接从这样的路线调用你的方法;让路由转到控制器并让该控制器与您需要的类/库进行交互。

如果您确实必须从路由传递一个值,您可以设置一个默认值:

Route::get('/pull-and-save-api-data', [App\Classes\SaveApiData::class, 'saveAll'])
    ->name('pull-and-save-api-data')
    ->defaults('whatLocation', 'notArtisan');
Run Code Online (Sandbox Code Playgroud)