Arhn - архитектура программирования

Можно ли создать правило urlManager, которое предварительно загружает объект на основе идентификатора?

Работая с Yii 2.0.4, я пытаюсь использовать правило urlManager для предварительной загрузки объекта на основе заданного идентификатора в URL-адресе.

конфиг/веб.php

'components' => [
    'urlManager' => [
        [
            'pattern' => 'view/<id:\d+>',
            'route' => 'site/view',
            'defaults' => ['client' => Client::findOne($id)],
        ],
        [
            'pattern' => 'update/<id:\d+>',
            'route' => 'site/update',
            'defaults' => ['client' => Client::findOne($id)],
        ],

    ]
]

Если это сработает, не нужно будет каждый раз вручную находить и возражать для некоторых действий CRUD:

class SiteController extends Controller {
    public function actionView() {
        // Using the $client from the urlManager Rule
        // Instead of using $client = Client::findOne($id);

        return $this->render('view', ['client' => $client]);
    }

    public function actionUpdate() {
        // Using $client from urlManager Rule
        // Instead of using $client = Client::findOne($id);

        if ($client->load(Yii::$app->request->post()) && $client->save()) {
                return $this->redirect(['view', 'id' => $client->id]);
            } else {
                return $this->render('edit', ['client' => $client]);
            }
    }

}

ПРИМЕЧАНИЕ. Приведенные выше фрагменты кода не работают. Это идея того, что я хочу получить

Является ли это возможным? Есть ли способ добиться этого?

23.07.2015

  • Я так не думаю. Глядя на источник defaults не иметь доступ к совпадающим параметрам из правила 24.07.2015

Ответы:


1

Если присмотреться: на самом деле ничего не меняется. Вы по-прежнему вызываете Client::findOne($id);, но теперь делаете это в неожиданном и неподходящем месте, и если вы посмотрите на комментарий к параметру default говорит:

Массив параметров GET по умолчанию (имя => значение), которые предоставляет это правило. Когда это правило используется для анализа входящего запроса, значения, объявленные в этом свойстве, будут внедрены в $_GET.

Параметр по умолчанию необходим, если вы хотите указать некоторые $_GET параметры для своего правила. Например.

[
    'pattern' => '/',
    'route' => 'article/view',
    'defaults' => ['id' => 1],
]

Здесь мы указываем статью с id = 1 как статью по умолчанию, когда вы открываете главную страницу сайта, например. http://example.com/ будет обрабатываться как http://example.com/article/view?id=1

Я могу предложить вам добавить свойство clientModel в ваш контроллер, а затем в методе beforeAction() проверить его действие update или view, а затем установить

$this->clientModel = Client::findOne($id);

и в вашем действии:

return $this->render('view', ['client' => $this->clientModel]);

25.07.2015
  • Спасибо. Я прочитал документ параметра «по умолчанию» перед публикацией своего вопроса, но я пытался объяснить, чего я хотел достичь. Тем не менее, я ценю ваше предложение по поводу beforeAction(). Я попробую, и опубликую здесь решение. 28.07.2015
  • Новые материалы

    Коллекции публикаций по глубокому обучению
    Последние пару месяцев я создавал коллекции последних академических публикаций по различным подполям глубокого обучения в моем блоге https://amundtveit.com - эта публикация дает обзор 25..

    Представляем: Pepita
    Фреймворк JavaScript с открытым исходным кодом Я знаю, что недостатка в фреймворках JavaScript нет. Но я просто не мог остановиться. Я хотел написать что-то сам, со своими собственными..

    Советы по коду Laravel #2
    1-) Найти // You can specify the columns you need // in when you use the find method on a model User::find(‘id’, [‘email’,’name’]); // You can increment or decrement // a field in..

    Работа с временными рядами спутниковых изображений, часть 3 (аналитика данных)
    Анализ временных рядов спутниковых изображений для данных наблюдений за большой Землей (arXiv) Автор: Рольф Симоэс , Жильберто Камара , Жильберто Кейрос , Фелипе Соуза , Педро Р. Андраде ,..

    3 способа решить квадратное уравнение (3-й мой любимый) -
    1. Методом факторизации — 2. Используя квадратичную формулу — 3. Заполнив квадрат — Давайте поймем это, решив это простое уравнение: Мы пытаемся сделать LHS,..

    Создание VR-миров с A-Frame
    Виртуальная реальность (и дополненная реальность) стали главными модными терминами в образовательных технологиях. С недорогими VR-гарнитурами, такими как Google Cardboard , и использованием..

    Демистификация рекурсии
    КОДЕКС Демистификация рекурсии Упрощенная концепция ошеломляющей О чем весь этот шум? Рекурсия, кажется, единственная тема, от которой у каждого начинающего студента-информатика..