2014-09-24 3 views
0

Я получаю MethodNotAllowedHttpExceptions после попытки добавления вспомогательной библиотеки в laravel 4. Я создал класс в приложении/library/Time.php, я добавил папку «library» в файл composer.json, под classmap.Laravel MethodNotAllowedHttpException при создании библиотеки

В моем файле global.php я добавил: app_path(). '/ Libraries' в массив addDirectories. Впоследствии я сделал ./composer.phar dump-autoload.

И под моим loginController, где я пытаюсь использовать класс. Ниже этого класса.

приложения/библиотеки/Time.php

class Time { 

// convert times to user submitted time 
public function set($zone) 
{ 
    // Get user timezone from map 
    $timezone = $this->get($zone); 

    // set default timezone 
    date_default_timezone_set($timezone); 
} 

// maps the timezone the user gives 
private function get($time) 
{ 
    $zone = Array(
     'PST' => 'America/Los_Angeles', 
     'MST' => 'America/Denver', 
     'CST' => 'America/Chicago', 
     'EST' => 'America/New_York', 
     'HST' => 'America/Adak', 
     'AKST' => 'America/Anchorage' 
    ); 

    return $zone[$time]; 
} 
} 

Я интересно, как я могу держать HttpException от случаться и где я мог бы идти неправильно в создании этой библиотеки.

ОБНОВЛЕНИЕ: для людей, интересующихся, loginController является контроллером ресурсов, и я вызываю класс в store() следующим образом: Time :: store ($ zone); Это одна строка, вызывающая ошибку.

ответ

1

Я не уверен, что это вызывает вашу проблему, но set не является статическим методом в вашем классе. Попробуйте следующее:

public static function set($zone) 
{ 
    // Get user timezone from map 
    $timezone = self::get($zone); 

    // set default timezone 
    date_default_timezone_set($timezone); 
} 


// maps the timezone the user gives 
private static function get($time) 
{ 
    $zone = Array(
     'PST' => 'America/Los_Angeles', 
     'MST' => 'America/Denver', 
     'CST' => 'America/Chicago', 
     'EST' => 'America/New_York', 
     'HST' => 'America/Adak', 
     'AKST' => 'America/Anchorage' 
    ); 

    return $zone[$time]; 
} 
+0

Ты мой друг мужчина. Вот и все. Я не был уверен, как вызвать get, не используя $ this-> get. Но эти функции не являются статическими. Это решило это. – jamadri

+0

Не беспокойтесь, рад, что это помогло. Возможно, вам захочется взглянуть на такие вещи, как «поставщик услуг». Здесь есть хорошая статья: http://fideloper.com/create-facade-laravel-4 – RobbieP

+0

Спасибо. Я очень ценю ссылку. Я посмотрю на него и, возможно, поменяю его, чтобы он работал. Сейчас же, крайние сроки: P – jamadri

0

MethodNotAllowedHttpException ошибка связана с методом HTTP, который вы используете в вашем маршруте:

Итак, если у вас есть:

Route::get('posts', ...); 

Laravel не будет принимать POST к этому маршруту, вам нужно создать

Route::post('posts', ...); 

Вы также можете иметь неоднозначный маршрут: маршрут которым не должны были быть удара, в настоящее время попали вместо другой. Это может привести к столкновению маршрута:

Route::get('{name}', ...); 

Route::resource('posts', ...); 

Если вы пытаетесь ударить /posts будет ударить сначала получить, а не ресурсы.

+0

@Antonio_Carlos_Ribeiro Маршрут - сообщение. Это контроллер ресурсов, и он вызывается в loginController под функцией store(). Так что это должен быть почтовый маршрут. Кроме того, маршрут работает без этой одной строки: Time :: set ($ zone); – jamadri

+0

Отредактировано для добавления другой возможности. –

+0

Итак, я выполнил маршрут ./artisan, чтобы проверить маршруты в моем приложении. Я не вижу никаких столкновений, но просто вставляю, я загрузил свои маршруты в pastebin здесь: http://laravel.io/bin/mJQ39. ** POST-портал/магазин ** - это тот, который вызывает проблему. – jamadri

Смежные вопросы