beforeSave и id записи

Общие вопросы по использованию фреймворка. Если не знаете как что-то сделать и это про Yii, вам сюда.
dony
Сообщения: 183
Зарегистрирован: 2012.05.26, 16:50

Re: beforeSave и id записи

Сообщение dony »

htaccess добавил. спасибо за подсказку. забыл про него. но все равно не работает правильно. вот смотрите (я чуть чуть изменил) правильно ли написано условие для этой ссылки http://news.loc/news/show/17?slug=hgj

Код: Выделить всё

'urlManager' => array(
    'urlFormat' => 'path',
    'showScriptName'=>false,
    'rules' => array(
        'news/show/<id:\d+>-<slug:[a-z0-9-]+>' => 'show/view',
        '<controller:\w+>/<id:\d+>' => '<controller>/view',
        '<controller:\w+>/<action:\w+>/<id:\d+>' => '<controller>/<action>',
        '<controller:\w+>/<action:\w+>' => '<controller>/<action>',
        
    ),
), 
Последний раз редактировалось dony 2013.04.17, 00:13, всего редактировалось 1 раз.
rak
Сообщения: 2181
Зарегистрирован: 2010.11.02, 23:40
Контактная информация:

Re: beforeSave и id записи

Сообщение rak »

правильно, а как урл генерируется?
dony
Сообщения: 183
Зарегистрирован: 2012.05.26, 16:50

Re: beforeSave и id записи

Сообщение dony »

Последний раз редактировалось dony 2013.04.16, 23:48, всего редактировалось 2 раза.
rak
Сообщения: 2181
Зарегистрирован: 2010.11.02, 23:40
Контактная информация:

Re: beforeSave и id записи

Сообщение rak »

я имею ввиду код, который генерирует эту ссылку
dony
Сообщения: 183
Зарегистрирован: 2012.05.26, 16:50

Re: beforeSave и id записи

Сообщение dony »

rak писал(а):я имею ввиду код, который генерирует эту ссылку
Экшн

Код: Выделить всё

public function actionShow($id,$slug) {
        $news = News::model()->find('slug = :slug AND id = :id', array(':slug' => $slug, ':id'=>$id));
        $this->render('view', array('model' => $news));
    }
 
Линк

Код: Выделить всё

CHtml::link(CHtml::encode($data->title), array('show', 'slug'=>$data->slug, 'id'=>$data->id)) 
rak
Сообщения: 2181
Зарегистрирован: 2010.11.02, 23:40
Контактная информация:

Re: beforeSave и id записи

Сообщение rak »

ну дык вместо show нужно писать /controller/action
т.е. /show/view или типа того

Код: Выделить всё

CHtml::link(CHtml::encode($data->title), array('/show/view', 'slug'=>$data->slug, 'id'=>$data->id))
 
dony
Сообщения: 183
Зарегистрирован: 2012.05.26, 16:50

Re: beforeSave и id записи

Сообщение dony »

На локале не заработало, а на сервере заработало)) А ещё вопрос, после того как я прописал

Код: Выделить всё

CHtml::link(CHtml::encode($data->title), array('/show/view', 'slug'=>$data->slug, 'id'=>$data->id)) 
вместо

Код: Выделить всё

CHtml::link(CHtml::encode($data->title), array('show', 'slug'=>$data->slug, 'id'=>$data->id)) 
появилась ошибка

Код: Выделить всё

Unable to resolve the request "show/view". 
как это исправить?
Аватара пользователя
flashimage
Сообщения: 1517
Зарегистрирован: 2011.01.23, 12:43

Re: beforeSave и id записи

Сообщение flashimage »

Правило надо сделать по другому
'news/show/<id:\d+>-<slug:[a-z0-9-]+>' => 'news/show',
и соответственно ссылки формировать с news/show. (если у тебя контроллер news а экшен actionShow)
Бранчи это гомеоморфические эндофункторы, которые мапятся на субманифолды пространства Гилберта.
NESTA13
Сообщения: 8
Зарегистрирован: 2017.06.08, 14:26

Re: beforeSave и id записи

Сообщение NESTA13 »

Так как метод beforeSave говорит сам за себя, - данные начинают записываться, ещё до получения id вставленной записи, то подойдёт вполне такой вариант:

Код: Выделить всё

$this::find()->max('id') + 1;  //получим id той записи, которая создастся.
Александр
Ответить