2015-01-14 6 views
0

Я хотел бы спросить, почему следующий код работает, перенаправляет нормально, и данные успешно добавлены:Почему переадресация показывает пустую страницу в модели laravel?

CategoriesController:

public function store() 
    { 
     $data = Input::all(); 
     $category = new Term; 
     if($category->saveCategory($data)){ 
      return Redirect::route('admin_posts_categories')->withSuccess('Category successfully added.'); 
     }else{ 
      return Redirect::route('admin_posts_categories')->withError('Failed to add category. #ErrorCode : 13'); 
     } 
    } 

Term Модель:

public function saveCategory($data){ 
    $this->name = $data['name']; 
    $this->slug = $data['slug']; 
    if($this->save()){ 
     $category_taxo = new TermTaxonomy; 
     $category_taxo->term_id = $this->lastCategoryId(); 
     $category_taxo->taxonomy = 'category'; 
     $category_taxo->description = $data['description']; 
     if($category_taxo->save()){ 
      return true; 
     }else{ 
      return false; 
     } 
    }else{ 
      return "#Error Code : 4"; 
    } 
} 

Где, как следующее только вставляет данные, но затем показывает пустую страницу и не перенаправляет:

КатегорииКонтроллер:

public function store() 
    { 
     $data = Input::all(); 
     $category = new Term; 
     $category->saveCategory($data); 
    } 

Term Модель

public function saveCategory($data){ 
    $this->name = $data['name']; 
    $this->slug = $data['slug']; 
    if($this->save()){ 
     $category_taxo = new TermTaxonomy; 
     $category_taxo->term_id = $this->lastCategoryId(); 
     $category_taxo->taxonomy = 'category'; 
     $category_taxo->description = $data['description']; 
     if($category_taxo->save()){ 
      return redirect::route('admin_posts_categories')->withSuccess('Category successfully added.'); 
     }else{ 
      return redirect::route('admin_posts_categories')->withError('Failed to add category.'); 
     } 
    }else{ 
      return redirect::route('admin_posts_categories')->withError('#Error Code : 4.'); 
    } 
} 

Кроме того, я хотел бы задать несколько взаимосвязанных вопросов, это мой код соответствует коррекции шаблонов проектирования, и где я должен поставить редирект, в модели или в контроллере?

+0

Вы никогда не должны ставить логику перенаправления внутри своей модели. Я предлагаю вам посетить laracasts.com, если вы хотите узнать лучшие методы для Laravel – Laurence

+0

Пожалуйста, не используйте форматирование встроенного кода для кодовых блоков, охватывающих несколько строк, потому что они выглядят очень уродливыми в этих случаях. Вместо этого используйте 4-пространственные блокированные блоки кода, например, выбрав свой код и нажав значок '{}' на панели инструментов редактора. –

ответ

0

Попробуйте переадрессации:

1. return Redirect::back()->withSuccess('Category successfully added.'); 

ИЛИ

2. return Redirect::to(URL::to('admin_posts_categories'))->withSuccess('Category successfully added.'); 

Добавить перенаправлять логин внутри контроллера. Даже если вы хотите поставить модель (которая не рекомендуется), используйте функцию Ardent Hook, то есть afterSave().

+0

ваше первое решение работает так, как ожидается, оно перенаправит обратно на предыдущий маршрут. но ваше второе решение кажется неправильным, потому что, если я изменяю ** admin_posts_categories ** на другие именованные маршруты, он все же перенаправляет обратно на предыдущий маршрут не на мой желаемый именованный маршрут. в любом случае я должен использовать модель для бизнес-логики, затем дать ей вернуть true или false и контроллер для функции перенаправления. жаль, что я новичок в laravel. и спасибо за вашу коррекцию. –

+0

Рад помочь, Но я думаю, что маршруты были неправильно настроены или что-то в этом роде, поскольку я использую оба утверждения в своем проекте, и они отлично работают, в любом случае Cheers! –

0

Прежде всего, никогда не ставьте логику перенаправления в модель. Модели предназначены для размещения бизнес-логики. Во-вторых, проверьте, создан ли маршрут для admin_posts_categories в route.php или нет, и как вы вызываете представления. Если возможно, введите соответствующий код маршрута.

+0

«никогда не ставьте логику перенаправления в модель» +1 –

0

Я рекомендую не переносить перенаправления в вашу модель. Таким образом, первое решение будет лучшим из двух, которые у вас есть.

Но вернемся к вашей проблеме. Он показывает пустую страницу, потому что ваша функция магазина ничего не возвращает. return $category->saveCategory($data);, но, как указано выше, этот метод не является наилучшей практикой.

Отличный совет: взглянуть на Laracasts, это научит вас всему, что вы знали, не знали и не знали о Ларавеле.

Смежные вопросы