繁体   English   中英

Laravel 5.8-一路两种不同的控制器动作

[英]Laravel 5.8 - one route two different controller action

在laravel 5.8中,我有两种类型的url。

/ news / {category}->发送至新闻控制器索引操作,如果具有类别绑定/ news / {news}->发送至新闻控制器详细信息操作,如果具有新闻绑定另一种情况以404中止。

我怎么解决这个问题?

在Laravel和我所知道的几乎所有框架和路由系统中,路由和控制器/动作的关系是1:1。 每个路由只能有一个控制器或动作来处理它。

如果我正确理解您的问题,则您的路由模式为/news/{parameter} ,并且希望发生以下三种情况之一:

  1. {parameter}包含有效的类别标签。 检索类别并显示适当的视图。

  2. {parameter}包含有效的Article(细节)条。 检索文章并显示适当的视图。

  3. {parameter}没有包含有效的类别或商品条目,因此找不到。 返回404错误。

您仍然只需要一个控制器动作,但是您可以将逻辑分开以使其易于理解:

路线/web.php:

Route::get('/news/{param}', 'NewsController@index');

app / Http / Controllers / NewsController(带有伪代码):

class NewsController extends Controller
{
    public function index(string $param)
    {
        if ($category = Category::whereSlug($param)->first()) {
            // Return your category view.
        }

        if ($article = Article::whereSlug($param)->first()) {
            // Return your article view.
        }

        \abort(404);
    }
}

我个人建议不要像这样为两种不同的实体类型共享通用的URL结构。 它打开了名称冲突的可能性(“类别”和“文章”具有相同的标记),并且可能使用户体验混乱。 (这也可能会损害搜索引擎的优化或结果,但这只是猜测-我没有任何要确认或否认的东西。)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM