Пользовательские имена таблиц в CakePHP - PullRequest
1 голос
/ 01 апреля 2011

Я создаю веб-сайт портфолио с использованием CakePHP и назвал мою модель «Портфолио», а мой контроллер - «PortfolioController», однако торт решает поискать таблицу под названием портфолио, а не просто портфолио!Как я могу это исправить, поскольку я не хочу называть свои портфели таблиц!

Также при работе с циклом foreach в представлениях, где есть такие выражения, как

<?php foreach ($posts as $post): ?> как бы яиметь дело с проблемой множественного числа с моим портфелем?

Спасибо

РЕДАКТИРОВАТЬ Вот файл index.ctp, где у меня есть проблема множественного числа:

<p><?php echo $this->Html->link("Add Post", array('action' => 'add')); ?></p>
<table>
    <tr>
        <th>Id</th>
        <th>Title</th>
                <th>Action</th>
        <th>Created</th>
    </tr>

<!-- Here's where we loop through our $posts array, printing out post info -->

<?php foreach ($posts as $post): ?>
    <tr>
        <td><?php echo $post['Portfolio']['id']; ?></td>
        <td>
            <?php echo $this->Html->link($post['Portfolio']['title'], array('action' => 'view', $post['Portfolio']['id']));?>
                </td>
                <td>
            <?php echo $this->Html->link(
                'Delete', 
                array('action' => 'delete', $post['Portfolio']['id']), 
                null, 
                'Are you sure?'
            )?>
            <?php echo $this->Html->link('Edit', array('action' => 'edit', $post['Portfolio']['id']));?>
        </td>
        <td><?php echo $post['Portfolio']['created']; ?></td>
    </tr>
<?php endforeach; ?>

</table>

РЕДАКТИРОВАТЬ Вотконтроллер:

<?php

class PortfolioController extends AppController
{
    var $helpers = array ('Html','Form');

    var $name = 'Portfolio';

    function index()
    {
        $this->set('portfolio', $this->Portfolio->find('all'));
    }

    function view($id = null)
    {
        $this->Portfolio->id = $id;
        $this->set('portfolio', $this->Portfolio->read());
    }

    function add()
    {
        if (!empty($this->data))
        {
            if ($this->Portfolio->save($this->data))
            {
                $this->Session->setFlash('Your post has been saved.');
                $this->redirect(array('action' => 'index'));
            }
        }
    }

    function delete($id)
    {
        if ($this->Portfolio->delete($id))
        {
            $this->Session->setFlash('The post with id: ' . $id . ' has been deleted.');
            $this->redirect(array('action' => 'index'));
        }
    }

    function edit($id = null)
    {
        $this->Portfolio->id = $id;
        if (empty($this->data))
        {
            $this->data = $this->Portfolio->read();
        }
        else
        {
            if ($this->Portfolio->save($this->data))
            {
                $this->Session->setFlash('Your post has been updated.');
                $this->redirect(array('action' => 'index'));
            }
        }
    }

}

?>

Ответы [ 2 ]

11 голосов
/ 01 апреля 2011
   Class Portfolio extends App_Model{

    public $useTable = 'portfolio';

  }

в вашей модели вы можете установить переменную $ useTable на то, что вам нужно.

в представлениях вы передаете значения переменных из контроллеров с помощью метода set

$this->set('portfolio',$array_of_data);

, поэтомуПервый параметр может быть чем угодно.

2 голосов
/ 01 апреля 2011

в действии индекса.

$this->set('portfolio', $this->Portfolio->find('all'));

см. Код здесь? вот что я имел ввиду.

вы устанавливаете переменную $ портфолио для вашего просмотра. поэтому вы должны изменить все переменные $ posts на переменные $ портфолио.

<p><?php echo $this->Html->link("Add Post", array('action' => 'add')); ?></p>
<table>
    <tr>
        <th>Id</th>
        <th>Title</th>
                <th>Action</th>
        <th>Created</th>
    </tr>

<!-- Here's where we loop through our $posts array, printing out post info -->

<?php foreach ($portfolio as $portfolio_item): ?>
    <tr>
        <td><?php echo $portfolio_item['Portfolio']['id']; ?></td>
        <td>
            <?php echo $this->Html->link($portfolio_item['Portfolio']['title'], array('action' => 'view', $portfolio_item['Portfolio']['id']));?>
                </td>
                <td>
            <?php echo $this->Html->link(
                'Delete', 
                array('action' => 'delete', $portfolio_item['Portfolio']['id']), 
                null, 
                'Are you sure?'
            )?>
            <?php echo $this->Html->link('Edit', array('action' => 'edit', $portfolio_item['Portfolio']['id']));?>
        </td>
        <td><?php echo $portfolio_item['Portfolio']['created']; ?></td>
    </tr>
<?php endforeach; ?>

</table>

или измените портфолио в методе set на подобные сообщения.

$this->set('posts', $this->Portfolio->find('all'));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...