Nano Hash - криптовалюты, майнинг, программирование

Получение данных URL для отображения в строке URL

Я использую Laravel 4 и пытаюсь заставить панель URL-адресов отображать текстовый URL-адрес, сохраненный в базе данных, вместо использования идентификатора.

Это мои маршруты.php

Route::get('/{id}', function($id = 1){

if(is_numeric($id))
{

    $page = Menu::find($id);
    $action = 'content';
    return App::make('HomeController')->$action($id);
} else {
    $column = 'url';
    $url = Seo::where($column, '=', $id)->get();
    $action = 'show';
    return App::make('HomeController')->$action($url[0]->id);
}   
});

Я также использую сводную таблицу, чтобы связать меню с SEO.

Сео модель

<?php

class Seo extends \Eloquent {
protected $fillable = array('url', 'meta_title', 'meta_description', 'keywords');
protected $guarded = array('id');

protected $table = 'seo';

public static $rules = array(
    'title' => '',
    'content' => '',
    'image' => ''
);

public function menu(){
    return $this->belongsToMany('Menu', 'menu_seo', 'seo_id', 'menu_id');
}
}

Модель меню

<?php

class Menu extends \Eloquent {
protected $fillable = array('title', 'menu_id', 'image');
protected $guarded = array('id');

protected $table = 'menus';

public static $rules = array(

    );

public function seo(){
    return $this->belongsToMany('Seo', 'menu_seo', 'menu_id', 'seo_id');
}
}

HomeКонтроллер

public function content($id)
{

    $menus_child = Menu::where('menu_id', 0)->with('menusP')->get();

    $menu = Menu::where('id', $id)->firstOrFail();

    //dd($menu->frames);
    return View::make('index', compact('menus_child'))->with('menu', $menu);
}

а затем я вызываю свои представления, которые ссылаются на меню, подобное этому

@foreach($menu->banner as $banners)
{{ $banners->title }}
@endforeach
29.03.2015

  • Какой у Вас вопрос? 29.03.2015
  • Извините, я думал, что он у меня там. Я хотел бы, чтобы идентификатор изменился на URL-адрес, который я добавил в базу данных 29.03.2015
  • Итак, вы хотите перенаправить с /1 на /foo-bar? (или что-то подобное) Что я не понимаю, если id является идентификатором Menu, как получить правильный URL-адрес? Потому что это отношение многие ко многим... 29.03.2015
  • Я получаю правильный URL-адрес из-за моего исходного маршрута, который [code]Route::get('/{id}', 'HomeController@content');[/code] Я также обновил свой вопрос, чтобы мой контроллер 29.03.2015
  • Да, но определенному меню (идентификатору) может быть назначено много моделей Seo. Которые могут иметь разные URL-адреса. Итак, на какой URL вы хотите перенаправить при доступе к /123? 29.03.2015
  • ну, например, мне нужно, чтобы code/123code было codeabout-us.htmlcode, но мне нужно, чтобы это было динамично и соответствовало моим таблицам. 29.03.2015

Ответы:


1

Я все еще не уверен, как вы хотите получить правильный URL-адрес, связанный с идентификатором, но это не должно иметь большого значения. Основной принцип — просто получить URL-адрес и выполнить перенаправление:

Route::get('/{id}', function($id = 1){
    if(is_numeric($id))
    {
        $page = Menu::find($id);
        $url = 'foo'; // get correct URL somehow
        return Redirect::to($url);
    } else {
        // ...
    }   
});
29.03.2015
  • Я пробовал это, но теперь я получаю эту ошибку. No query results for model [Menu]. Я думаю, это должно означать, что в базе данных ничего нет, но это неправильно, потому что в базе данных есть данные 29.03.2015
  • Если вы выполняете поиск по столбцу без имени id, вы не можете использовать find($id), если не укажете первичный ключ в своей модели. Может в этом проблема... 29.03.2015
  • Это то, что я сделал, чтобы получить URL-адрес $page = Menu::where('id', $id)->first(); foreach($page->seo as $seo){ $url = $seo->url; } Это дает правильный URL-адрес, но я получаю эту ошибку. 29.03.2015
  • Возможно ли, что вы все еще вызываете метод content? Поскольку эта ошибка обычно возникает только из firstOrFail 29.03.2015
  • Я вызываю метод содержимого 29.03.2015
  • Вы делаете редирект там? Или зачем иначе звонить content()? 30.03.2015
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..