わからないこと
https://qiita.com/nakano-shingo/items/239f56dc5f8514b6f37b
こちらの記事を参考にLaravelでAPIの作成をしたいのですが、この記事の手順通りにやってもうまく出来ませんでした。。。
やりたいこと
今現状、Webアプリの作成をしているのですが、新規登録(store)箇所だけAPIにする、と言うことは出来るのでしょうか??
ご質問の内容としては
// 今現状のディレクトリ構造 src - app - Http - Controllers - HogeController.php // HogeController内のindexアクション // 127.0.0.1:8000/hoge にアクセスすると画面が表示される /** * Display a listing of the resource. * * @return \Illuminate\Http\Response */ public function index() { // return view('hoge.index'); } // hoge.indexの中でstoreに向けてpostしたいのですが、それをAPIにしたい // 今現状hoge.index内 // HogeControllerのstoreアクションにpostされる <form action="/hoge/store" method="post"> @csrf <input type="text" name="name"> <input type="text" name="email"> </form> // 上記をAPIにしたいです。 // ディレクトリ構造的にAPIは別で作りたいのですが src - app - Http - Controllers - Api ← ☆追加 - HogeController.php ← ☆追加 // Apiディレクトリ内のHogeControllerのstoreにpostしたい // やりたいこと // ここにpostするようにしたい post/store <form action="/api/hoge" method="post"> @csrf <input type="text" name="name"> <input type="text" name="email"> </form>
試したこと
上記の参考記事を元に Api/HogeController を作成し、routes/api.php に
// ここはもともと書いてありました Route::middleware('auth:api')->get('/user', function (Request $request) { return $request->user(); }); // ☆このルートを追加 Route::resource('tags', 'Api\TagController'); // ルートを追加したあとターミナルで // $ php artisan route:list を実行 ↓実行結果 | | POST | api/hoge | hoge.store | App\Http\Controllers\Api\HogeController@store | api,auth | | | GET|HEAD | api/hoge | hoge.index | App\Http\Controllers\Api\HogeController@index | api,auth | | | GET|HEAD | api/hoge/create | hoge.create | App\Http\Controllers\Api\HogeController@create | api,auth | | | GET|HEAD | api/hoge/{hoge} | hoge.show | App\Http\Controllers\Api\HogeController@show | api,auth | | | PUT|PATCH | api/hoge/{hoge} | hoge.update | App\Http\Controllers\Api\HogeController@update | api,auth | | | DELETE | api/hoge/{hoge} | hoge.destroy | App\Http\Controllers\Api\HogeController@destroy | api,auth | | | GET|HEAD | api/hoge/{hoge}/edit | hoge.edit | App\Http\Controllers\Api\HogeController@edit | api,auth | // storeルートがこれなので // api/hogeにpostすれば登録できるのかと思いましたがうまくいかず・・ | | POST | api/hoge | hoge.store | App\Http\Controllers\Api\HogeController@store | // ちなみにこちらにApi/HogeController内のindexアクションにこちらを書き足し // /api/hoge にアクセスしても/homeにリダイレクトされてしまいます use App\Models\Hoge; ←☆追加 /** * Display a listing of the resource. * * @return \Illuminate\Http\Response */ public function index() { // return response(Hoge::all()); } | | GET|HEAD | api/hoge | hoge.index | App\Http\Controllers\Api\HogeController@index |
色々ググってみたのですが、APIを使う際は、api_token
が必要になるのか?
ルートリストに api,auth
と書かれているので
src
- app
- Http
- Controllers
- Kernel.php
- Controllers
- Http
Kernel.php内の
protected $middlewareGroups = [ 'web' => [ \App\Http\Middleware\EncryptCookies::class, \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class, \Illuminate\Session\Middleware\StartSession::class, // \Illuminate\Session\Middleware\AuthenticateSession::class, \Illuminate\View\Middleware\ShareErrorsFromSession::class, \App\Http\Middleware\VerifyCsrfToken::class, \Illuminate\Routing\Middleware\SubstituteBindings::class, ], 'api' => [ // ここに 'web' に書いてあるものを書き足してみたりしました // こんな感じに \App\Http\Middleware\EncryptCookies::class, \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class, \Illuminate\Session\Middleware\StartSession::class, // \Illuminate\Session\Middleware\AuthenticateSession::class, \Illuminate\View\Middleware\ShareErrorsFromSession::class, \App\Http\Middleware\VerifyCsrfToken::class, \Illuminate\Routing\Middleware\SubstituteBindings::class, // ここまで追加 'throttle:60,1', 'bindings', ], ];
がうまくいかず
src - app - config - auth.php // auth.php内の 'guards' => [ 'web' => [ 'driver' => 'session', 'provider' => 'users', ], 'api' => [ 'driver' => 'token', ←☆ここをコメントアウトしてみたり 'provider' => 'users', ], ],
こちらもうまくいかずでした・・
あと、Apiディレクトリ配下ではないコントローラーのアクションからApiディレクトリ配下のコントローラーのアクションを呼び出しことは可能でしょうか?
// 例えば src - app - Http - Controllers - HogeController.php // ここのHogeControllerのindexアクションでhogeテーブルの中身を全て取得する際、Api/HogeControllerのindexアクションを介して取ってきたい // Controllers/Api/HogeControllerのindexアクション内で use App\Models\Hoge; ←☆追加 /** * Display a listing of the resource. * * @return \Illuminate\Http\Response */ public function index() { // // このレスポンスをControllers/HogeControllerのindexアクションに返したい return response(Hoge::all()); } // Controllers/HogeControllerのindexアクション内で /** * Display a listing of the resource. * * @return \Illuminate\Http\Response */ public function index() { // // こういったことは可能でしょうか?? $url = '/api/hoge'; // ここで上記の$urlにアクセスしてApi/HogeControllerのindexアクションから値を取得 ここに何を書けば・・???? return view('hoge.index'); }
このようなことは可能でしょうか??
すみません、ご教示お願い致しますm(_ _)m