1

ATK4CRUDでサポートが必要です。AgileToolkit4.1.3を使用してプロジェクトのバックエンドを構築しました。私は次のモデルを持っています:

class Model_Product extends Model_Table
{
public $entity_code = 'product';

function init()
{
    parent::init();

    $this->addField('category_id')->refModel('Model_Category')->mandatory(true);
    $this->addField('name')->mandatory(true);
    $this->addField('picture_id')->refModel('Model_Picture')->mandatory(true);
    $this->addField('short_description')->mandatory(true);
    $this->addField('description')->type('text')->mandatory(true);
    $this->addField('uploaded_at')->type('datetime');
    $this->addField('price')->type('int')->mandatory(true);
    $this->addField('quantity')->type('int')->mandatory(true);
    $this->addField('status')->datatype('list')
            ->listData(array(
                        'enabled'=>'Enabled',
                        'disabled'=>'Disabled',
                        ))
            ->defaultValue('enabled');
}
}

ページ:

<?php
class page_index extends Page {
function init(){
    parent::init();
    $page=$this;

    $tabs = $page->add('Tabs');
    $tabs->addTab('Product')->add('CRUD')->setModel('Product');
....

私のローカルホストでは、すべてのCRUD機能が問題なく機能しますが、ファイルをWebサーバーにアップロードした後、新しい製品を追加しようとすると、次のエラーが発生します。

`AJAX応答のエラー:SyntaxError:無効なXML属性値SQLException

クエリを実行できませんでした:製品に挿入(、、、、、、、、、)値(NULL category_id、 'as' name、 NULL picture_id、 '' short_description、 '' description、 NULL uploaded_at、2500、25、'有効')最後のクエリ:製品にprice挿入(、、、、、、、、、 )値(NULL 、 'as' 、 NULL 、 '' 、 '' 、 NULL 、2500、25、'有効')MySQLエラー:列'category_id'をnullにすることはできません`quantitystatuscategory_idnamepicture_idshort_descriptiondescriptionuploaded_atpricequantitystatus

クエリで欠落している値がクルード形式で表示されているのに、クエリに到達しないという奇妙なこと。追加情報:Model_Pictureでは、自動インクリメントintの代わりにvarchar idフィールドを使用しますが、ローカルホストではすべてが正常に機能します。

ありがとう!

4

3 に答える 3

1

私は次のようなタブの1ページにすべてのクラッド機能を持っていました:

<?php
class page_index extends Page {
function init(){
    parent::init();
    $page=$this;

    $tabs = $page->add('Tabs');
    $tabs->addTab('Product')->add('CRUD')->setModel('Product');
    $tabs->addTab('Category')->add('CRUD')->setModel('Category');
    $tabs->addTab('Property')->add('CRUD')->setModel('Property');
    $tabs->addTab('Property <> Product')->add('CRUD')->setModel('ProductProperty');
    $tabs->addTab('Payment options')->add('CRUD')->setModel('Payment');
    $tabs->addTab('Shipping options')->add('CRUD')->setModel('Shipping');
    $tabs->addTab('Users')->add('CRUD')->setModel('User');
    $tabs->addTab('Email addresses')->add('CRUD')->setModel('Email');
    $tabs->addTab('News')->add('CRUD')->setModel('News');
    $tabs->addTab('Downloads')->add('CRUD')->setModel('Download');
    $tabs->addTab('Designer Aids')->add('CRUD')->setModel('Aid');

}
}

次に、モデルごとに新しいページを作成し、各ページにCRUDを1つだけ追加すると、問題が解決し、ローカルホストとサーバーの両方で正常に機能するようになりました。

皆さんの助けに感謝します。

于 2012-01-07T16:32:40.597 に答える
0

どのプラットフォームで開発し、どのプラットフォームをオンラインに展開していますか。Windowsでローカルに開発し、オンラインでLinuxホストに移動したときに同様のエラーが発生した私の前の質問をここで確認できます-オンライン に移動したときにATK4モデルが見つかりません

その場合のエラーはLinuxの大文字と小文字を区別する問題に関連していましたが、Windowsは大文字と小文字の違いをより許容しているため、コードの最初の大文字と小文字を確認してください。

?>また、最近、クラスファイルにクロージングを含めたときに、4.1.3でCRUDを使用してAjaxからいくつかのエラーが発生しました。agiletoolkit.orgは、出力に無効な文字を導入して機能の一部を壊す可能性があるため、終了タグを使用しないことをお勧めします。したがって、各ファイルの先頭で使用していることを確認 し、最後の行では<?php省略してください。?>

于 2012-01-03T06:37:47.773 に答える
0

私はまた、必須フィールドがどのようにあるかについても困惑しています:

$this->addField('description')->type('text')->mandatory(true);

最終的にSQL挿入文字列でNULL値として渡されます。

(NULL, 'as', NULL, '', '', NULL, 2500, 25, 'enabled')

update()ATK4は、このフィールドが必須であることをすでに通知しているはずであり、必須フィールドがまだ空の場合、試行につながることはありません。

万が一、挿入する前にこのデータを何らかの方法で操作するように定義されたメソッドがありますbeforeInsert()か?beforeModify()

NULL値についてcategory_idは、新しいエントリを追加する場合、デフォルトでは、両方の項目が選択されていません。

$this->addField('category_id')->refModel('Model_Category')->mandatory(true);

$this->addField('picture_id')->refModel('Model_Picture')->mandatory(true);

したがって、新しいエントリを追加するときは、ユーザーは最初にリストから明示的に選択する必要があります。

私の場合、他のすべてが失敗した場合、beforeModify()メソッドに依存し、js()->fieldError通知をスローします。

これをモデルに挿入してみてください。

function beforeModify(&$data){
   if(empty($data['category_id'])){
      $this->owner->owner->js()->atk4_form('fieldError','category_id',
         'Select an category from the list')->execute();
      exit;
   }
}

$this->owner->ownerMVCFormオブジェクトに到達するには、を実験する必要がある場合があることに注意してください。

また、このexit()呼び出しは、内部render()メソッドがHTMLページを生成せず、Javascriptチェーンのみを生成するために重要です。

これがお役に立てば幸いです。

于 2012-01-07T03:28:08.040 に答える