PHP Slim 3 Framework - Почему маршрутизация не загружает файлы контроллера автоматически? - PullRequest
0 голосов
/ 27 ноября 2018

Я регистрирую контроллер в контейнере, но, похоже, он не работает, потому что он не соответствует правильному расположению.

\ web \ index.php

<?php


require __DIR__ . '/vendor/autoload.php';


// Instantiate the app
 $app = new \Slim\App(['settings' => ['displayErrorDetails' => true] ]);


$app->get('/', 'App\controllers\HomeController:home'); 


// Run!
$app->run();

\ web\ App \ controllers \ HomeController.php

<?php

namespace App\controllers\HomeController; 

class HomeController
{
   protected $container;

   // constructor receives container instance
   public function __construct(ContainerInterface $container) {
       $this->container = $container;
   }

    public function __invoke($request, $response, $args) {
        // your code
        // to access items in the container... $this->container->get('');
        return $response;
   }

   public function home($request, $response, $args) {
        // your code
        // to access items in the container... $this->container->get('');
        return $response;
   }

   public function contact($request, $response, $args) {
        // your code
        // to access items in the container... $this->container->get('');
        return $response;
   }
}

Из-за ошибки приложения Slim:

Ошибка приложения Slim Не удалось запустить приложение из-за следующей ошибки:

Подробности Тип: RuntimeException Сообщение: Callable App \ controllers \ HomeController не существует Файл: /Users/feikeq/Desktop/vendor/slim/slim/Slim/CallableResolver.php Строка: 90

Структура папки моего проекта:

\web 
  index.php
    \App 
    \controllers 
      HomeController.php 
  \vendor 
  

Почему это не так?Thk

1 Ответ

0 голосов
/ 28 ноября 2018
  1. Изменить пространство имен App\controllers\HomeController на App\controllers на \web\App\controllers\HomeController.php

  2. Изменить \ web \ index.php

    <?php
    require __DIR__ . '/vendor/autoload.php';
    // Instantiate the app
    $app = new \Slim\App(['settings' => ['displayErrorDetails' => true] ]);
    $container = $app->getContainer();
    $container['App\controllers\HomeController'] = function ($c) {
        return new App\controllers\HomeController($c);
    };
    $app->get('/', 'App\controllers\HomeController:home'); 
    // Run!
    $app->run();
    
...