Я пытаюсь создать приложение React на основе API Laravel, поэтому, по сути, использую маршрутный маршрут для клиентской маршрутизации, а затем просто группу маршрутизации API для обработки данных.
Это мой routes/web.php
file:
<?php
/*
|--------------------------------------------------------------------------
| Web Routes
|--------------------------------------------------------------------------
|
| Here is where you can register web routes for your application. These
| routes are loaded by the RouteServiceProvider within a group which
| contains the "web" middleware group. Now create something great!
|
*/
Route::get('/payment/redirect/{orderId}', ['as' => 'mollie.redirect', 'uses' => 'Controller@index']);
Route::get('/{any}', ['as' => 'index', 'uses' => 'Controller@index'])->where('any', '.*');
И это мой routes/api.php
file:
<?php
use Illuminate\Http\Request;
/*
|--------------------------------------------------------------------------
| API Routes
|--------------------------------------------------------------------------
|
| Here is where you can register API routes for your application. These
| routes are loaded by the RouteServiceProvider within a group which
| is assigned the "api" middleware group. Enjoy building your API!
|
*/
Route::post('/orders', ['as' => 'orders.store', 'uses' => 'OrdersController@store']);
Route::post('/payment/webhook', ['as' => 'mollie.webhook', 'uses' => 'OrdersController@webhook']);
, что приводит к:
Но всякий раз, когда я пытаюсь сделать запрос в POST api/orders
, это то, что я получаю в Почтальоне:
Что это такое?Controller@index
должен отвечать, а не OrdersController@store
, который должен быть ответом JSON.
Это мой OrdersController
код:
<?php
namespace Http\Controllers;
use Customer;
use Http\Requests\OrderCreateRequest;
use Order;
use Product;
use Services\CountryDetector;
use Services\LanguageService;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\App;
use Illuminate\Support\Facades\Route;
class OrdersController extends Controller
{
const ERROR_PRODUCT_COUNTRY_UNAVAIALBLE = 'errors.products.country_unavailable';
public function store(OrderCreateRequest $request, LanguageService $language, Order $orders, Customer $customers, Product $products)
{
$customer = $customers->firstOrCreate(['email' => $request->input('customer.email')], [
'name' => $request->input('customer.fullname'),
'email' => $request->input('customer.email'),
'phone' => $request->input('customer.phone'),
'country' => $language->getCurrentCountry(),
'company_name' => $request->input('customer.company_name'),
'city' => $request->input('customer.city'),
'optin_newsletter' => $request->input('customer.newsletter')
]);
$product = $products->find($request->input('cart.product_id'));
$pricing = $product->getCountryPrice($language->getCurrentCountry());
if (! $pricing)
{
return response()->json([
'error' => trans(self::ERROR_PRODUCT_COUNTRY_UNAVAILABLE, ['productName' => $product->name])
], 422);
}
$order = $orders->create([
'customer_id' => $customer->id,
'product_id' => $product->id,
'product_flavor' => $request->input('cart.flavor'),
'amount' => $pricing->amount,
'vat_amount' => $pricing->vat_amount,
'currency' => $pricing->currency,
'carehome_selection' => $request->input('carehome.custom'),
'carehome_name' => $request->input('carehome.name'),
'carehome_type' => $request->input('carehome.type'),
'carehome_address' => $request->input('carehome.address'),
'carehome_city' => $request->input('carehome.city'),
'carehome_notes' => $request->input('carehome.notes'),
'custom_message' => $request->input('gifting_options.message'),
'is_anonymous' => $request->input('gifting_options.anonymous'),
'wants_certificate' => $request->input('gifting_options.certificate'),
'status' => Order::STATUS_PENDING,
'type' => $request->input('payment_type')
]);
$mollie = $order->getOrCreateMollie();
return response()->json([
'mollie_redirect' => $mollie->getCheckoutUrl()
]);
}
}
Кроме того, если я пытаюсь удалить APIвременно, и все еще пытаюсь получить к ним доступ, я довольно странно получаю 404, что означает, что Laravel может определить маршрут, но использует неправильный ответ контроллера.
Как мне это исправить?