【问题标题】:how to parse Laravel route file?如何解析 Laravel 路由文件?
【发布时间】:2017-04-23 11:56:46
【问题描述】:

roures.php 文件中有包含

    Route::get('roles/create',['as'=>'roles.create','uses'=>'RoleController@create','middleware' => ['permission:role-create']]);
    Route::post('roles/create',['as'=>'roles.store','uses'=>'RoleController@store','middleware' => ['permission:role-create']]);
    Route::get('roles/{id}',['as'=>'roles.show','uses'=>'RoleController@show']);
    Route::get('roles/{id}/edit',['as'=>'roles.edit','uses'=>'RoleController@edit','middleware' => ['permission:role-edit']]);
    Route::patch('roles/{id}',['as'=>'roles.update','uses'=>'RoleController@update','middleware' => ['permission:role-edit']]);
    Route::delete('roles/{id}',['as'=>'roles.destroy','uses'=>'RoleController@destroy','middleware' => ['permission:role-delete']]);

    Route::get('itemCRUD2',['as'=>'itemCRUD2.index','uses'=>'ItemCRUD2Controller@index','middleware' => ['permission:item-list|item-create|item-edit|item-delete']]);
    Route::get('itemCRUD2/create',['as'=>'itemCRUD2.create','uses'=>'ItemCRUD2Controller@create','middleware' => ['permission:item-create']]);
    Route::post('itemCRUD2/create',['as'=>'itemCRUD2.store','uses'=>'ItemCRUD2Controller@store','middleware' => ['permission:item-create']]);
    Route::get('itemCRUD2/{id}',['as'=>'itemCRUD2.show','uses'=>'ItemCRUD2Controller@show']);
    Route::get('itemCRUD2/{id}/edit',['as'=>'itemCRUD2.edit','uses'=>'ItemCRUD2Controller@edit','middleware' => ['permission:item-edit']]);
    Route::patch('itemCRUD2/{id}',['as'=>'itemCRUD2.update','uses'=>'ItemCRUD2Controller@update','middleware' => ['permission:item-edit']]);
    Route::delete('itemCRUD2/{id}',['as'=>'itemCRUD2.destroy','uses'=>'ItemCRUD2Controller@destroy','middleware' => ['permission:item-delete']]);

预期输出:

[
  [
  `url` => 'roles/create',
  'as' => 'roles.create',
  'uses'=>'RoleController@create'
  ],
[
  `url` => 'roles/create',
   'as' => 'roles.store',
   'uses'=>'RoleController@store'
  ],
] 

以此类推

【问题讨论】:

    标签: php regex laravel


    【解决方案1】:

    这里你可以使用file_get_content获取文件内容,我们正在使用正则表达式来使用正则表达式解析文件内容。

    正则表达式: /get\s*\(\s*'\K[^']+|as'\s*=>\s*'\K[^']+|uses'\s*=>\s*'\K[^']+/

    get\s*\(\s*'\K[^']+ 这里将匹配 示例: get(' 匹配到 '

    as'\s*=>\s*'\K[^']+ 这里将匹配 示例: as'=>' 匹配到 '

    uses'\s*=>\s*'\K[^']+ 这里将匹配 示例: uses'=>' 匹配到 '

    Try this code snippet here

    <?php
    ini_set('display_errors', 1);
    $string="Route::get('roles/create',['as'=>'roles.create','uses'=>'RoleController@create','middleware' => ['permission:role-create']]);
        Route::post('roles/create',['as'=>'roles.store','uses'=>'RoleController@store','middleware' => ['permission:role-create']]);
        Route::get('roles/{id}',['as'=>'roles.show','uses'=>'RoleController@show']);
        Route::get('roles/{id}/edit',['as'=>'roles.edit','uses'=>'RoleController@edit','middleware' => ['permission:role-edit']]);
        Route::patch('roles/{id}',['as'=>'roles.update','uses'=>'RoleController@update','middleware' => ['permission:role-edit']]);
        Route::delete('roles/{id}',['as'=>'roles.destroy','uses'=>'RoleController@destroy','middleware' => ['permission:role-delete']]);
    
        Route::get('itemCRUD2',['as'=>'itemCRUD2.index','uses'=>'ItemCRUD2Controller@index','middleware' => ['permission:item-list|item-create|item-edit|item-delete']]);
        Route::get('itemCRUD2/create',['as'=>'itemCRUD2.create','uses'=>'ItemCRUD2Controller@create','middleware' => ['permission:item-create']]);
        Route::post('itemCRUD2/create',['as'=>'itemCRUD2.store','uses'=>'ItemCRUD2Controller@store','middleware' => ['permission:item-create']]);
        Route::get('itemCRUD2/{id}',['as'=>'itemCRUD2.show','uses'=>'ItemCRUD2Controller@show']);
        Route::get('itemCRUD2/{id}/edit',['as'=>'itemCRUD2.edit','uses'=>'ItemCRUD2Controller@edit','middleware' => ['permission:item-edit']]);
        Route::patch('itemCRUD2/{id}',['as'=>'itemCRUD2.update','uses'=>'ItemCRUD2Controller@update','middleware' => ['permission:item-edit']]);
        Route::delete('itemCRUD2/{id}',['as'=>'itemCRUD2.destroy','uses'=>'ItemCRUD2Controller@destroy','middleware' => ['permission:item-delete']]);";
    
    
    preg_match_all("/get\s*\(\s*'\K[^']+|as'\s*=>\s*'\K[^']+|uses'\s*=>\s*'\K[^']+/", $string,$matches);
    $result=array();
    for($x=0;$x<count($matches[0]);$x+=3)
    {
        $result[]=array(
            'url'=>$matches[0][$x],
            'as'=>$matches[0][$x+1],
            'uses'=>$matches[0][$x+2]
        );
    }
    print_r($result);
    

    【讨论】:

      【解决方案2】:

      使用以下正则表达式匹配和替换:

      匹配:.*\('([a-z\/{}0-9]+)',\['as'=&gt;(['a-z\.0-9]+),'uses'=&gt;(['a-zA-Z@]+).*

      替换:[url=&gt; $1, 'as' =&gt; $2, 'uses' =&gt; $3]

      PS。无论你走到哪里来匹配的空间,使用\s* 来对抗它

      【讨论】:

        猜你喜欢
        • 2022-11-12
        • 1970-01-01
        • 2019-09-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-03-28
        • 2023-01-04
        • 1970-01-01
        相关资源
        最近更新 更多