1

Тема: Проблема с action

Мне надо чтобы некий action добавлял текст полученный из формы в базу данных. В модели создан класс Article. это таблица из БД. Я в нем написал функцию Add. Но когда я в action пытаюсь создать объект article чтобы вызвать Add, то я получаю ошибку. Т.е. в классе контроллера нет сведений об классах модели.
Что делать? Как правильно спроектировать? Мне нужно чтобы тект оставленный в форме добавлялся в БД.

2

Re: Проблема с action

Пример кода приведи плиз

3

Re: Проблема с action

это код для actions:

<?php

class contentActions extends sfActions
{
   public function executeShow()
   {
   }

   public function executeShowaddarticleform()
   {
   }

   public function executeAddarticle($request)
   {
     $title = $request->getParameter('title');
     $commenttext = $request->getParameter('comment');
     $article = new Article();
     $article->add($title, $commenttext);
     $this->redirect('content/show');
     return sfView::NONE;
   }
}

это код для модели БД, точнее для таблицы которая хранит записи блога. точнее я здесь немного напутал с названиями. Под словом comment я подразумеваю запись в блоге а не комментарий к ней. Но это не так важно. это я исправлю.

<?php

class Article extends BaseArticle
{
   public function add($title, $commenttext)
   {
         this->setTitle($title);
         this->setContent($commenttext);
         this->save;
   }
}

Вобщем мне нужно написать простейший блог в симфони. Чтобы добавлять записи и комментарии к ним.

4

Re: Проблема с action

Так, у тебя опечатка в коде?

<?php
class Article extends BaseArticle
{
   public function add($title, $commenttext)
   {
         $this->setTitle($title);
         $this->setContent($commenttext);
         $this->save();
   }
}

$this  с долларом надо.

И зачем тебе новый метод? почему бы сразу не писать вот так

<?php
class contentActions extends sfActions
{
   public function executeShow()
   {
   }
   public function executeShowaddarticleform()
   {
   }
   public function executeAddarticle($request)
   {
     $title = $request->getParameter('title');
     $commenttext = $request->getParameter('comment');

     $article = new Article();
     $article->setTitle($title);
     $article->setContent($commenttext);
     $article->save();

     $this->redirect('content/show');
   }
}

5

Re: Проблема с action

Прежде чем начинать писать с использование любого фреймворка, нужно для начала ознакомится с его документацией.

В твоем случае очень много "бредовых вещей" - мягко выражаясь.

к примеру

$article->add($title, $commenttext);

или

this->setTitle($title);
this->save;

В общем не обижайся, но ты явно прочитал только из всех доков дай боже 1-2 раздела, и мой тебе совет не хочешь читать доки, прочти практикум jobeet

6

Re: Проблема с action

тут нужно начинать все сначало
помоему, у вас в корне неправильная архитекутра

 $article->add($title, $commenttext);

такого в симфони не бывает

показывайте схему

7

Re: Проблема с action

Круто ребята, так запостить ответы? Оперативно default/smile

8

Re: Проблема с action

У меня такая беда - в jobeet описывается работа с Doctrine какойто.
Вобщем мне не понятно как проектировать взаимодействие контроллера (т.е. actions) и model layer. На самом деле я читал доку The book к симфони и не раз. Но там как раз именно вопрос взаимодействия котроллера с моделью практически не описан.  В jobeet тоже я не нашел пользы особой.
Может быть у когото есть простенький проект в котором описывается этот вопрос? или объясните на пальцах. Мне кажется там довольно просто как-то. Только надо знать как. А я не знаю.

9

Re: Проблема с action

ingvar, большое спасибо за приведенный код default/smile

10

Re: Проблема с action

Roman, вот моя схема - если я правильно понял что такое схема. Если нет то объясните пожалуйста что именно нужно описать.
propel:
  blog_article:
    _attributes: { phpName: Article }
    id:           
    title:       varchar(255)
    content:     longvarchar
    created_at:  date
  blog_comment:
    _attributes: { phpName: Comment }
    id:         
    article_id: 
    author:      varchar(255)
    content:     longvarchar
    created_at:

11

Re: Проблема с action

ingvar,
да.... забыл...
код конечно я исправил. но ошибка то та же выползает все равно:
Fatal error: Class 'Article' not found in Z:\home\localhost\www\sf_sandbox\apps\frontend\modules\content\actions\actions.class.php on line 17

Т.е. в классе где actions - там класс Article, при создании объекта, не распознается. Это говорит об ошибке проектирования или нужно просто включить файл с этим классом в actions?

12

Re: Проблема с action

Article это модель, попробуй очистить кеш, похоже что не подгружен класс.

13

Re: Проблема с action

Очистил кэш но теперь появилась новая ошибка. Не могу найти хорошего ответа в гугле.
Unable to open PDO connection [wrapped: could not find driver]

php_sqlite.dll и php_pdo_sqlite.dll подключил (вроде бы на  них sf_sandbox ссылается - точно не понял). что еще сделать не знаю.

14

Re: Проблема с action

phpinfo() что показывает? может PDO не установлено?

15

Re: Проблема с action

я один думаю, что автору для начала надо почитать побольше ?

16

Re: Проблема с action

ну а зачем гугл

у вас снова нет PDO

смотрите php.ini

17

Re: Проблема с action

Да нет... PDO установлено. phpinfo показывает что pdo-драйвер mysql - enabled.

18

Re: Проблема с action

симфония говорит обратное почемуто

19

Re: Проблема с action

prog90, на нашем форуме уже поднималась эта тема.

Проверьте чтобы в CLI режиме PDO  тоже было включено.

php -m

http://forum.symfony-project.org/index.php/m/70621/

20

Re: Проблема с action

Проверил - вот что дала команда:
[PHP Modules]
bcmath
calendar
com_dotnet
ctype
date
dom
filter
ftp
gd
hash
iconv
json
libxml
mysql
mysqli
odbc
pcre
PDO
pdo_mysql
pdo_sqlite
Reflection
session
SimpleXML
SPL
SQLite
standard
tokenizer
wddx
xml
xmlreader
xmlwriter
xsl
zlib

[Zend Modules]


C:\>

21

Re: Проблема с action

Еще ошибка появилась в файле SF_ROOT_DIR\lib\symfony\plugins\sfPropelPlugin\lib\vendor\propel\util\BasePeer.php

Unable to execute INSERT statement. [wrapped: SQLSTATE[HY000]: General error: 1 no such table: blog_article]


На странице в комментарии к коду в котором это произошло написано вот что:
// If the primary key column is auto-incremented, get the id now

22

Re: Проблема с action

Поле id должно быть таким как я написал, а не пустым

propel:
  blog_article:
    _attributes: { phpName: Article }
    id:           ~
    title:       varchar(255)
    content:     longvarchar
    created_at:  date

Вы создали sql файлы?

php symfony propel:build-sql

Вы создали таблицы в БД?

php symfony propel:insert-sql

Таблицы есть в БД?

Модели сгенерированы, кеш очистен?

Рекомендую пройтись по Jobeet с начала, там все основы расписаны очень подробно и быть внимательным.

23

Re: Проблема с action

Спасибо. Заработало.