Ввод Fuelphp и проблема сеанса в модели

Я столкнулся с проблемой, которую на самом деле не могу решить (я новичок с fuelphp).

Поэтому, когда я помещаю ввод в свою модель, я получаю эту ошибку

ErrorException [ Error ]: Class 'Model\Input' not found

когда я пытаюсь с сеансом, это то же самое

ErrorException [ Error ]: Class 'Model\Session' not found

И когда я пытаюсь жестко закодировать значение, которое не вставляется, отладил запрос без ошибок. он показывает, что значение отправлено (при передаче значения жесткого кода), но не вставляет его в базу данных.

мой код

модель

namespace Model;
use DB;

    class Event extends \Model {

        static function send_event()
        {
            $query = DB::insert('events');

            $query->set(array(
                'user_id' => Session::get('sentry_user'),
                'event_name' => Input::post('event_name'),
                'event_desc' => Input::post('event_desc'),
                'event_start' => Input::post('event_start'),
                'event_end' => Input::post('event_end'),
            ));
        }

}

контролер

function action_send_data()
{
    $response = Response::forge();
    $val = Validation::forge('events');

    $val->add_field('event_name', 'Esemény neve', 'required');
    $val->add_field('event_desc', 'Esemény leírás', 'required');
    $val->add_field('event_start', 'Esemény kezdődik', 'required');
    $val->add_field('event_end', 'Esemény kejár', 'required');  


    Event::send_event();
    $response->body(json_encode(array(
        'status' => 'ok',
    )));


    return $response;
}

может кто-нибудь подскажет, что я делаю не так?

Спасибо

P.S: в контроллере я удалил проверку для отладки запросов


person Side    schedule 17.08.2012    source источник


Ответы (1)


Когда вы объявляете пространство имен в верхней части файла, как вы это сделали с

namespace Model;

Это объявляет пространство имен для всех вызываемых классов, где пространство имен явно не определено. Например, ваш вызов Session фактически просматривается в Model\Session, когда он действительно существует в \Fuel\Core\Session

Есть два способа обойти это. Вы сами продемонстрировали пример в своем вопросе с помощью вызова языковой конструкции use.

use DB;

Это заставляет PHP искать классы в этом пространстве имен, а также в том, которое уже используется (в данном случае Model).

Другой способ сделать это - вызвать класс с явным пространством имен. Например

\Fuel\Core\Session::get();

Fuel также для удобства присваивает всем базовым классам псевдоним корневого пространства имен. Это означает, что вы также можете напрямую вызывать классы в \Fuel\Core, просто используя \. Например

\Session::get();
person Ben Swinburne    schedule 17.08.2012
comment
сначала извините за медленный ответ, и спасибо, что указали на это, и большое спасибо за объяснение, вы очень помогли - person Side; 21.08.2012
comment
Никогда не используйте \ Fuel \ Core в качестве пространства имен. Это внутреннее пространство имен фреймворка. Если вы это сделаете, вы обойдете систему псевдонимов, что означает, что расширения базового класса больше не работают. - person WanWizard; 03.09.2012
comment
@WanWizard, это все еще можно сделать, если вы хотите использовать оригинал после замены оригинала. Это даже задокументировано здесь. Однако это может быть не очень хорошей практикой, но все же вероятным вариантом использования. - person Ben Swinburne; 03.09.2012