Не найдено для некоторых маршрутов - PullRequest
1 голос
/ 06 июня 2019

У меня проблема с некоторыми из моих маршрутов в Ларавеле. это мой код в файле web.php:

Route::group(['namespace' => 'Admin', 'middleware' => ['auth:web']], function () {
    Route::get('/admin/audio/create/{audio?}', 'AdminAudioController@create')->name('admin.audioCreate');
    Route::get('/admin/article/create/{article?}', 'AdminArticleController@create')->name('admin.articleCreate');
}

и это моя ссылка в клинке

<a href="{{ route('admin.audioCreate' , ['audio' => $audio->audioId]) }}"><i class="fa fa-edit"></i></a>    
<a href="{{ route('admin.articleCreate' , ['article' => $article->articleId]) }}"><i class="fa fa-edit"></i></a>

и это мои контроллеры: AdminAudioController

<?php

namespace App\Http\Controllers\Admin;

use App\Article;
use App\Http\Requests\ArticleRequest;

class AdminArticleController extends AdminController
{
    public function index()
    {
        $articleList = Article::where('removed', false)->latest()->paginate(10);
        return view('admin.article.archive', compact('articleList'));
    }

    public function create(Article $article = null)
    {
        return view('admin.article.create', compact('article'));
    }
}

AdminArticleController

<?php

namespace App\Http\Controllers\Admin;

use App\Article;
use App\Http\Requests\ArticleRequest;

class AdminArticleController extends AdminController
{
    public function index()
    {
        $articleList = Article::where('removed', false)->latest()->paginate(10);
        return view('admin.article.archive', compact('articleList'));
    }

    public function create(Article $article = null)
    {
        return view('admin.article.create', compact('article'));
    }
}

но моя вторая ссылка с именем "admin.articleCreate" не работает и выдает "404 not found", что мне делать?

а это моя модель статьи

class Article extends Model
{
protected $primaryKey = 'articleId';

use Sluggable;

protected $fillable = [
    'title',
    'subTitle1', 'subTitle2',
    'image',
    'description',
    'body',
    'enable',
];

protected $casts = [
    'image' => 'array'
];

/**
 * Return the sluggable configuration array for this model.
 *
 * @return array
 */
public function sluggable(): array
{
    return [
        'slug' => [
            'source' => 'title'
        ]
    ];
}

public function getRouteKeyName()
{
    return 'slug';
}
}

Ответы [ 3 ]

1 голос
/ 06 июня 2019

Когда вы вызываете метод create(Article $article = null) на вашем контроллере, Laravel использует привязку модели для разрешения вашей модели, а привязка модели использует метод, добавленный в вашу модель

public function getRouteKeyName()
{
    return 'slug'; // by default it will be $primaryKey which is 'id'
}

Короче говоря, Laravel попытается использовать slug до найти вашу модель, пока вы даете ему articleId

Так что, чтобы исправить это, у вас есть несколько вариантов

  • Использование слаг в URL (тот, который я бы порекомендовал)
// blade.php
<a href="{{ route('admin.articleCreate' , ['article' => $article->slug]) }}"><i class="fa fa-edit"></i></a>
  • Использование основного articleId в URL
// blade.php
<a href="{{ route('admin.articleCreate' , ['article' => $article->articleId]) }}"><i class="fa fa-edit"></i></a>

// Article.php.php
public function getRouteKeyName()
{
    return 'articleId'; 
}
  • Использование запроса

// blade.php
<a href="{{ route('admin.articleCreate' , ['article' => $article->YOUR_FIELD]) }}"><i class="fa fa-edit"></i></a>

//Controller.php
public function create($article = null)
{
    $article = Article::where('YOUR_FIELD', $article)->firstOrFail();
    return view('admin.article.create', compact('article'));
}
0 голосов
/ 06 июня 2019

Я вижу, вы упомянули $ article в компактном виде.

Не могли бы вы проверить один раз, я думаю, что метод создания должен выглядеть следующим образом:

public function create(Article $article = null)
{
    return view('admin.article.create', compact('article'));
}
0 голосов
/ 06 июня 2019

у вас есть код

return view('admin.article.create', compact('$article'));

но нужно

return view('admin.article.create', compact('article'));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...