Просмотр только версии приложения с вызовом Lumen POST API

Я новичок в Люмен. Я начал использовать Lumen в MAC OS и запускать его в док-контейнере.

Служба приложения в файле Docker выглядит следующим образом:

app:
build:
  context: ./
  dockerfile: app.dockerfile
working_dir: /var/www
volumes:
  - ./:/var/www
environment:
  - "DB_PORT=3306"
  - "DB_HOST=database"

Служба mysql также работает отлично. При открытии http://localhost:9002/ я вижу обычное управление версиями приложения Lumen:

Lumen (5.4.6) (Laravel Components 5.4.*)

Теперь я сделал конечную точку API для простых смс, которые будут подтверждены. Пользователь должен отправлять с и на номера телефонов, а я просто проверяю их по данным, представленным в БД, и возвращаю результат.

Мой route.php читает:

$app->post('/outbound/sms', 'App\Http\Controllers\SmsController@sendSms');

Мой SmsController также присутствует в App\Http\Controllers. Он использует модель PhoneNumber, как показано ниже:

use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use App\PhoneNumber;
use Illuminate\Support\Facades\App;

public function sendSms(Request $request)
{

        try
        {
            $fromModel = PhoneNumber::findOrFail($request->input('from'));
        }
        catch(ModelNotFoundException $e)
        {
            return response()->json(['message'=> '', 'error'=> 'from is not found']);
        }

        try
        {
            $toModel = PhoneNumber::findOrFail($request->input('to'));
        }
        catch(ModelNotFoundException $e)
        {
            return response()->json(['message'=> '', 'error'=> 'to is not found']);
        }

        $this->validateSms($_REQUEST);

        return response()->json(['message'=> 'inbound sms ok', 'error'=> '']);
}

Мой файл .htaccess гласит:

<IfModule mod_rewrite.c>
    <IfModule mod_negotiation.c>
        Options -MultiViews
    </IfModule>

    Options +FollowSymLinks
    RewriteEngine On

    # Redirect Trailing Slashes If Not A Folder...
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)/$ /$1 [L,R=301]

    # Handle Front Controller...
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^ index.php [L]

    # Handle Authorization Header
    RewriteCond %{HTTP:Authorization} .
    RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]

</IfModule>

При выполнении вызова POST API от Почтальона,

http://localhost:9002/outbound/sms?from=1234567890&to=3456789&text=hi

Я всегда получаю версию приложения в ответ:

Lumen (5.4.6) (Laravel Components 5.4.*)

Даже добавление index.php к URL не работает. Не можете понять, что не так?

Обновление: наконец-то у меня нормально работают маршруты. Содержимое моего rout.php должно было находиться в файле rout /web.php вместо App\Http.

Теперь я получаю NotFoundHttpException. Ниже приведена трассировка стека:

in RoutesRequests.php (line 594)
at Application->handleDispatcherResponse(array(0))

in RoutesRequests.php (line 532)
at Application->Laravel\Lumen\Concerns\{closure}()

in RoutesRequests.php (line 781)
at Application->sendThroughPipeline(array(), object(Closure))

in RoutesRequests.php (line 534)
at Application->dispatch(object(Request))

in RoutesRequests.php (line 475)
at Application->run(object(Request))

in index.php (line 29)

2 ответа

Наконец-то появилась причина этого NotFoundHttpException:

Добавлены следующие строки в index.php:

$app = require __DIR__.'/../bootstrap/app.php';

$request = Illuminate\Http\Request::capture();

$app->run($request);

Решение по ссылке ниже:

http://laravel-tricks.com/tricks/notfoundhttpexception-lumen.

Для тех, кто сталкивается с этим вопросом, пожалуйста, не забудьте оставить свои маршруты в /routes/web.php.

Я столкнулся с такой же ситуацией, чтобы использовать Lumen для REST API. У меня сработало перемещение маршрутов из App/routes.php в route/web.php. Мне не потребовалось менять index.php.

Другие вопросы по тегам