测试 RESTful API (Lumen) - http/https 协议是问题所在吗?
Testing RESTful API (Lumen) - is the http/https protocol the problem?
我正在学习本教程 https://www.youtube.com/watch?v=6Oxfb_HNY0U
建立一个小流明测试项目。
我目前在第 27 分钟,您应该通过 post 请求插入一条记录。
为此,我使用 RESTClient http://restclient.net/
所以,最后一天我已经尽力解决了这个问题,多亏了SO,我至少也可以
部分解决问题:
但是,我仍然收到错误而不是新记录。
向
发送 post 请求时
http://localhost:8080/api/articles
我收到这个错误:
(1/1) BadMethodCallException
Method Laravel\Lumen\Http\Request::validate does not exist.
in Macroable.php line 103
at Request->__call('validate', array(array('title' => 'required', 'description' => 'required')))in ArticleController.php line 36
at ArticleController->create(object(Request))
at call_user_func_array(array(object(ArticleController), 'create'), array(object(Request)))in BoundMethod.php line 32
at BoundMethod::Illuminate\Container\{closure}()in Util.php line 34
at Util::unwrapIfClosure(object(Closure))in BoundMethod.php line 90
at BoundMethod::callBoundMethod(object(Application), array(object(ArticleController), 'create'), object(Closure))in BoundMethod.php line 34
at BoundMethod::call(object(Application), array(object(ArticleController), 'create'), array(), null)in Container.php line 590
at Container->call(array(object(ArticleController), 'create'), array())in RoutesRequests.php line 376
at Application->callControllerCallable(array(object(ArticleController), 'create'), array())in RoutesRequests.php line 342
at Application->callLumenController(object(ArticleController), 'create', array(true, array('uses' => 'App\Http\Controllers\ArticleController@create'), array()))in RoutesRequests.php line 316
at Application->callControllerAction(array(true, array('uses' => 'App\Http\Controllers\ArticleController@create'), array()))in RoutesRequests.php line 278
at Application->callActionOnArrayBasedRoute(array(true, array('uses' => 'App\Http\Controllers\ArticleController@create'), array()))in RoutesRequests.php line 263
at Application->handleFoundRoute(array(true, array('uses' => 'App\Http\Controllers\ArticleController@create'), array()))in RoutesRequests.php line 165
at Application->Laravel\Lumen\Concerns\{closure}(object(Request))in RoutesRequests.php line 416
at Application->sendThroughPipeline(array(), object(Closure))in RoutesRequests.php line 171
at Application->dispatch(null)in RoutesRequests.php line 108
at Application->run()in index.php line 28
由于我是 Lumen/Laravel 的新手,我发现很难从这个错误中猜出任何内容。
我不知道我是否只是拼写错误,没有注意范围或类似的东西。
现在,这里是产生这个错误的代码:
web.php(路由),Article.php(模型,驻留在应用程序文件夹中)和 ArticleController.php(控制器):
web.php:
<?php
/*
|--------------------------------------------------------------------------
| Application Routes
|--------------------------------------------------------------------------
|
| Here is where you can register all of the routes for an application.
| It is a breeze. Simply tell Lumen the URIs it should respond to
| and give it the Closure to call when that URI is requested.
|
*/
$router->get('/', function () use ($router) {
return $router->app->version();
});
// was simply 'api' in tutorial
$router->group(['prefix' => '/api'], function($router){
$router->get('articles', 'ArticleController@showAllArticles');
$router->get('articles/{id}', 'ArticleController@showOneArticle');
$router->post('articles', 'ArticleController@create');
});
ArticleController.php
<?php
namespace App\Http\Controllers;
use App\Article;
use Illuminate\Http\Request;
class ArticleController extends Controller
{
/**
* Create a new controller instance.
*
* @return void
*/
public function __construct()
{
//
}
//
public function showAllArticles(){
return response()->json(Article::get(['title', 'description', 'status'])); // ::get([]) spezifiziert die zu referenzierenden Attribute
// ::all() referenziert alle Attribute einer Tabelle/Relation
}
public function showOneArticle($id){
return response()->json(Article::find($id));
}
public function create(Request $request){
//dd($request); //for debugging whether the request is actually being processed
$validatedData = $request->validate([
'title' => 'required',
'description' => 'required',
]);
//dd($request); //for debugging whether the specified fields are required
//insert record
$article = Article::create($request->all());
return response()->json($article, 201);
}
}
Article.php:
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Article extends Model
{
protected $fillable = [
'title', 'description', 'status'
];
}
由于此代码中的函数 "create()" 与教程代码相比有所修改(参见顶部引用的 SO 问题中 ege 的回答),我也尝试了教程代码,其中create() 函数如下所示:
public function create(Request $request){
$this->validation($request, [
'title' => 'required',
'description' => 'required'
]);
$article = Article::create($request->all());
return response()->json($article, 201);
}
我又收到另一个错误,在这种情况下:
(1/1) Error
Call to undefined method App\Http\Controllers\ArticleController::validation()
in ArticleController.php line 41
at ArticleController->create(object(Request))
at call_user_func_array(array(object(ArticleController), 'create'), array(object(Request)))in BoundMethod.php line 32
at BoundMethod::Illuminate\Container\{closure}()in Util.php line 34
at Util::unwrapIfClosure(object(Closure))in BoundMethod.php line 90
at BoundMethod::callBoundMethod(object(Application), array(object(ArticleController), 'create'), object(Closure))in BoundMethod.php line 34
at BoundMethod::call(object(Application), array(object(ArticleController), 'create'), array(), null)in Container.php line 590
at Container->call(array(object(ArticleController), 'create'), array())in RoutesRequests.php line 376
at Application->callControllerCallable(array(object(ArticleController), 'create'), array())in RoutesRequests.php line 342
at Application->callLumenController(object(ArticleController), 'create', array(true, array('uses' => 'App\Http\Controllers\ArticleController@create'), array()))in RoutesRequests.php line 316
at Application->callControllerAction(array(true, array('uses' => 'App\Http\Controllers\ArticleController@create'), array()))in RoutesRequests.php line 278
at Application->callActionOnArrayBasedRoute(array(true, array('uses' => 'App\Http\Controllers\ArticleController@create'), array()))in RoutesRequests.php line 263
at Application->handleFoundRoute(array(true, array('uses' => 'App\Http\Controllers\ArticleController@create'), array()))in RoutesRequests.php line 165
at Application->Laravel\Lumen\Concerns\{closure}(object(Request))in RoutesRequests.php line 416
at Application->sendThroughPipeline(array(), object(Closure))in RoutesRequests.php line 171
at Application->dispatch(null)in RoutesRequests.php line 108
at Application->run()in index.php line 28
我在理解错误方面基本上遇到了与第一个错误相同的问题。
我在这里查看了流明文档:
https://lumen.laravel.com/docs/6.x/validation
我又想知道我是否没有正确理解范围("this" 在这里指的是什么,它是什么对象,我实际上可以从中调用什么方法?)。
为了完整起见,我引用 table 模型 "Article" 的 table 的屏幕截图:
https://imgur.com/onXEgzg
总的来说,我只是一无所知,如果有人可以,我将非常感激"give me a lift" ^^
查看您的修改示例(您的 create()
方法的第二个版本),错误的第一行显示了问题:
Call to undefined method App\Http\Controllers\ArticleController::validation()
所以您的代码中的这一行有问题:
$this->validation() ...
检查 the link to the Lumen docs 您包括:
The $this->validate helper which is available in Lumen ...
所以有一个 validate()
帮助程序 - 但您正在使用 validation()
。
我正在学习本教程 https://www.youtube.com/watch?v=6Oxfb_HNY0U 建立一个小流明测试项目。 我目前在第 27 分钟,您应该通过 post 请求插入一条记录。 为此,我使用 RESTClient http://restclient.net/
所以,最后一天我已经尽力解决了这个问题,多亏了SO,我至少也可以
部分解决问题:
但是,我仍然收到错误而不是新记录。 向
发送 post 请求时http://localhost:8080/api/articles
我收到这个错误:
(1/1) BadMethodCallException
Method Laravel\Lumen\Http\Request::validate does not exist.
in Macroable.php line 103
at Request->__call('validate', array(array('title' => 'required', 'description' => 'required')))in ArticleController.php line 36
at ArticleController->create(object(Request))
at call_user_func_array(array(object(ArticleController), 'create'), array(object(Request)))in BoundMethod.php line 32
at BoundMethod::Illuminate\Container\{closure}()in Util.php line 34
at Util::unwrapIfClosure(object(Closure))in BoundMethod.php line 90
at BoundMethod::callBoundMethod(object(Application), array(object(ArticleController), 'create'), object(Closure))in BoundMethod.php line 34
at BoundMethod::call(object(Application), array(object(ArticleController), 'create'), array(), null)in Container.php line 590
at Container->call(array(object(ArticleController), 'create'), array())in RoutesRequests.php line 376
at Application->callControllerCallable(array(object(ArticleController), 'create'), array())in RoutesRequests.php line 342
at Application->callLumenController(object(ArticleController), 'create', array(true, array('uses' => 'App\Http\Controllers\ArticleController@create'), array()))in RoutesRequests.php line 316
at Application->callControllerAction(array(true, array('uses' => 'App\Http\Controllers\ArticleController@create'), array()))in RoutesRequests.php line 278
at Application->callActionOnArrayBasedRoute(array(true, array('uses' => 'App\Http\Controllers\ArticleController@create'), array()))in RoutesRequests.php line 263
at Application->handleFoundRoute(array(true, array('uses' => 'App\Http\Controllers\ArticleController@create'), array()))in RoutesRequests.php line 165
at Application->Laravel\Lumen\Concerns\{closure}(object(Request))in RoutesRequests.php line 416
at Application->sendThroughPipeline(array(), object(Closure))in RoutesRequests.php line 171
at Application->dispatch(null)in RoutesRequests.php line 108
at Application->run()in index.php line 28
由于我是 Lumen/Laravel 的新手,我发现很难从这个错误中猜出任何内容。 我不知道我是否只是拼写错误,没有注意范围或类似的东西。
现在,这里是产生这个错误的代码: web.php(路由),Article.php(模型,驻留在应用程序文件夹中)和 ArticleController.php(控制器):
web.php:
<?php
/*
|--------------------------------------------------------------------------
| Application Routes
|--------------------------------------------------------------------------
|
| Here is where you can register all of the routes for an application.
| It is a breeze. Simply tell Lumen the URIs it should respond to
| and give it the Closure to call when that URI is requested.
|
*/
$router->get('/', function () use ($router) {
return $router->app->version();
});
// was simply 'api' in tutorial
$router->group(['prefix' => '/api'], function($router){
$router->get('articles', 'ArticleController@showAllArticles');
$router->get('articles/{id}', 'ArticleController@showOneArticle');
$router->post('articles', 'ArticleController@create');
});
ArticleController.php
<?php
namespace App\Http\Controllers;
use App\Article;
use Illuminate\Http\Request;
class ArticleController extends Controller
{
/**
* Create a new controller instance.
*
* @return void
*/
public function __construct()
{
//
}
//
public function showAllArticles(){
return response()->json(Article::get(['title', 'description', 'status'])); // ::get([]) spezifiziert die zu referenzierenden Attribute
// ::all() referenziert alle Attribute einer Tabelle/Relation
}
public function showOneArticle($id){
return response()->json(Article::find($id));
}
public function create(Request $request){
//dd($request); //for debugging whether the request is actually being processed
$validatedData = $request->validate([
'title' => 'required',
'description' => 'required',
]);
//dd($request); //for debugging whether the specified fields are required
//insert record
$article = Article::create($request->all());
return response()->json($article, 201);
}
}
Article.php:
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Article extends Model
{
protected $fillable = [
'title', 'description', 'status'
];
}
由于此代码中的函数 "create()" 与教程代码相比有所修改(参见顶部引用的 SO 问题中 ege 的回答),我也尝试了教程代码,其中create() 函数如下所示:
public function create(Request $request){
$this->validation($request, [
'title' => 'required',
'description' => 'required'
]);
$article = Article::create($request->all());
return response()->json($article, 201);
}
我又收到另一个错误,在这种情况下:
(1/1) Error
Call to undefined method App\Http\Controllers\ArticleController::validation()
in ArticleController.php line 41
at ArticleController->create(object(Request))
at call_user_func_array(array(object(ArticleController), 'create'), array(object(Request)))in BoundMethod.php line 32
at BoundMethod::Illuminate\Container\{closure}()in Util.php line 34
at Util::unwrapIfClosure(object(Closure))in BoundMethod.php line 90
at BoundMethod::callBoundMethod(object(Application), array(object(ArticleController), 'create'), object(Closure))in BoundMethod.php line 34
at BoundMethod::call(object(Application), array(object(ArticleController), 'create'), array(), null)in Container.php line 590
at Container->call(array(object(ArticleController), 'create'), array())in RoutesRequests.php line 376
at Application->callControllerCallable(array(object(ArticleController), 'create'), array())in RoutesRequests.php line 342
at Application->callLumenController(object(ArticleController), 'create', array(true, array('uses' => 'App\Http\Controllers\ArticleController@create'), array()))in RoutesRequests.php line 316
at Application->callControllerAction(array(true, array('uses' => 'App\Http\Controllers\ArticleController@create'), array()))in RoutesRequests.php line 278
at Application->callActionOnArrayBasedRoute(array(true, array('uses' => 'App\Http\Controllers\ArticleController@create'), array()))in RoutesRequests.php line 263
at Application->handleFoundRoute(array(true, array('uses' => 'App\Http\Controllers\ArticleController@create'), array()))in RoutesRequests.php line 165
at Application->Laravel\Lumen\Concerns\{closure}(object(Request))in RoutesRequests.php line 416
at Application->sendThroughPipeline(array(), object(Closure))in RoutesRequests.php line 171
at Application->dispatch(null)in RoutesRequests.php line 108
at Application->run()in index.php line 28
我在理解错误方面基本上遇到了与第一个错误相同的问题。 我在这里查看了流明文档: https://lumen.laravel.com/docs/6.x/validation
我又想知道我是否没有正确理解范围("this" 在这里指的是什么,它是什么对象,我实际上可以从中调用什么方法?)。
为了完整起见,我引用 table 模型 "Article" 的 table 的屏幕截图: https://imgur.com/onXEgzg
总的来说,我只是一无所知,如果有人可以,我将非常感激"give me a lift" ^^
查看您的修改示例(您的 create()
方法的第二个版本),错误的第一行显示了问题:
Call to undefined method App\Http\Controllers\ArticleController::validation()
所以您的代码中的这一行有问题:
$this->validation() ...
检查 the link to the Lumen docs 您包括:
The $this->validate helper which is available in Lumen ...
所以有一个 validate()
帮助程序 - 但您正在使用 validation()
。