Laravel 自动路由,如 Codeigniter - 自定义解决方案

Posted

技术标签:

【中文标题】Laravel 自动路由,如 Codeigniter - 自定义解决方案【英文标题】:Laravel Auto Routes Like Codeigniter - Custom Solution 【发布时间】:2017-12-26 01:35:36 【问题描述】:

当我没有找到自动路由的最佳解决方案时,我编写了代码。

任何建议将不胜感激。


在您的 routes.php 文件中,在文件末尾写下这一行

Route::match(["get","post"], '/controller/method?/parameter?', "Routes@index");

现在在 App\HTTP\Controllers 中创建一个新类

Routes.php(您可以更改名称)

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Http\Requests;

class Routes extends Controller


public function index($controller,$method="",$parmeter="")
    $controller = ucfirst($controller);

    if(empty($method))
        // e.g: example.com/users 
        // will hit App\Http\Controllers\Users\Users.php Class Index method
        return \App::call("App\Http\Controllers\\$controller\\$controller@index");          
    



    // e.g: example.com/users/list
    // will hit App\Http\Controllers\Users\Users.php Class List method
    // If user.php has List method then $parameters will pass
    $app = \App("App\Http\Controllers\\$controller\\$controller");
    if(method_exists($app, $method))
        return $app->$method($parmeter);
    



    // If you have a folder User and have multiple class in users folder, and want to access other class
    // e.g: example.com/users/groups
    // will hit App\Http\Controllers\Users\Groups.php Class Index method
    $method = ucfirst($method); //Now method will be use as Class name
    $app = \App("App\Http\Controllers\\$controller\\$method");
    return $app->index();



完成

现在在控制器文件夹中创建你的类,它会自动路由...

你的文件结构例如:

App
   HTTP
     Controllers
        Users
          Users.php
          Groups.php
          Etc.php

        Post
          Post.php

        Banners
          Banners.php

        Folder
          File.php

现在你有了想法,你可以根据你的风格改变逻辑,或者你可以使用它。

我使用的是 Laravel 5.2

【问题讨论】:

问题是? 没问题,我提供自动路线的解决方案,但任何建议都将不胜感激。 当您发布此内容时,您必须按下标有“”的按钮这一事实是否表明您应该只使用该按钮来提问?虽然我很欣赏这是共享代码,但这不是这样做的合适地方,StackExchange 有像 CodeReview 这样的地方,这些地方可以接受这类帖子。 【参考方案1】:

据我了解,这可能是您的解决方案。

Laravel 为其控制器提供了这些内置方法

<?php

class TestsController extends BaseController 

/**
 * Display a listing of the resource.
 *
 * @return Response
 */
public function index()

    //


/**
 * Show the form for creating a new resource.
 *
 * @return Response
 */
public function create()

    //


/**
 * Store a newly created resource in storage.
 *
 * @return Response
 */
public function store()

    //


/**
 * Display the specified resource.
 *
 * @param  int  $id
 * @return Response
 */
public function show($id)

    //


/**
 * Show the form for editing the specified resource.
 *
 * @param  int  $id
 * @return Response
 */
public function edit($id)

    //


/**
 * Update the specified resource in storage.
 *
 * @param  int  $id
 * @return Response
 */
public function update($id)

    //


/**
 * Remove the specified resource from storage.
 *
 * @param  int  $id
 * @return Response
 */
public function destroy($id)

    //



可以使用以下语法定义路由:

<?php

Route::resource('tests', 'TestsController');

将处理这些操作:

GET /tests tests.index GET /tests/create tests.create POST /tests tests.store GET /tests/id tests.show GET /tests/id/edit tests.edit PUT/PATCH /tests/id tests.update 删除 /tests/id tests.destroy

【讨论】:

这里我给出了自动路由的解决方案,你不是说自动路由吗? ....关于内置函数你是对的,但我只使用索引方法,并编写我的逻辑,我从索引中调用其他方法。

以上是关于Laravel 自动路由,如 Codeigniter - 自定义解决方案的主要内容,如果未能解决你的问题,请参考以下文章

如何为laravel中的所有路由添加默认参数

Laravel 路由问题:自动重定向到根文件夹

Laravel with JWT - 如何为只有在未经身份验证的情况下才能看到的路由创建路由组

带有通配符的多个域的Laravel路由组,如何处理域后缀?

自动检测 PHP Laravel 应用程序中的所有路由? [复制]

laravel5路由改为规则匹配