سؤال

لقد حصلت على بسيطة CakePHP site (1.2).لدي صفحة يمكنك من خلالها تعديل شخص ما وحفظه.لذلك لدي نموذج شخص ووحدة تحكم.

ليس لدى كل شخص أي تعليقات أو أكثر في جدول التعليقات.إذن لدي نموذج التعليق، ولدي ارتباط hasMany في نموذج الشخص الخاص بي إلى نموذج التعليق.العرض يعمل بشكل رائع.

سؤالي هو، في صفحة عرض الشخص، لدي زر إضافة تعليق.كيف ينبغي أن يعمل هذا؟هل أتوقع أن تتضمن وحدة تحكم الشخص حفظًا لسجل التعليق، أو إنشاء وحدة تحكم تعليق وحفظها خارج ارتباطها بشخص ما؟

لدي خبرة في PHP، لكني جديد تمامًا على Cake.

أيه أفكار؟أعتقد أنني أفتقد شيئًا واضحًا، لكنني لست متأكدًا مما يجب فعله.أشعر لو كان هذا PHP أود أن أشير إلى Person_id في نموذج إضافة التعليق الخاص بي، وبالتالي استخدم وحدة تحكم منفصلة، ​​ولكني أشعر أن وجود وحدة تحكم لنموذج بسيط غير مجدي، حيث يتم تحرير التعليقات فقط في سياق سجل الشخص.

أفكار؟

هل كانت مفيدة؟

المحلول

أنا لست خبيرًا في CakePHP، لكنني ما زلت أعتقد أنه من المنطقي أن يكون لديك وحدة التحكم الخاصة بك.مما أتذكره من القيام بأحد دروس مدونة CakePHP هو أنك تحتاج إلى ربط التعليقات والمنشور في نموذج التعليق.وهذا بعض من الكود الذي لدي منه:

class Comment extends AppModel
{
  var $name = ‘Comment’;
  var $belongsTo = array(‘Person’);
}

وبعد ذلك تحتاج إلى وحدة تحكم (comments_controller.php):

class CommentsController extends AppController
{
  var $name = ‘Comments’;
  var $scaffold;
}

بعض SQL:

CREATE TABLE comments (
  id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
  author VARCHAR(50),
  comment TEXT,
  person_id INT,
  created DATETIME DEFAULT NULL,
  modified DATETIME DEFAULT NULL
);

ال $scaffold ينشئ لك تطبيق CRUD، لذلك عندما تنتقل إلى /comments في متصفحك، يمكنك ذلك جرد, صإياد, شالتاريخ و دتعليقات النخبة.لذلك، كما ترون، ليس هناك الكثير من المشاركة هنا.كل ما تحتاجه هو جداول قاعدة البيانات الخاصة بك والقليل من المنطق لتوفير person_id.

لحفظ تعليق (في شخصك/عرضك):

<h2>Add comment</h2>
<?php
echo $form->create(‘Comment’, array(‘action’=>‘add/’.$person[‘Person’][‘id’]);
echo $form->input(‘author’);
echo $form->input(‘content’);
echo $form->submit(‘Add comment’);
echo $form->end();
?>

وفي وحدة التحكم بالتعليقات الخاصة بك:

function add($id = NULL) {
  if (!empty($this->data)) {
    $this->data['Comment']['person_id'] = $id;
    $this->data['Comment']['id'] = '';
    if ($this->Comment->save($this->data)) {
      $this->Session->setFlash('Commented added');
      $this->redirect($this->referer());
    }
  }
}

لذلك تقوم بشكل أساسي بالكتابة فوق إجراء الإضافة القياسي، الذي يضيفه Cake بنفسه.نأمل أن يكون هذا منطقيا الآن.أيضًا، قد تحتاج إلى مسار حتى يلتقط /comments/add/ID.لا أعرف عن هذا الجزء.:)

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top