$ Dispatcher = new Dispatcher (); // Класс контроллера ImagesController не найден - PullRequest
2 голосов
/ 28 ноября 2011

Доброе утро, ребята.
В error_log CakePHP обвиняет следующее:

28/11/2011 10:13:27 Error: [MissingControllerException] ImagesController Controller class could not be found.
# 0 /........./app/webroot/index.php (96): Dispatcher-> dispatch (Object (CakeRequest), Object (CakeResponse))
# 1 {main}

Я понятия не имею, что это такое, потому что у меня нет ImagesController , но есть ImagesComponent .

Фрагмент кода:

// app/Controller/BrandsController.php    
class BrandsController extends AppController {
public $components = array('Image');
...

public function add() {
    if ($this->request->is('post')) {
        if (!empty($this->request->data)) {

            if(!$this->request->data['Image']['name1']['error']) {
                $this->Brand->create();

                $image_path = $this->Image->uploadImage(
                    $this->request->data['Image'], 
                    'Brands',
                    array(
                        'folder'=>'upload/imagens/marcas',
                        'resize'=>175,
                        'thumb'=>0,
                        'original'=>false,
                        'name'=>$this->request->data['Brand']['brand']
                    )
                ); 

// app/Controller/Component/ImageComponent.php
class ImageComponent extends Component {

public $components = array('String');

function uploadImage($images, $controller, $data) {
    $erroimg = false;
    $isfile = false;
    ...

В чем причина этой ошибки?
Извините за мой английский

1 Ответ

1 голос
/ 28 ноября 2011

Ваш журнал ошибок показывает трассировку стека с методами, приводящими к ошибке. В вашем случае был вызван Dispatcher::dispatch. Документы этого метода гласят:

Отправляет и вызывает данный Запрос, передавая управление соответствующему контроллеру. Если контроллер установлен на autoRender через Controller::$autoRender, то Dispatcher отобразит представление. Действия в CakePHP могут быть любым открытым методом на контроллере, который не объявлен в Controller. Если вы хотите, чтобы методы контроллера были общедоступными и недоступными по URL, то добавьте к ним префикс _. Например, public function _loadPosts () {} `не будет доступно через URL. Частные и защищенные методы также не доступны через URL.

Если контроллер с данным именем не найден, invoke() выдаст исключение.
Если контроллер найден, а действие не найдено, будет сгенерировано исключение.

Внутренне диспетчер вызовет Dispatcher::parseParams, чтобы проанализировать Запрос, чтобы определить контроллер для вызова. Если какие-либо маршруты были настроены, parseParams будет применять их

Применяет Routing и дополнительные параметры к отправляемому запросу. Если маршруты не были загружены, они будут загружены, и будет запущен app / Config / rout.php.

Другими словами: вы запросили URL-адрес, который Dispatcher хочет передать в контроллер изображения. У вас нет ImageController, и поэтому вы получаете ошибку. Итак, добавьте ImageController или измените способ маршрутизации CakePHP.

...