
সমস্যা
Recentemente, interessado em ver como os Middleware funcionam, আমি ইনস্টলেশনের করেনি “zend-expressive-skeleton” conforme o Guia “Quick Start: Using the Skeleton + Installer”:
$ composer create-project zendframework/পার্সি-জাতির প্রাচীন শাস্ত্রগ্রন্থ-ভাবপূর্ণ-skeleton expressive |
এর পরে, para checar o resultado, acessei o navegador no endereço HTTP://localhost/expressive/public/ e peguei o seguinte erro:
Oops! এই বিশ্রী. We encountered a 404 খুঁজে পাওয়া যায় নি ত্রুটি. You are looking জন্য something that doesn't exist or may have moved. Check out one of the links on this page or head back to Home. |
সমাধান
A mensagem de erro indicava que a página não tinha sido encontrada, অতএব, parecia um problema de PATH (caminho) para os arquivos da aplicação.
Dando uma olhada por aí, cheguei a conclusão que isto aconteceu por eu não ter criado o projeto diretamente na raiz do diretório de publicação (প্রাক্তন: www/ ou htdocs/), mas em um subdiretório, desse jeito: HTTP://localhost/ভাবপূর্ণ/public/.
পরিণামে, parece que o Expressive tem alguma dificuldade com Base Url / Base Path. Na verdade a própria arquitetura do Zend Framework convenciona que o diretório de publicação deve ser o “public/“, tanto que se você rodar o servidor Web apontando para “public/“, a aplicação funciona normalmente.
Rodando o comando “php -S 0.0.0.0:8080 -t public/” pelo terminal (আদেশ):
Taylor@taylor-pc MINGW64 /c/wamp64/www/expressive $ php -S 0.0.0.0:8080 -t public/ PHP 7.0.10 Development Server started at Thu Aug 10 15:55:00 2017 Listening on http://0.0.0.0:8080 Document root is C:\wamp64\www\expressive\public Press Ctrl-C to quit. [Thu Aug 10 15:55:34 2017] 127.0.0.1:65106 [404]: /expressive/public/ |
হ্যা এখন, fazendo isto é possível acessar HTTP://localhost/expressive/public/ sem qualquer erro.
Mas para não ficar nessa de sempre apontar para “public/“, existe o Middleware লস/basepath como solução de contorno. ইনস্টলেশন সহজ:
$ রচয়িতা require los/basepath |
এর পরে, basta adicionar o Middleware como um dos primeiros na sua aplicação. উদাহরণস্বরূপ, eu coloquei a chamada no arquivo “public\index.php”, logo após “$app” ter sido inicializada:
1 | $app->pipe(new \LosMiddleware\BasePath\BasePath('/expressive/public')); |
এটাই সব!
Referência
– Access /path/to/public got 404 page
– Base Path Middleware for PHP
মহান মান! এটা আমার এখানে সমস্যা যা অত্যন্ত অনুরূপ ছিল নির্মল সাহায্য. ধন্যবাদ!