0

次のモデル関係があります

Post belongsto PostCategory
PostCategory belongsto Forum
PostSubcat belongsto PostCategory

PostCategory hasmany Post
PostCategory hasmany PostSubcat
Forum hasmany PostCategory.

ForumsController add() メソッドに取り組んでいますが、標準の find('list') を使用して、ユーザーが投稿を追加できるすべてのフォーラム、カテゴリ、およびサブカテゴリを表示できませんでした。たとえば、ドロップダウンは次のようになります...

- Forum #1 Title
    - Category #1.1 Title
        - Subcat #1.1 Title
        - Subcat #1.2 Title
    - Category #1.2 Title
    - Category #1.3 Title
        - Subcat #2.1 Title
        - Subcat #2.2 Title
- Forum #2 Title
    - Category #2.1 Title
    - Category #2.2 Title

代わりに、私は find('all') をそのようにしました...

$forums = $this->Forum->find('all', array(
    'fields' => array('Forum.title'),
    'conditions' => array('Forum.page_id' => $page_id),
    'contain' => array(
        'PostCategory' => array(
            'fields' => array(
                'PostCategory.id', 'PostCategory.title'
            ),
            'PostSubcat' => array(
                'fields' => array(
                    'PostSubcat.id', 'PostSubcat.title'
                ),
            )
        )
    )
));

$this->set('forums', $forums);

私のadd.ctpフォーラムには、選択用の次のコードがあります

<?php if($forums): ?>
    <div class="input select required"><label for="PostCategoryId">Category</label>
    <select name="data[Post][category_id]" id="PostCategoryId">
        <option value="">Select a Category</option>
        <?php foreach($forums as $forum): ?>
            <?php if(!empty($forum['PostCategory'])): ?>
                <option value="" class="SelectSeparator"><?php echo $forum['Forum']['title']; ?></option>
                <?php foreach($forum['PostCategory'] as $category): ?>
                   <?php if($category_id == $category['id']){
                       $selected = "selected";
                   }else{
                       $selected = "not";
                   } ?>
                   <option value="<?php echo $category['id']; ?>" <?php echo $selected;?>><?php echo $category['title']; ?></option>
                   <?php foreach($category['PostSubcat'] as $subcat): ?>
                       <?php if($category_id == $subcat['id']){
                           $selected = "selected";
                       }else{
                           $selected = "not";
                       } ?>
                       <option value="<?php echo $subcat['id']; ?>"<?php echo $selected;?>>-- <?php echo $subcat['title']; ?></option>
                   <?php endforeach; // subcat?>
               <?php endforeach; // category ?>
           <?php endif; // if forum has categories ?>
       <?php endforeach; // forum?>
   </select> 
   </div>
<?php endif; // if there are forums ?>

これにより、選択オプションが希望どおりに表示され、正しく検証されます。ユーザーがフォーラムのタイトルを選択した場合、またはカテゴリのタイトルではなく「カテゴリを選択」を選択した場合、投稿は追加されません。ただし、Cake に適した形式ではないため、検証エラーは表示されません。

これを CakePHP の Form->input ヘルパーに簡単に変換して、検証エラー メッセージが適切に表示されるようにする方法はありますか?

4

0 に答える 0